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

#
Ошибки пагинации, начиная со второй страницы
ИС называется "Новости (тест)".

На первой странице пагинации воспроизводится код:
<title>Здесь расположены новости для тестирования</title>
<meta name="description" content="Идет тестирование системы">
<meta name="keywords" content="тестирование">

Названия всех метатегов в этом случае такие, какими они являются в настройках Узла структуры. Здесь всё хорошо.

Но на второй странице пагинации (и далее аналогично) выводится
<title>Новости (тест) -страница 2</title>
<meta name="description" content="Новости (тест) -страница 2">
<meta name="keywords" content="Новости (тест)">


То есть, инфа из Узла структуры отрубается, и идет из названия ИС.

Видимо, какие-то нелады с ТДС.  Второй день пытаюсь исправить, но все бесполезно.

Вот настройки ТДС - может быть, здесь что-то поменять?

<?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($oInformationsystem->name);
$aDescription = array($oInformationsystem->name);
$aKeywords = array($oInformationsystem->name);

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: Ошибки пагинации, начиная со второй страницы
Все здесь правильно работает (в смысле - как в настройках ТДС и запрограммировано):
1) В корне ИС:
page == 0
group == 0
Поэтому title, description, keywords остаются дефолтовыми (SEO-параметры узла структуры)
2) В корне ИС, но с page != 0 массив $aTitle будет содержать два значения - имя ИС и номер страницы (page NN), а в этом случае срабатывает последний блок if (if (count($aTitle) > 1)) и заменяет дефолтовые title, description и keywords. В этом случае description и keywords будут формироваться из значений соответствующих массивов
ARTatom
#
Re: Ошибки пагинации, начиная со второй страницы
Спасибо, примерно так я себе это и представлял.

Но что конкретно сделать, как корректно изменить код, чтобы инфа всегда шла только из узла структуры, для любой страницы?

(Я столько всего перепробовал, но при моих доработках либо одно ломается, либо другое)
#
Re: Ошибки пагинации, начиная со второй страницы
Естественно, "выключить" код, который формирует новые title, description, keywords.
Например, так:

<?php
  ..
  if (0 && count($aTitle) > 1)
  {
   $aTitle = array_reverse($aTitle);
  ..
ARTatom
#
Re: Ошибки пагинации, начиная со второй страницы
А куда этот код вставить?

==========

(Оператор if (0 && count($aTitle) > 1) несколько непонятен. Вы верно его написали?)
#
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;

вставьте

...
if (0 && 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;

... и да, этот код верен.
Изучайте программирование вообще и PHP в частности:
ARTatom
#
Re: Ошибки пагинации, начиная со второй страницы
К величайшему сожалению, этот вариант не дает требуемого результата. Когда я пытался сам с проблемой справиться, то у меня тоже такой вариант был, только я достигал его как-то иначе.

При предложенной Вами корректировке кода на второй странице пагинации воспроизводятся метатеги, заданные в Узле структуры, и это хорошо, но исчезает  нумерация страниц в title и description.

На второй странице до Вашей корректировки было:
<title>Новости (тест) -страница 2</title>
<meta name="description" content="Новости (тест) -страница 2">
<meta name="keywords" content="Новости (тест)">


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


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


Как этого достичь?




#
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;
ARTatom
#
Re: Ошибки пагинации, начиная со второй страницы

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));
}
HostDev.pw - модули для HostCMS, Telegram: @hostdev
#
Re: Ошибки пагинации, начиная со второй страницы
Цитата:

if (count($aTitle) > 0)

Конечно, так изящнее... было-бы  
Только товарищу нужно не ИС->name + 'page' + page-number, а Узел->SEO + 'page' + page-number (по крайней мере я пробежался еще раз по топику и другого варианта не увидел)
ARTatom
Авторизация