Универсальный метод для кеширования xml-данных в XSLT
Материал из Umicms
Некоторая информация по кешированию 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 - один из параметров, их может быть больше одного
