Три в одном

#
Три в одном
Для страницы новостей, по сути, нужно три макета.

Один макет для первой страницы списка новостей, так как там в начале идет статья и сбоку выводится баннер.

Второй макет для второй и последующих страниц списка новостей, так как в них этих дополнений нету, но выводятся метки.

Третий макет для вывода конкретной частной одной новости, который вообще отличается от двух первых.

Есть на Форуме рекомендация для подмены макетов в коде настроек ТДС вписать
       Core_Page::instance()->template(
         Core_Entity::factory('Template', 9)

      );

Но так получится только одна подмена. То есть, будет только два варианта страницы новостей.
А как сделать три варианта?
Модератор
#
Re: Три в одном
Massha писал(а):
А как сделать три варианта?


Делайте разные условия через if-else. Проверяйте на нужные условия и выводите. В коде есть и определение текущей страницы:

$Informationsystem_Controller_Show->page + 1
Вы только что начали читать предложение, чтение которого вы уже заканчиваете.
#
Re: Три в одном
В коде есть такой фрагмент, но что с ним делать, мне непонятно:
if ($Informationsystem_Controller_Show->page)
{
   array_unshift($aTitle, $pageName . ' ' . ($Informationsystem_Controller_Show->page + 1));
}


Я все доки пересмотрела, но подробного описания не нашла, а сама никак не могу разобраться! Это прям для меня загадка, решить которую моего ума точно не хватит!

Можете конкретно написать, как выводить для первой страницы списка новостей макет 7, для второй страницы макет 8, а для страницы описания отдельной новости макет 9???

ПОЖАЛУЙСТА!!!!!

================
Один из макетов будет указан в узле структуры. Любой, какой Вы скажете.

В настройках ТДС сейчас вот что:
<?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(Core_Array::get(Core_Page::instance()->libParams, 'itemsOnPage'))
   ->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));
}

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: Три в одном
Massha писал(а):
но что с ним делать, мне непонятно:

Это печально.

С ним ничего делать не нужно. Вам нужно работать только с $Informationsystem_Controller_Show->page

if($Informationsystem_Controller_Show->page == 0)
{

}
elseif($Informationsystem_Controller_Show->page > 0)
{

}
else
{

}
Вы только что начали читать предложение, чтение которого вы уже заканчиваете.
#
Re: Три в одном
Спасибо, конечно, но я ничего не поняла...

Что вставлять в эти скобки и куда помещать всю эту конструкцию?

А может быть, и в коде ТДС прежде надо что-то удалить?

В общем, что я только ни пробовала - ничего не выходит! Страница вообще перестает открываться и все........
#
Re: Три в одном
Massha,
для первой страницы шаблон 7 выставите в структуре
<?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(Core_Array::get(Core_Page::instance()->libParams, 'itemsOnPage'))
    ->parseUrl();
   
$template = false;
if($Informationsystem_Controller_Show->item != 0) {
   $template = 9;
} else if($Informationsystem_Controller_Show->page > 0) {
   $template = 8;
}

if ($template) {
    Core_Page::instance()->template(Core_Entity::factory('Template', $template));
}

// Текстовая информация для указания номера страницы, например "страница"
$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));
}

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;
HostDev.pw - модули для HostCMS, Telegram: @hostdev
#
Re: Три в одном
Спасибо, Евгений!

Вот только на практике оказалось, что нужен ещё один макет.

Дело в том, что если в ИС есть информационная группа, то нужен макет:
- для страницы, где находится список информационных групп;
- для первой страницы информационной группы, где находится список новостей;
- для второй и последующих страниц информационной группы, где продолжается список новостей;
- для описания частной новости.

Можно ли как-то добавить еще один макет в созданный Вами код?

для первой страницы макет 7 выставите в структуре
$template = false;
if($Informationsystem_Controller_Show->item != 0) {
   $template = 9;
} else if($Informationsystem_Controller_Show->page > 0) {
   $template = 8;
}
#
Re: Три в одном
Massha,

пробуйте

$template = false;
if($Informationsystem_Controller_Show->item != 0) {
   $template = 9;
} else if ($Informationsystem_Controller_Show->group != 0 and $Informationsystem_Controller_Show->page = 0) {
   // для группы и первой страницы
   $template = 10;
} else if ($Informationsystem_Controller_Show->group != 0 and $Informationsystem_Controller_Show->page > 0) {
   // для группы и последующих страниц
   $template = 11;
} else if($Informationsystem_Controller_Show->page > 0) {
   $template = 8;
}
HostDev.pw - модули для HostCMS, Telegram: @hostdev
#
Re: Три в одном
К сожалению, везде выводится только один макет!...
#
Re: Три в одном
Massha,
очепятка вышла


$template = false;
if($Informationsystem_Controller_Show->item != 0) {
    $template = 9;
} else if ($Informationsystem_Controller_Show->group != 0 and $Informationsystem_Controller_Show->page == 0) {
    // для группы и первой страницы
    $template = 10;
} else if ($Informationsystem_Controller_Show->group != 0 and $Informationsystem_Controller_Show->page > 0) {
    // для группы и последующих страниц
    $template = 11;
} else if($Informationsystem_Controller_Show->page > 0) {
    $template = 8;
}
HostDev.pw - модули для HostCMS, Telegram: @hostdev
Авторизация