⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 template.class.php

📁 投稿 文章管理 员文章评论回复无限引用简易留言功能简易RSS功...
💻 PHP
📖 第 1 页 / 共 2 页
字号:
		}else{
			$this->_resource_type = $_resource_name[0];
			$file = substr($file, strlen($this->_resource_type) + 1);
			$exists = isset($this->_plugins['resource'][$this->_resource_type]) && call_user_func_array($this->_plugins['resource'][$this->_resource_type][1], array($file, &$resource_timestamp, &$this));

			if (!$exists){
				$this->trigger_error("file '$file' does not exist", E_USER_ERROR);
			}
			$this->_resource_time = $resource_timestamp;
		}
		return $file;
	}

	function display($file, $cache_id = null){
		$this->fetch($file, $cache_id, true);
	}

	function fetch($file, $cache_id = null, $display = false){
		$file = $this->_get_resource($file);

		if ($this->debugging){
			$this->_templatelite_debug_info[] = array('type'	  => 'template',
												'filename'  => $file,
												'depth'	 => 0,
												'exec_time' => array_sum(explode(' ', microtime())) );
			$included_tpls_idx = count($this->_templatelite_debug_info) - 1;
		}

		$this->_cache_id = $cache_id;
		$this->template_dir = $this->_get_dir($this->template_dir);
		$this->compile_dir = $this->_get_dir($this->compile_dir);
		if ($this->cache){
			$this->_cache_dir = $this->_build_dir($this->cache_dir, $this->_cache_id);
		}

		$name = ($this->encode_file_name) ? md5((($this->_resource_type == 1) ? $this->template_dir.$file : $this->_resource_type . "_" . $file)).'.php' : str_replace(".", "_", str_replace("/", "_", $this->_resource_type . "_" . $file)).'.php';

		$this->_error_level = $this->debugging ? error_reporting() : error_reporting(error_reporting() & ~E_NOTICE);
//		$this->_error_level = error_reporting(E_ALL);

		if (!$this->force_compile && $this->cache && $this->_is_cached($file, $cache_id)){
			ob_start();
			include($this->_cache_dir.$name);
			$output = ob_get_contents();
			ob_end_clean();
			$output = substr($output, strpos($output, "\n") + 1);
		}else{
			$output = $this->_fetch_compile($file, $cache_id, true);

			if ($this->cache){
				$f = fopen($this->_cache_dir.$name, "w");
				fwrite($f, serialize($this->_cache_info) . "\n$output");
				fclose($f);
			}
		}

		if (strpos($output, $this->_sl_md5) !== false){
			preg_match_all('!' . $this->_sl_md5 . '{_run_DreamCMS (.*)}' . $this->_sl_md5 . '!U',$output,$_match);
			foreach($_match[1] as $value){
				$arguments = unserialize($value);
				$output = str_replace($this->_sl_md5 . '{_run_DreamCMS ' . $value . '}' . $this->_sl_md5, call_user_func_array('DreamCMS_' . $arguments['module'], array((array)$arguments, $this)), $output);
			}
		}

		foreach ($this->_plugins['outputfilter'] as $function){
			$output = $function($output, $this);
		}

		error_reporting($this->_error_level);

		if ($this->debugging){
			$this->_templatelite_debug_info[$included_tpls_idx]['exec_time'] = array_sum(explode(' ', microtime())) - $this->_templatelite_debug_info[$included_tpls_idx]['exec_time'];
		}
//		2007-11-27 ADD mod_rewrite url BY 枯木
		$this->error && $output = str_replace("<?php error_reporting(0);!defined('DCPATH') && exit('What are you doing?');?>",'',$output);
		if($this->rewrite){
			$output = preg_replace("/\<a(\s*[^\>]+\s*)href\=([\"|\'|\s]?)([^\"\'>\s]+\.php\?[^\"\'>\s]+)\\2/ies","rewrite('\\3','<a\\1href=\\2','\\2')",$output);
			$output = preg_replace("/\<iframe(\s*[^\>]+\s*)src\=([\"|\'|\s]?)([^\"\'>\s]+\.php\?[^\"\'>\s]+)\\2/ies","rewrite('\\3','<iframe\\1src=\\2','\\2')",$output);
		}
		$output = $this->_replace_path($output,$file);
		if ($display){
			echo $output;
			if($this->debugging && !$this->_templatelite_debug_loop){
				$this->debugging = false;
				if(!function_exists("template_generate_debug_output")){
					require_once(TEMPLATE_LITE_DIR . "internal/template.generate_debug_output.php");
				}
				$debug_output = template_generate_debug_output($this);
				$this->debugging = true;
				echo $debug_output;
			}
		}else{
			return $output;
		}
	}
