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

Материал из Umicms
Перейти к:навигация, поиск
(Новая страница: «В некоторых ситуациях, в XSL-шаблоне вызывается метод, который долго выполняется и отдает р…»)
 
 
(не показаны 3 промежуточные версии 2 участников)
Строка 1: Строка 1:
В некоторых ситуациях, в XSL-шаблоне вызывается метод, который долго выполняется и отдает результат, который меняется очень редко. Таким методом может быть data getCreateForm(). В данной статье рассмотрим пример кеширования результата работы макроса 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-формате. Из кеша данные берутся в течении часа (3600 секунд), потом кеш обновляется.
+
В самом 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 секунд), потом кэш обновляется.