Универсальный метод для кэширования xml-данных в XSLT — различия между версиями
Материал из Umicms
VITL' (обсуждение | вклад) (Новая страница: «Некоторая информация по кешированию xml-данных была представлена в данной статье: [[Кеширов…») |
VITL' (обсуждение | вклад) |
||
Строка 4: | Строка 4: | ||
Универсальный метод, который необходимо добавить в файл '''classes/modules/cutom.php''', может быть представлен в следующем виде: | Универсальный метод, который необходимо добавить в файл '''classes/modules/cutom.php''', может быть представлен в следующем виде: | ||
<source lang="php"> | <source lang="php"> | ||
− | public function xsltCache($expire = 3600, $ | + | public function xsltCache($expire = 3600, $stream){ |
− | $ | + | $params_temp = array_slice(func_get_args(), 2); |
− | $params = | + | $params = array(); |
+ | foreach($params_temp as $param){ | ||
+ | $params[] = (strpos($param, '/') !== FALSE) ? "(" . $param . ")" : $param; | ||
+ | } | ||
+ | |||
$params_str = implode('/', $params); | $params_str = implode('/', $params); | ||
− | $url = " | + | $url = $stream . "://" . $params_str; |
− | |||
$folder = CURRENT_WORKING_DIR . '/sys-temp/udatacache/'; | $folder = CURRENT_WORKING_DIR . '/sys-temp/udatacache/'; | ||
$path = $folder . md5($url) . '.xml'; | $path = $folder . md5($url) . '.xml'; |
Версия 08:13, 16 февраля 2012
Некоторая информация по кешированию xml-данных была представлена в данной статье: Кеширование результата работы метода getCreateForm в XSL-шаблоне
Универсальный метод, который необходимо добавить в файл classes/modules/cutom.php, может быть представлен в следующем виде:
public function xsltCache($expire = 3600, $stream){
$params_temp = array_slice(func_get_args(), 2);
$params = array();
foreach($params_temp as $param){
$params[] = (strpos($param, '/') !== FALSE) ? "(" . $param . ")" : $param;
}
$params_str = implode('/', $params);
$url = $stream . "://" . $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 - один из параметров, их может быть больше одного