Ошибки пагинации, начиная со второй страницы

#
Re: Ошибки пагинации, начиная со второй страницы
artatom,

к сожалению, и этот вариант неудачен - он хотя и выводит номер страницы, но перед ним идет инфа из Узла структуры плюс название ИС.

Получается так:
<title>Здесь расположены новости для тестированияНовости (тест) -страница 2</title>
<meta name="description" content="Идет тестирование системыНовости (тест) -страница 2">
<meta name="keywords" content="тестированиеНовости (тест)">


"здесь расположены новости для тестирования" - это инфа из Узла структуры.
"Новости (тест)" - это название ИС.
#
Re: Ошибки пагинации, начиная со второй страницы
artatom писал(а):

никто не мешает вместо

$aTitle = array($oInformationsystem->name);
$aDescription = array($oInformationsystem->name);
$aKeywords = array($oInformationsystem->name);

сделать так:

$oStructure = Core_Entity::factory('structure', CURRENT_STRUCTURE_ID);
$aTitle = array($oStructure->name);
$aDescription = array($oStructure->name);
$aKeywords = array($oStructure->name);
HostDev.pw - модули для HostCMS, Telegram: @hostdev
#
Re: Ошибки пагинации, начиная со второй страницы
EugenyP, я не вполне понял, к чему относится Ваша корректировка.

Если к Вашему коду 31.10.2016 06:55:14, то на всех страницах просто название ИС:
Цитата:
<title>новости</title>
<meta name="description" content="новости">
<meta name="keywords" content="новости">


Общий код такой:
if (count($aTitle) > 0)
{
$oStructure = Core_Entity::factory('structure', CURRENT_STRUCTURE_ID);
$aTitle = array($oStructure->name);
$aDescription = array($oStructure->name);
$aKeywords = array($oStructure->name);

    Core_Page::instance()->title(implode($pageSeparator, $aTitle));
    Core_Page::instance()->description(implode($pageSeparator, $aDescription));
    Core_Page::instance()->keywords(implode($pageSeparator, $aKeywords));
}



А если к коду artatom 31.10.2016 01:53:44, то в этом случае на всех страницах идет смесь инфы из Узла структуры и названия ИС (причем, от названия ИС только первое слово):
<title>Здесь расположены новости для тестированияновости</title>
<meta name="description" content="Идет тестирование системыновости">
<meta name="keywords" content="тестированиеновости">


Общий код такой:
if (count($aTitle) > 1)
{
$oStructure = Core_Entity::factory('structure', CURRENT_STRUCTURE_ID);
$aTitle = array($oStructure->name);
$aDescription = array($oStructure->name);
$aKeywords = array($oStructure->name);

   Core_Page::instance()->title .= implode($pageSeparator, $aTitle);
   Core_Page::instance()->description .= implode($pageSeparator, $aDescription);
   Core_Page::instance()->keywords .= implode($pageSeparator, $aKeywords);
}

#
Re: Ошибки пагинации, начиная со второй страницы
Антон, нижний if заменяете на то что я вам написал:

...
if (count($aTitle) > 1)
{
   $aTitle = array_reverse($aTitle);
   $aDescription = array_reverse($aDescription);
   $aKeywords = array_reverse($aKeywords);

   Core_Page::instance()->title .= implode($pageSeparator, $aTitle);
   Core_Page::instance()->description .= implode($pageSeparator, $aDescription);
   Core_Page::instance()->keywords .= implode($pageSeparator, $aKeywords);
}
Core_Page::instance()->object = $Informationsystem_Controller_Show;

а чтобы не добавлялось название ИС, инициализируете выше по коду  массивы $aTitle, $aDescription, $aKeywords
пустыми массивами. Т.е. ищите выше

$aTitle = array($oInformationsystem->name);
$aDescription = array($oInformationsystem->name);
$aKeywords = array($oInformationsystem->name);

заменяете на

