Кэширование результата работы метода getCreateForm в XSL-шаблоне
В некоторых ситуациях, в 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 секунд), потом кеш обновляется.