Как указать дефолтный шаблон для отдельных страниц?

Например, для страниц создания/редактирования материалов.

 
Посетитель
small user social cms
Медаль
Сообщений: 195
Суть в том, что я пишу тему на бутстрапе и приходится менять JS. При этом не хотелось бы менять совсем все. С админкой сейчас проблем нет, разные темы указал и все. Для разных компонентов тоже можно указать свой шаблон. А как правильно указать тему на уровне отдельных страниц, вернее типов страниц? Чтобы не переписывать фронт страниц создания материалов. Чувствую, что ответ на поверхности должен быть, но... я на работе и тут не хватает досугового времени залезть в код и посмотреть самому, может кто раньше подскажет zst
СельхозМолл (сделано на Инстанте 2
Посетитель
small user social cms
Медаль
Сообщений: 195
Нашел решение. Вызвал хук engine_start в котором реализовал следующий код:
Код PHP:
  1. public function run(){
  2.  
  3. // Подготавливаем URL к проверке
  4. $uri = trim(urldecode($_SERVER['REQUEST_URI']));
  5. $pos_que = mb_strpos($uri, '?');
  6. if ($pos_que !== false){
  7. $uri = mb_substr($uri, 0, $pos_que);
  8. }
  9. $segments = explode('/', $uri);
  10.  
  11. $pseudo = false;
  12.  
  13. // Если во втором элементе add или edit выводим дефолтный шаблон
  14. if(isset($segments[2])){
  15. if( $segments[2] === 'add' || $segments[2] === 'edit' ){
  16. cmsConfig::getInstance()->set('template', 'default');
  17. cmsTemplate::getInstance()->setName('default');
  18. $pseudo = true;
  19. }
  20. }
  21.  
  22. // Если у нас в шаблоне есть свой хелпер, то с помощью этой константы можно вернуть к исполнению дефолтный
  23. // необходимо т.к. хелпер подключается раньше всех хуков
  24. define('PSEUDO', $pseudo);
  25.  
  26. return true;
  27.  
  28. }
СельхозМолл (сделано на Инстанте 2
Реклама
cms
Посетитель
small user social cms
МедальКубок зрительских симпатийАвторитет форума
Сообщений: 1168
Иван Шкута, Спасибо, мне что то подобное скоро понадобиться, только не понял, зачем использовать
Код PHP:
  1. cmsConfig::getInstance()->set('template', 'default');
  2. cmsTemplate::getInstance()->setName('default');
Может подойдет функция
Код PHP:
  1. /**
  2.   * Устанавливает шаблон скелета
  3.   * @param string $layout
  4.   */
  5. public function setLayout($layout){
  6. $this->layout = $layout;
  7. }
и создать свой файл похожий на main.tpl.php
Дополнения для InstantCMS 2 | Готовый сайт Доска объявлений
Посетитель
small user social cms
МедальКубок зрительских симпатийАвторитет форума
Сообщений: 1164
А что-то вроде
Код PHP:
  1. ...
  2. $this->cms_template->setName('default');
  3. // или
  4. cmsTemplate::getInstance()->setName('default');
не работает?

P.S. не проверял, потому и спрашиваю.
Посетитель
small user social cms
Медаль
Сообщений: 195
Насколько я понимаю, лэйот нужно указывать ДО вызова шаблона - в логике. На уровне темы эти объекты не помогут. Могу ошибаться...
Редактировалось: 1 раз (Последний: 7 сентября 2016 в 10:54)
СельхозМолл (сделано на Инстанте 2
Посетитель
small user social cms
Медаль
Сообщений: 195
Да, действительно ошибался. Конструкция cmsTemplate::getInstance()->setName('default'); Работает в любом месте шаблона.
СельхозМолл (сделано на Инстанте 2
В начало страницы
Предыдущая темаСледующая тема Перейти на форум: