Кэширование результата работы метода getCreateForm в XSL-шаблоне — различия между версиями
VITL' (обсуждение | вклад) (Новая страница: «В некоторых ситуациях, в XSL-шаблоне вызывается метод, который долго выполняется и отдает р…») |
Mad grant (обсуждение | вклад) |
||
(не показаны 3 промежуточные версии 2 участников) | |||
Строка 1: | Строка 1: | ||
− | В некоторых ситуациях, в XSL-шаблоне вызывается метод, который долго выполняется и отдает результат, который меняется очень редко. Таким методом может быть data getCreateForm(). В данной статье рассмотрим пример | + | В некоторых ситуациях, в XSL-шаблоне вызывается метод, который долго выполняется и отдает результат, который меняется очень редко. Таким методом может быть data getCreateForm(). В данной статье рассмотрим пример кэширования результата работы макроса getCreateForm() на один час. |
Сначала в папке '''/sys-temp/''' создадим папку '''/udatacache/''' . Далее в папке '''classes/modules/data/''' добавим '''permissions.custom.php''' | Сначала в папке '''/sys-temp/''' создадим папку '''/udatacache/''' . Далее в папке '''classes/modules/data/''' добавим '''permissions.custom.php''' | ||
следующего содержания: | следующего содержания: | ||
Строка 33: | Строка 33: | ||
</source> | </source> | ||
− | В самом XSL-шаблоне необходимо будет использовать метод '''getCreateFormCustom''', вместо '''getCreateForm'''. Метод '''getCreateFormCustom''' сохраняет результат работы оригинального метода '''getCreateForm''' в файл, данные сохраняются в xml-формате. Из | + | В самом XSL-шаблоне необходимо будет использовать метод '''getCreateFormCustom''', вместо '''getCreateForm'''. Метод '''getCreateFormCustom''' сохраняет результат работы оригинального метода '''getCreateForm''' в файл, данные сохраняются в xml-формате. Из кэша данные берутся в течении часа (3600 секунд), потом кэш обновляется. |
+ | [[Категория:Кеширование]][[Категория:Верстка в XSLT]][[Категория:Написание кастомных макросов]] |
Текущая версия на 20:19, 4 июня 2013
В некоторых ситуациях, в 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 секунд), потом кэш обновляется.