$aTitle = array();
$aDescription = array();
$aKeywords = array();
ARTatom
#
Re: Ошибки пагинации, начиная со второй страницы
В этом случае на всех страницах просто дублируется инфа из Узла структуры:
<title>Здесь расположены новости для тестирования</title>
<meta name="description" content="Идет тестирование системы">
<meta name="keywords" content="тестирование">


То есть, нету вожделенного "-страница 2".

ТДС вцелом с учетом такой корректировки имеет вид:

<?php

$oInformationsystem = Core_Entity::factory('Informationsystem', Core_Array::get(Core_Page::instance()->libParams, 'informationsystemId'));

$Informationsystem_Controller_Show = new Informationsystem_Controller_Show($oInformationsystem);

$Informationsystem_Controller_Show   
   ->limit($oInformationsystem->items_on_page)   
   ->parseUrl();

// Текстовая информация для указания номера страницы, например "страница"
$pageName = Core_Array::get(Core_Page::instance()->libParams, 'page')
   ? Core_Array::get(Core_Page::instance()->libParams, 'page')
   : 'страница';

// Разделитель в заголовке страницы
$pageSeparator = Core_Array::get(Core_Page::instance()->libParams, 'separator')
   ? Core_Page::instance()->libParams['separator']
   : ' / ';

if (!is_null(Core_Array::getGet('vote')))
{
   $oSiteuser = Core_Entity::factory('Siteuser')->getCurrent();
   $entity_id = intval(Core_Array::getGet('id'));

   if ($entity_id && !is_null($oSiteuser))
   {
      $entity_type = strval(Core_Array::getGet('entity_type'));
      $vote = intval(Core_Array::getGet('vote'));

      $oObject = Vote_Controller::instance()->getVotedObject($entity_type, $entity_id);

      if (!is_null($oObject))
      {
         $oVote = $oObject->Votes->getBySiteuser_Id($oSiteuser->id);

         $vote_value = $vote ? 1 : -1;

         $deleteVote = 0;
         // Пользователь не голосовал ранее
         if (is_null($oVote))
         {
            $oVote = Core_Entity::factory('Vote');
            $oVote->siteuser_id = $oSiteuser->id;
            $oVote->value = $vote_value;

            $oObject->add($oVote);
         }
         // Пользователь голосовал ранее, но поставил противоположную оценку
         elseif ($oVote->value != $vote_value)
         {
            $oVote->value = $vote_value;
            $oVote->save();
         }
         // Пользователь голосовал ранее и поставил такую же оценку как и ранее, обнуляем его голосование, как будто он вообще не голосовал
         else
         {
            $deleteVote = 1;
            $oVote->delete();
         }

         $aVotingStatistic = Vote_Controller::instance()->getRate($entity_type, $entity_id);

         Core_Page::instance()->response
         ->body(
            json_encode(array('value' => $oVote->value, 'item' => $oObject->id, 'entity_type' => $entity_type,
               'likes' => $aVotingStatistic['likes'], 'dislikes' => $aVotingStatistic['dislikes'],
               'rate' => $aVotingStatistic['rate'], 'delete_vote' => $deleteVote)
            )
         );
      }
   }

   Core_Page::instance()->response
         ->status(200)
         ->header('Pragma', "no-cache")
         ->header('Cache-Control', "private, no-cache")
         ->header('Vary', "Accept")
         ->header('Last-Modified', gmdate('D, d M Y H:i:s', time()) . ' GMT')
         ->header('X-Powered-By', 'HostCMS')
         ->header('Content-Disposition', 'inline; filename="files.json"');

   if (strpos(Core_Array::get($_SERVER, 'HTTP_ACCEPT', ''), 'application/json') !== FALSE)
   {
      Core_Page::instance()->response->header('Content-type', 'application/json; charset=utf-8');
   }
   else
   {
      Core_Page::instance()->response
         ->header('X-Content-Type-Options', 'nosniff')
         ->header('Content-type', 'text/plain; charset=utf-8');
   }

   if(Core_Array::getRequest('_'))
   {
      Core_Page::instance()->response
         ->sendHeaders()
         ->showBody();
      exit();
   }
}

