Универсальный метод для кэширования xml-данных в XSLT — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
(Новая страница: «Некоторая информация по кешированию xml-данных была представлена в данной статье: [[Кеширов…»)
 
Строка 4: Строка 4:
 
Универсальный метод, который необходимо добавить в файл '''classes/modules/cutom.php''', может быть представлен в следующем виде:
 
Универсальный метод, который необходимо добавить в файл '''classes/modules/cutom.php''', может быть представлен в следующем виде:
 
<source lang="php">
 
<source lang="php">
   public function xsltCache($expire = 3600, $module, $method){
+
   public function xsltCache($expire = 3600, $stream){  
       $args = func_get_args();
+
       $params_temp = array_slice(func_get_args(), 2);
       $params = array_slice($args, 3);
+
       $params = array();
 +
      foreach($params_temp as $param){
 +
        $params[] = (strpos($param, '/') !== FALSE) ? "(" . $param . ")" : $param;    
 +
      }
 +
     
 
       $params_str = implode('/', $params);
 
       $params_str = implode('/', $params);
       $url = "udata://" . $module . '/' . $method . '/' . $params_str;
+
       $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 - один из параметров, их может быть больше одного