[DOCS] Как сменить шаблон на другой и активировать опции другого шаблона?

 
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 1862
$template = cmsTemplate::getInstance();

Назначаем другой шаблон вместо текущего:
Код PHP:
  1. $template->setName('template');
  2. $template->setInheritNames($template->getInheritTemplates());
Еще это:
Код PHP:
  1. $template->getOptions();
Тоже нужно вроде, подгружаются языковые файлы шаблона ... и ... нет, опции шаблона не подгрузились.
Как сделать корректную смену шаблона чтобы и опции подгрузились?
А то и шаблон сменился и он загружается, но опции остались от шаблона до смены.

Если в контроллере template подправить protected $options; на public $options; и затем у себя ниже сделать:
Код PHP:
  1. $template->options = $template->getOptions();
Но тут явно не правильный ход.
Хотя я ждал что после вызова getOptions() опции будут вызваны.

Где я логику потерял? Есть решение?
Дополнения для InstantCMS
Посетитель
small user social cms
МедальКубок зрительских симпатийАвторитет форума
Сообщений: 1242
Попробуйте
Код PHP:
  1. $template->loadOptions();
Или вообще получите опции из yml файла
Код PHP:
  1. $options_file = $this->site_config->root_path . "system/config/theme_{$template->name}.yml";
  2. if (!is_readable($options_file)){ return array(); }
  3. $options_yaml = file_get_contents($options_file);
  4. $options = cmsModel::yamlToArray($options_yaml);
Дополнения для InstantCMS 2 | Готовый сайт Доска объявлений
Реклама
cms
Посетитель
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 1862
Evanescence:
Да, именно так они и получаются.
и $template->loadOptions(); достаточно для того чтобы получить их из файла.
Но при просмотре: dump($template); мы имеем предыдущие опции.
А вот переписать из в protected $options можно только если сделать public
Дополнения для InstantCMS
InstantCMS Team
small user social cms
МедальАвторитет форумаКубок зрительских симпатий
Сообщений: 4577
Kreator:
Как сменить шаблон на другой и активировать опции другого шаблона?
В хуке, до первой инициализации cmsTemplate::getInstance() сменить имя шаблона в объекте конфигурации. Максимально правильно - только так. Распространится это на всю работу движка.

Kreator:
Хотя я ждал что после вызова getOptions() опции будут вызваны.
Так они и вызвались, метод отдаёт именно их. get = получить, а не установить в свойство $options, где по прежнему старые опции.

Если надо например только в контроллере/экшене вывести в определённом шаблоне, то не вижу проблем.
Код PHP:
  1.  
  2. $template = new cmsTemplate('имя шаблона');
  3. // если это всё в контроллере или экшене, надо установить контекст
  4. $template->setContext($this);
  5.  
После чего $template соответственно нужно использовать, а не cmsTemplate::getInstance().
Редактировалось: 1 раз (Последний: 10 ноября 2019 в 18:33)
Видео каталог для InstantCMS | Аудио каталог для InstantCMS | Мы Вконтакте | Предложение для спонсоров
В начало страницы
Предыдущая темаСледующая тема Перейти на форум:
Быстрый ответ
Чтобы писать на форуме, зарегистрируйтесь или авторизуйтесь.