Подключение нужного xsl-файла в зависимости от типа страницы
Материал из Umicms
Скорость выполнения трансформации 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
и т.п.