$aTitle = array();
$aDescription = array();
$aKeywords = array();

if (!is_null($Informationsystem_Controller_Show->tag) && Core::moduleIsActive('tag'))
{
   $oTag = Core_Entity::factory('Tag')->getByPath($Informationsystem_Controller_Show->tag);
   if ($oTag)
   {
      $aTitle[] = $oTag->seo_title != '' ? $oTag->seo_title : Core::_('Informationsystem.tag', $oTag->name);
      $aDescription[] = $oTag->seo_description != '' ? $oTag->seo_description : $oTag->name;
      $aKeywords[] = $oTag->seo_keywords != '' ? $oTag->seo_keywords : $oTag->name;
   }
}

if ($Informationsystem_Controller_Show->group)
{
   $oInformationsystem_Group = Core_Entity::factory('Informationsystem_Group', $Informationsystem_Controller_Show->group);

   do {
      $aTitle[] = $oInformationsystem_Group->seo_title != ''
         ? $oInformationsystem_Group->seo_title
         : $oInformationsystem_Group->name;

      $aDescription[] = $oInformationsystem_Group->seo_description != ''
         ? $oInformationsystem_Group->seo_description
         : $oInformationsystem_Group->name;

      $aKeywords[] = $oInformationsystem_Group->seo_keywords != ''
         ? $oInformationsystem_Group->seo_keywords
         : $oInformationsystem_Group->name;

   } while($oInformationsystem_Group = $oInformationsystem_Group->getParent());
}

if ($Informationsystem_Controller_Show->item)
{
   $oInformationsystem_Item = Core_Entity::factory('Informationsystem_Item', $Informationsystem_Controller_Show->item);

   $aTitle[] = $oInformationsystem_Item->seo_title != ''
      ? $oInformationsystem_Item->seo_title
      : $oInformationsystem_Item->name;

   $aDescription[] = $oInformationsystem_Item->seo_description != ''
      ? $oInformationsystem_Item->seo_description
      : $oInformationsystem_Item->name;

   $aKeywords[] = $oInformationsystem_Item->seo_keywords != ''
      ? $oInformationsystem_Item->seo_keywords
      : $oInformationsystem_Item->name;
}

if ($Informationsystem_Controller_Show->page)
{
   array_unshift($aTitle, $pageName . ' ' . ($Informationsystem_Controller_Show->page + 1));
   
   array_unshift($aDescription, $pageName . ' ' . ($Informationsystem_Controller_Show->page + 1));
}

if (count($aTitle) > 1)
{
   $aTitle = array_reverse($aTitle);
   $aDescription = array_reverse($aDescription);
   $aKeywords = array_reverse($aKeywords);

   Core_Page::instance()->title .= implode($pageSeparator, $aTitle);
   Core_Page::instance()->description .= implode($pageSeparator, $aDescription);
   Core_Page::instance()->keywords .= implode($pageSeparator, $aKeywords);
}
Core_Page::instance()->object = $Informationsystem_Controller_Show;

#
Re: Ошибки пагинации, начиная со второй страницы

// if (count($aTitle) > 1)
{
   $aTitle = array_reverse($aTitle);
   $aDescription = array_reverse($aDescription);
   $aKeywords = array_reverse($aKeywords);

   Core_Page::instance()->title .= implode($pageSeparator, $aTitle);
   Core_Page::instance()->description .= implode($pageSeparator, $aDescription);
   Core_Page::instance()->keywords .= implode($pageSeparator, $aKeywords);
}
Core_Page::instance()->object = $Informationsystem_Controller_Show;
ARTatom
#
Re: Ошибки пагинации, начиная со второй страницы
Если плюс к Вашему коду 31.10.2016 18:50:45 заменить, как Вы и говорили прежде,
$aTitle = array($oInformationsystem->name);
$aDescription = array($oInformationsystem->name);
$aKeywords = array($oInformationsystem->name);


