Суть проблемы:
У меня есть два шаблона, _default_ и novosti.
В шаблоне novosti в папке components находится свой файл com_content_view.tpl, т.е. по идее когда перехожу на пункт меню с этим шаблоном должен использоваться файл com_content_view.tpl лежащий в этом шаблоне. Однако это не так.
В папке cache для этих файлов создаются кэшевые файлы с одинаковым именем, т.е. из какого шаблона быстрее скомпилировался файл тот и будет в дальнейшем использоваться. Эту проблему я решил так: (не факт, что все правильно, возможно что она решается каким то другим способом)
В файле cms.php в функции с делал чтобы в смарти передавался имя шаблона в переменную prfx:
В файле Smarty.class после строкидобавил:
В этом же файле в функции _get_auto_filename вместо строки
сделал:
Не знаю насколько решение правильное, однако сейчас у меня оно работает вроде неплохо.
У меня есть два шаблона, _default_ и novosti.
В шаблоне novosti в папке components находится свой файл com_content_view.tpl, т.е. по идее когда перехожу на пункт меню с этим шаблоном должен использоваться файл com_content_view.tpl лежащий в этом шаблоне. Однако это не так.
В папке cache для этих файлов создаются кэшевые файлы с одинаковым именем, т.е. из какого шаблона быстрее скомпилировался файл тот и будет в дальнейшем использоваться. Эту проблему я решил так: (не факт, что все правильно, возможно что она решается каким то другим способом)
В файле cms.php в функции с делал чтобы в смарти передавался имя шаблона в переменную prfx:
public function initSmarty($tpl_folder='modules', $tpl_file=''){ global $_LANG; if (!$this->smarty){ $this->loadSmarty(); } $inCore = cmsCore::getInstance(); $this->smarty->template_dir = $template_has_tpl ? PATH.'/templates/'.$menu_template."/".$tpl_folder : DEFAULT_TEMPLATE_DIR . $tpl_folder; $this->smarty->prfx = $template_has_tpl ? $menu_template : ''; //предал сюда имя шаблона $this->smarty->assign('LANG', $_LANG); $this->smarty->register_modifier("NoSpam", "cmsSmartyNoSpam"); $this->smarty->register_function('add_js', 'cmsSmartyAddJS'); $this->smarty->register_function('add_css', 'cmsSmartyAddCSS'); $this->smarty->register_function('wysiwyg', 'cmsSmartyWysiwyg'); $this->smarty->register_function('comments', 'cmsSmartyComments'); $this->smarty->register_function('profile_url', 'cmsSmartyProfileURL'); return $this->smarty; }
В файле Smarty.class после строки
var $template_dir = 'templates';
/** * Префикс шаблона к имени * * @var string */ var $prfx = '';
В этом же файле в функции _get_auto_filename вместо строки
$_return .= '%%' . $_crc32 . '%%' . $_filename;
$_return .= $this->prfx.'%%' . $_crc32 . '%%' . $_filename;
Не знаю насколько решение правильное, однако сейчас у меня оно работает вроде неплохо.
Реклама #
Серёга 13 лет назад #