?? template.class.php
字號:
}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 + -