Подключение нужного 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/&current_module;/common.xsl" />

В итоге, возможные варианты подключаемых файлов:

  • modules/webforms/common.xsl
  • modules/blogs20/common.xsl
  • modules/photoalbum/common.xsl

и т.п.