Проблемы с выводом разных шаблонов

+9
1.18K
Суть проблемы:
У меня есть два шаблона, _default_ и novosti.

В шаблоне novosti в папке components находится свой файл com_content_view.tpl, т.е. по идее когда перехожу на пункт меню с этим шаблоном должен использоваться файл com_content_view.tpl лежащий в этом шаблоне. Однако это не так.

В папке cache для этих файлов создаются кэшевые файлы с одинаковым именем, т.е. из какого шаблона быстрее скомпилировался файл тот и будет в дальнейшем использоваться. Эту проблему я решил так: (не факт, что все правильно, возможно что она решается каким то другим способом)

В файле cms.php в функции с делал чтобы в смарти передавался имя шаблона в переменную prfx:
  1.  
  2. public function initSmarty($tpl_folder='modules', $tpl_file=''){
  3.  
  4. global $_LANG;
  5.  
  6. if (!$this->smarty){ $this->loadSmarty(); }
  7.  
  8. $inCore = cmsCore::getInstance();
  9. $menu_template = trim($inCore->menuTemplate($inCore->menuId()));
  10.  
  11. $template_has_tpl = file_exists(PATH.'/templates/'.$menu_template."/{$tpl_folder}/{$tpl_file}");
  12.  
  13. $this->smarty->template_dir = $template_has_tpl ? PATH.'/templates/'.$menu_template."/".$tpl_folder : DEFAULT_TEMPLATE_DIR . $tpl_folder;
  14. $this->smarty->prfx = $template_has_tpl ? $menu_template : ''; //предал сюда имя шаблона
  15.  
  16. $this->smarty->assign('LANG', $_LANG);
  17. $this->smarty->register_modifier("NoSpam", "cmsSmartyNoSpam");
  18. $this->smarty->register_function('add_js', 'cmsSmartyAddJS');
  19. $this->smarty->register_function('add_css', 'cmsSmartyAddCSS');
  20. $this->smarty->register_function('wysiwyg', 'cmsSmartyWysiwyg');
  21. $this->smarty->register_function('comments', 'cmsSmartyComments');
  22. $this->smarty->register_function('profile_url', 'cmsSmartyProfileURL');
  23.  
  24. return $this->smarty;
  25.  
  26. }
  27.  

В файле Smarty.class после строки
  1. var $template_dir = 'templates';
добавил:
  1.  
  2. /**
  3.   * Префикс шаблона к имени
  4.   *
  5.   * @var string
  6.   */
  7. var $prfx = '';
  8.  

В этом же файле в функции _get_auto_filename вместо строки
  1.  
  2. $_return .= '%%' . $_crc32 . '%%' . $_filename;
  3.  
сделал:
  1.  
  2. $_return .= $this->prfx.'%%' . $_crc32 . '%%' . $_filename;
  3.  



Не знаю насколько решение правильное, однако сейчас у меня оно работает вроде неплохо.
0
Серёга Серёга 12 лет назад #
Доброго времени суток, у меня почему то темплейт читает правильно, а тпл'ки читает со стандартного шаблона. Версия 1.8. В чем может быть проблема?

Еще от автора

связка ishop и программа Покупка на Яндекс-маркете (2)
продолжение http://instantcms.ru/blogs/uluchshenija/svjazka-ishop-i-programa-pokupka-na-jandeks-markete.htmlпервой части
связка ishop и программа Покупка на Яндекс-маркете
Яндекс маркет позволяет заказывать товары непосредственно с яндекса - удобная штука.
Сортировка дополнительных картинок в шопе drag'n'drop
Сделал возможность перемещения дополнительных картинок в шопе: т.е. можно мышкой взять и перетащить картинку вверх-вниз, как требуется
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.