//	12:42 2008-8-10
	function _replace_path($output,$file){
		$template_path=$this->dir.'templates/'.substr($file,0,strrpos($file,'/')).'/';
		$pattern='([^\'|^\"|^\/|^http|^http\s|^ftp|^rt\sp|^mm\s|^#|^\.\.][A-Za-z0-9\.\/=\?%\-&_~`@[\]\':+!]+)';
		//src
		$output = preg_replace("/src=([\"|\'|\s]?){$pattern}\\1/", "src=\"{$template_path}\\2\"", $output);
		//href
		$output = preg_replace("/\<a(\s*[^\>]+\s*)href\=([\"|\'|\s]?){$pattern}\\2/","<a\\1href=\\2{$this->dir}\\3\\2",$output);
		$output = preg_replace("/\<iframe(\s*[^\>]+\s*)src\=([\"|\'|\s]?){$pattern}\\2/","<iframe\\1src=\"{$this->dir}\\3\"",$output);
		
		$output = preg_replace("/href=([\"|\'|\s]?){$pattern}\\1/", "href=\"{$template_path}\\2\"", $output);
		//url()
		$output = preg_replace("/url[\(]([^\/|^http|^http\s|^ftp|^rt\sp|^mm\s|^#|^\'|^\.|\.][A-Za-z0-9\.\/\=\?%\-&_~`@[\]\':+!]+)[\)]/", "url({$template_path}\\1)", $output);
		//background
		$output = preg_replace("/background=([\"|\'|\s]?){$pattern}\\1/", "background=\"{$template_path}\\2\"", $output);
		return $output;
	}
	function _is_cached($file, $cache_id){
		$this->_cache_dir = $this->_get_dir($this->cache_dir, $cache_id);
		$this->template_dir = $this->_get_dir($this->template_dir);

		$file = $this->_get_resource($file);

		$name = ($this->encode_file_name) ? md5((($this->_resource_type == 1) ? $this->template_dir.$file : $this->_resource_type . "_" . $file)).'.php' : str_replace(".", "_", str_replace("/", "_", $this->_resource_type . "_" . $file)).'.php';

		if (file_exists($this->_cache_dir.$name) && (((time() - filemtime($this->_cache_dir.$name)) < $this->cache_lifetime) || $this->cache_lifetime == -1) && (filemtime($this->_cache_dir.$name) > $this->_resource_time)){
			$fh = fopen($this->_cache_dir.$name, "r");
			if (!feof($fh) && ($line = fgets($fh, filesize($this->_cache_dir.$name)))){
				$includes = unserialize($line);
				if (isset($includes['template'])){
					foreach($includes['template'] as $value){
						if (!(file_exists($this->template_dir.$value) && (filemtime($this->_cache_dir.$name) > filemtime($this->template_dir.$value)))){
							return false;
						}
					}
				}
			}
			fclose($fh);
		}else{
			return false;
		}
		return true;
	}

	function _fetch_compile_include($_templatelite_include_file, $_templatelite_include_vars){
		if(!function_exists("template_fetch_compile_include")){
			require_once(TEMPLATE_LITE_DIR . "internal/template.fetch_compile_include.php");
		}
		return template_fetch_compile_include($_templatelite_include_file, $_templatelite_include_vars, $this);
	}

	function _fetch_compile($file, $cacheId = 0, $eval = false){
		$this->template_dir = $this->_get_dir($this->template_dir);

		$name = ($this->encode_file_name) ? md5((($this->_resource_type == 1) ? $this->template_dir.$file : $this->_resource_type . "_" . $file)).'.php' : str_replace(".", "_", str_replace("/", "_", $this->_resource_type . "_" . $file)).'.php';
		$cacheFilename = $this->compile_dir.$this->reserved_template_varname."_".$name;

		if ($this->cache){
			array_push($this->_cache_info['template'], $file);
		}

		if (!$this->force_compile && file_exists($cacheFilename) && (filemtime($cacheFilename) > $this->_resource_time) && (filemtime($cacheFilename) > $this->_version_date)){
			if ($eval) {
				ob_start();
				include($cacheFilename);
				$output = ob_get_contents();
				ob_end_clean();
				error_reporting($this->_error_level);
				return $output;
			}
			return file_get_contents($cacheFilename);
		}

		$file_contents = "";
		if($this->_resource_type == 1){
			$file_contents = file_get_contents($this->template_dir . $file);
		}elseif($this->_resource_type == "file"){
			$file_contents = file_get_contents($file);
		}else{
			call_user_func_array($this->_plugins['resource'][$this->_resource_type][0], array($file, &$file_contents, &$this));
		}

		$this->_file = $file;

		if (!is_object($this->_compile_obj)){
			if (file_exists(TEMPLATE_LITE_DIR . $this->compiler_file)) {
				require_once(TEMPLATE_LITE_DIR . $this->compiler_file);
			} else {
				require_once($this->compiler_file);
			}
			$this->_compile_obj = new $this->compiler_class;
		}
		$this->_compile_obj->left_delimiter = $this->left_delimiter;
		$this->_compile_obj->right_delimiter = $this->right_delimiter;
		$this->_compile_obj->plugins_dir = &$this->plugins_dir;
		$this->_compile_obj->template_dir = &$this->template_dir;
		$this->_compile_obj->compile_dir = $this->compile_dir;
		$this->_compile_obj->encode_file_name = $this->encode_file_name;
		$this->_compile_obj->_vars = &$this->_vars;
		$this->_compile_obj->_confs = &$this->_confs;
		$this->_compile_obj->_plugins = &$this->_plugins;
		$this->_compile_obj->_linenum = &$this->_linenum;
		$this->_compile_obj->_file = &$this->_file;
		$this->_compile_obj->php_extract_vars = &$this->php_extract_vars;
		$this->_compile_obj->reserved_template_varname = &$this->reserved_template_varname;
		$this->_compile_obj->default_modifiers = $this->default_modifiers;

		$output = $this->_compile_obj->_compile_file($file_contents);

		$f = fopen($cacheFilename, "w");
		fwrite($f, $output);
		fclose($f);

		if (!$eval) { return $output; }

		ob_start();
		include($cacheFilename);
		$output = ob_get_contents();
		ob_end_clean();
		error_reporting($this->_error_level);
		return $output;
	}

	function _run_modifier(){
		$arguments = func_get_args();
		list($variable, $modifier, $php_function, $_map_array) = array_splice($arguments, 0, 4);
		array_unshift($arguments, $variable);
		if ($_map_array && is_array($variable)){
			foreach($variable as $key => $value){
				if($php_function == "PHP"){
					$variable[$key] = call_user_func_array($modifier, $arguments);
				}else{
					$variable[$key] = call_user_func_array($this->_plugins["modifier"][$modifier], $arguments);
				}
			}
		}else{
			if($php_function == "PHP"){
				$variable = call_user_func_array($modifier, $arguments);
			}else{
				$variable = call_user_func_array($this->_plugins["modifier"][$modifier], $arguments);
			}
		}
		return $variable;
	}

	function _run_DreamCMS($arguments){
		if ($this->cache){
			return $this->_sl_md5 . '{_run_DreamCMS ' . serialize((array)$arguments) . '}' . $this->_sl_md5;
		}else{
			if (function_exists('DreamCMS_' . $arguments['module'])){
			//	$arguments['module']=="plugins" && $arguments['alias']=$arguments['name'];
				$this->assign(isset($arguments['alias'])?$arguments['alias']:$arguments['module'], call_user_func_array('DreamCMS_' . $arguments['module'], array((array)$arguments, $this)));
			}else{
				$this->trigger_error("function 'DreamCMS_" . $arguments['module'] . "' does not exist in 'DreamCMS'", E_USER_ERROR);
			}
		}
	}

	function _get_dir($dir, $id = null){
		if (empty($dir)){
			$dir = '.';
		}
		if (substr($dir, -1) != DIRECTORY_SEPARATOR){
			$dir .= DIRECTORY_SEPARATOR;
		}
		if (!empty($id)){
			$_args = explode('|', $id);
			if (count($_args) == 1 && empty($_args[0])){
				return $dir;
			}
			foreach($_args as $value){
				$dir .= $value.DIRECTORY_SEPARATOR;
			}
		}
		return $dir;
	}

	function _get_plugin_dir($plugin_name){
		static $_path_array = null;

		$plugin_dir_path = "";
		$_plugin_dir_list = is_array($this->plugins_dir) ? $this->plugins_dir : (array)$this->plugins_dir;
		foreach ($_plugin_dir_list as $_plugin_dir){
			if (!preg_match("/^([\/\\\\]|[a-zA-Z]:[\/\\\\])/", $_plugin_dir)){
				// path is relative
				if (file_exists(dirname(__FILE__) . DIRECTORY_SEPARATOR . $_plugin_dir . DIRECTORY_SEPARATOR . $plugin_name)){
					$plugin_dir_path = dirname(__FILE__) . DIRECTORY_SEPARATOR . $_plugin_dir . DIRECTORY_SEPARATOR;
					break;
				}
			}else{
				// path is absolute
				if(!isset($_path_array)){
					$_ini_include_path = ini_get('include_path');

					if(strstr($_ini_include_path,';')){
						// windows pathnames
						$_path_array = explode(';',$_ini_include_path);
					}else{
						$_path_array = explode(':',$_ini_include_path);
					}
				}

				if(!in_array($_plugin_dir,$_path_array)){
					array_unshift($_path_array,$_plugin_dir);
				}

				foreach ($_path_array as $_include_path){
					if (file_exists($_include_path . DIRECTORY_SEPARATOR . $plugin_name)){
						$plugin_dir_path = $_include_path . DIRECTORY_SEPARATOR;
						break 2;
					}
				}
			}
		}
		return $plugin_dir_path;
	}

