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

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО

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

#1 5 сентября 2016 в 10:17
Суть в том, что я пишу тему на бутстрапе и приходится менять JS. При этом не хотелось бы менять совсем все. С админкой сейчас проблем нет, разные темы указал и все. Для разных компонентов тоже можно указать свой шаблон. А как правильно указать тему на уровне отдельных страниц, вернее типов страниц? Чтобы не переписывать фронт страниц создания материалов. Чувствую, что ответ на поверхности должен быть, но… я на работе и тут не хватает досугового времени залезть в код и посмотреть самому, может кто раньше подскажет zst
#2 5 сентября 2016 в 16:44
Нашел решение. Вызвал хук engine_start в котором реализовал следующий код:
  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. }
#3 5 сентября 2016 в 17:26
Иван Шкута, Спасибо, мне что то подобное скоро понадобиться, только не понял, зачем использовать
  1. cmsConfig::getInstance()->set('template', 'default');
  2. cmsTemplate::getInstance()->setName('default');
Может подойдет функция
  1. /**
  2.   * Устанавливает шаблон скелета
  3.   * @param string $layout
  4.   */
  5. public function setLayout($layout){
  6. $this->layout = $layout;
  7. }
и создать свой файл похожий на main.tpl.php
#4 5 сентября 2016 в 21:13
А что-то вроде
  1. ...
  2. $this->cms_template->setName('default');
  3. // или
  4. cmsTemplate::getInstance()->setName('default');
не работает?

P.S. не проверял, потому и спрашиваю.
#5 7 сентября 2016 в 10:53
Насколько я понимаю, лэйот нужно указывать ДО вызова шаблона — в логике. На уровне темы эти объекты не помогут. Могу ошибаться…
#6 15 сентября 2016 в 09:30
Да, действительно ошибался. Конструкция cmsTemplate::getInstance()->setName('default'); Работает в любом месте шаблона.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.