Два макета у одной ИС

#
Два макета у одной ИС
Для ИС статей существует макет. Этот макет используется для страницы со списком статей (в демо http://demo.hostcms.ru/articles/, и по умолчанию для страницы с конкретной статьей (в демо http://demo.hostcms.ru/articles/47/.

Как бы сделать, что бы для страницы с отдельной статьей можно было использовать другой макет (не тот, что для страницы со списком, а специальный)?

Модератор
#
Re: Два макета у одной ИС
Делайте в коде настроек ТДС подмену макета:


      Core_Page::instance()->template(
         Core_Entity::factory('Template', 9)
      );

Вы только что начали читать предложение, чтение которого вы уже заканчиваете.
#
Re: Два макета у одной ИС
В Списке типовых динамических страниц есть Информационная система. В ее настройках есть код, приведенный внизу. Вот в него вставить код подмены? При этом для страницы со списком по умолчанию останется макет, заданнй в Структуре?

И второе.
На сайте несколько ИС Статьи ("Статьи о дороге", "Статьи о погоде" и т.п.). И для каждого случая потребуется своя подмена макета. Тогда придется создать создать несколько ТДС для каждого варианта.
Это допустимо?




<?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']
   : ' / ';

$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: Два макета у одной ИС
Спасибо, всё отлично получилось!!!

Только один нюанс надо учесть: что подменется шаблон страницы со списком, а не страницы с отдельными статьями!!!

И это даже гораздо удобнее!
#
Re: Два макета у одной ИС
И получается, что для каждой подмены нужна отдельная ТДС?
#
Re: Два макета у одной ИС
Получается, что так.
#
Re: Два макета у одной ИС
Тогда стоит в параметры к ТДС добавить свойство "подменять макет" типа "галочка", в настройках узла структуры при необходимости ставить эту галочку и в ТДС также сделать проверку на эту галочку
HostDev.pw - модули для HostCMS, Telegram: @hostdev
#
Re: Два макета у одной ИС
borisych,
можно одну, просто проверку делать
$Informationsystem_Controller_Show->group или $Informationsystem_Controller_Show->item
www.morozovpimnev.ru - создание, поддержка и продвижение сайтов | Наш канал https://asmp.su/channel
#
Re: Два макета у одной ИС
попробовал вставить
Core_Page::instance()->template(
          Core_Entity::factory('Template', 23)
       );

подмена происходит и на странице с разделами и на странице с Инф.Элементами, и в нутри конкретного элемента, т.е. равносильно тому что я бы изменил шаблон в структуре сайта
#
Re: Два макета у одной ИС
Denis_prk,
Цитата:
Тогда стоит в параметры к ТДС добавить свойство "подменять макет" типа "галочка", в настройках узла структуры при необходимости ставить эту галочку и в ТДС также сделать проверку на эту галочку
HostDev.pw - модули для HostCMS, Telegram: @hostdev
Авторизация