на

$aTitle = array();
$aDescription = array();
$aKeywords = array();


то получаем
<title>Здесь расположены новости для тестированиястраница 2</title>
<meta name="description" content="Идет тестирование системыстраница 2">
<meta name="keywords" content="тестирование">


Я пробел добавил и стало все отлично. Хотя, конечно же, было бы совсем корректно вставить тот разделитель, который пользователь задает в Узле управления.

Это сложно?

================
Пользуясь случаем, хочу спросить вот о чем.

Вы ранее использовали выражение if (0 && count($aTitle) > 1), логику которого я так и не сумел понять. И тогда задал этот вопрос на форуме РНР программистов. Просмотрело больше сотни человек, и тоже никто не понял.

Можете раскрыть секрет?
#
Re: Ошибки пагинации, начиная со второй страницы
Массивы инициализируйте значениями (как писал где-то выше EugenyP) из узлов структуры

$aTitle = array( Core_Page::instance()->title);
$aDescription = array(Core_Page::instance()->description);
$aKeywords = array(Core_Page::instance()->keywords);

Генерацию оставьте как в оригинальной ТДС

if (count($aTitle) > 0)
{
   $aTitle = array_reverse($aTitle);
   $aDescription = array_reverse($aDescription);
   $aKeywords = array_reverse($aKeywords);

    Core_Page::instance()->title(implode($pageSeparator, $aTitle));
    Core_Page::instance()->description(implode($pageSeparator, $aDescription));
    Core_Page::instance()->keywords(implode($pageSeparator, $aKeywords));
}


Цитата:
Можете раскрыть секрет?

Никакого секрета, магии, волшебства и т.п.
Я вам приводил ссылки на материалы обязательные к внимательному, осмысленному прочтению и изучению - вы, видимо, за них еще не брались
Здесь все тривиально:
if (0 && count($aTitle) > 1)

Оператор if "требует" булевый результат, который указывает по какой ветке (if .. else.. ) пойдет выполнение кода
В скобках выражение, которое разбирается интерпретатором PHP с учетом приоритетов операций сравнения
Самая приоритетная операция - вычисление функции
if (0 && count($aTitle) > 1)

Потом результат выполнения функции подается на оператор сравнения ( > имеет более высокий приоритет, чем && )
Результатом операции сравнения будет TRUE или FALSE
Получается, что в операции логического И ( && ) справа булевое значение (TRUE или FALSE), а слева целое, которое автоматически приводятся (преобразуется к..) к булевому типу. Вот правила преобразования в булевый тип
Тут, однако, следует заметить, что в реальности все работает немного не так
С целью устранения непроизводительных вычислений функция вообще не будет вызываться!
Если слева в операторе && стоит FALSE (а 0 в нашем случае == FALSE), то что бы ни стояло справа результатом такой опрерации будет FALSE, поэтому в приведенном примере вычисление функции и сравнения ее результат с константой выполнятся не будет - результат то и так известен

Похоже работает и оператор логического ИЛИ (A || B):
TRUE || some-long-caculations - результатом всегда является TRUE, поэтому выражение справа от || не вычисляется

Офф.сайт php.net имеет замечательный, русскоязычный раздел с которого 2 года назад я начал изучать PHP. Вам тоже советую почитать - хотя бы основы языка.
ARTatom
#
Re: Ошибки пагинации, начиная со второй страницы
Мне тоже сразу показалось, что это условие лишено логического смысла, но я засомневался, поскольку оно в достаточно серьезном коде.

Я занимаюсь РНР с 2005 года, но это не основная моя работа (я юрист),  поэтому не все получается. Тем более, в hostcms, где и профи с трудом справляются с задачей.

Еще раз Вам спасибо!
Авторизация