cergey-obr
3/15/2016 - 5:36 AM

Кеширование xslt

Кеширование xslt

<?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;
		}
	 
		$domain = cmsController::getInstance()->getCurrentDomain()->getId();
		$params_str = implode('/', $params);
		$url = $stream . "://" . $params_str;
		$requestParams = array();
		$allowedParams = array('extProps', 'extGroups');
	 
		foreach($_REQUEST as $param => $value) {
			if (!in_array($param, $allowedParams)) continue;
			$requestParams[$param] = $value;
		}
	 
		if(count($requestParams)) {
			$url .= '/?'. http_build_query($requestParams);
		}
	 
		$folder = CURRENT_WORKING_DIR . '/sys-temp/udatacache/';
		$path = $folder . md5($domain. '_'. $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:variable name="catalogObjectList" select="document(concat('udata://custom/xsltCache/3600/udata/catalog/catalogObjectList/', $page-id, '/', 12))/udata" />