Кэширование результата работы метода getCreateForm в XSL-шаблоне

Материал из Umicms
Перейти к:навигация, поиск

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