//	function _parse_resource_link($resource_link){
//		$stuffing = "file:/this/is/the/time_5-23.tpl";
//		$stuffing_data = explode(":", $stuffing);
//		preg_match_all('/(?:([0-9a-z._-]+))/i', $stuffing, $stuff);
//		print_r($stuff);
//		echo "<br>Path: " . str_replace($stuff[0][count($stuff[0]) - 1], "", $stuffing);
//		echo "<br>Filename: " . $stuff[0][count($stuff[0]) - 1];
//	}

	function _build_dir($dir, $id){
		if(!function_exists("template_build_dir")){
			require_once(TEMPLATE_LITE_DIR . "internal/template.build_dir.php");
		}
		return template_build_dir($dir, $id, $this);
	}

	function _destroy_dir($file, $id, $dir){
		if(!function_exists("template_destroy_dir")){
			require_once(TEMPLATE_LITE_DIR . "internal/template.destroy_dir.php");
		}
		return template_destroy_dir($file, $id, $dir, $this);
	}

	function trigger_error($error_msg, $error_type = E_USER_ERROR, $file = null, $line = null){
		if(isset($file) && isset($line)){
			$info = ' ('.basename($file).", line $line)";
		}else{
			$info = null;
		}
		trigger_error('TPL: [in ' . $this->_file . ' line ' . $this->_linenum . "]: syntax error: $error_msg$info", $error_type);
	}
}
?>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -