Кеширование результата работы метода getCreateForm в XSL-шаблоне
Материал из Umicms
В некоторых ситуациях, в XSL-шаблоне вызывается метод, который долго выполняется и отдает результат, который меняется очень редко. Таким методом может быть data getCreateForm(). В данной статье рассмотрим пример кеширования результата работы макроса getCreateForm() на один час. Сначала в папке /sys-temp/ создадим папку /udatacache/ . Далее в папке classes/modules/data/ добавим permissions.custom.php следующего содержания:
<?php $permissions = Array('main' => Array('getCreateFormCustom')); ?>
А в файл __custom.php добавим новый метод getCreateFormCustom:
public function getCreateFormCustom($typ_id){ $typ_id = (int) $typ_id; $path = CURRENT_WORKING_DIR . '/sys-temp/udatacache/getCreateForm' . $typ_id . '.xml'; if(is_file($path) == false){ $uri = "udata://data/getCreateForm/{$typ_id}"; $data = file_get_contents($uri); file_put_contents($path, $data); return array('plain:result' => $data); } $mtime = filemtime($path); $data = file_get_contents($path); $expire = 3600; if(time() > ($mtime + $expire)) { $uri = "udata://data/getCreateForm/{$typ_id}"; $data = file_get_contents($uri); file_put_contents($path, $data); return array('plain:result' => $data); }else return array('plain:result' => $data); }
В самом XSL-шаблоне необходимо будет использовать метод getCreateFormCustom, вместо getCreateForm. Метод getCreateFormCustom сохраняет результат работы оригинального метода getCreateForm в файл, данные сохраняются в xml-формате. Из кеша данные берутся в течении часа (3600 секунд), потом кеш обновляется.
