Подключение нужного xsl-файла в зависимости от типа страницы
Материал из Umicms
Версия от 04:47, 29 сентября 2011; VITL' (обсуждение | вклад)
Скорость выполнения трансформации xml-данных в html зависит от итогового размера xsl-файла, в котором прописаны все шаблоны для обработки данных. При создании высоко нагруженного сайта, желательно учитывать данный факт. Определенным образом, в XSL-шаблоне можно прописать конструкцию, которая позволит в зависимости от текущего типа страницы (module-method), подключить (includе) нужный xsl-шаблон.
Для решения данной задачи добавим в файл classes/modules/custom.php следующий метод:
public function currentModule() {
$cmsController = cmsController::getInstance();
$permissions = permissionsCollection::getInstance();
//текущий модуль
$current_module = $cmsController->getCurrentModule();
//текущий метод
$current_method = $cmsController->getCurrentMethod();
//авторизован ли пользователь
$user_or_guest = ($permissions->isAuth()) ? 'user' : 'guest';
$str = "<!ENTITY current_module '{$current_module}'>" . "\n";
$str .= "<!ENTITY current_method '{$current_method}'>";
$str .= "<!ENTITY user_mode '{$user_or_guest}'>";
$result = array('plain:result' => $str);
return $result;
}
В основном XSL-шаблоне страницы, необходимо прописать следующий DOCTYPE:
<!DOCTYPE xsl:stylesheet SYSTEM "udata://custom/currentModule">
который определит три сущности:
- current_module
- current_method
- user_mode
которые можно использовать в include:
<xsl:include href="modules/¤t_module;/common.xsl" />
В итоге, возможные варианты подключаемых файлов:
- modules/webforms/common.xsl
- modules/blogs20/common.xsl
- modules/photoalbum/common.xsl
и т.п.