Универсальный метод для кэширования xml-данных в XSLT
Материал из Umicms
Версия от 08:00, 29 декабря 2011; VITL' (обсуждение | вклад) (Новая страница: «Некоторая информация по кешированию xml-данных была представлена в данной статье: [[Кеширов…»)
Некоторая информация по кешированию xml-данных была представлена в данной статье: Кеширование результата работы метода getCreateForm в XSL-шаблоне
Универсальный метод, который необходимо добавить в файл classes/modules/cutom.php, может быть представлен в следующем виде:
public function xsltCache($expire = 3600, $module, $method){
$args = func_get_args();
$params = array_slice($args, 3);
$params_str = implode('/', $params);
$url = "udata://" . $module . '/' . $method . '/' . $params_str;
$folder = CURRENT_WORKING_DIR . '/sys-temp/udatacache/';
$path = $folder . md5($url) . '.xml';
if(!is_dir($folder)) mkdir($folder, 0777, true);
if(is_file($path)) $mtime = filemtime($path);
if(!is_file($path) || time() > ($mtime + $expire)) {
$data = file_get_contents($url);
file_put_contents($path, $data);
return array('plain:result' => $data);
}else{
$result = file_get_contents($path);
return array('plain:result' => $result);
}
}
а сам вызов в XSL-шаблоне будет следующим:
udata://custom/xsltCache/3600/custom/lidersCustom/20
где 3600 - время кеширования xml-данных в секундах, custom - модуль lidersCustom - метод 20 - один из параметров, их может быть больше одного