复制代码 代码如下:
objdir='tpp';
$tpl->rewrite=true;//开启rewrite 需要服务器支持
$tpl->rewrite_rule=array(array(/index\.php/),array(index.html)); //rewrite规则
$tpl->assign(indexurl,index.php);
$tpl->assign(str,我是字符串啦啦啦);
$tpl->assign(ec,我是被echo出来的);
$tpl->assign(subhtml,{subtpl ttt}这是用来引入一个模板文件的,这个就是引入ttt.htm);
$tpl->assign(a,array('dasdasd'.'bbbbbbb','cccccccccccccc'));
$tpl->assign(i,1);
$tpl->display(index);
*/
if(!defined(charset)) define(charset,gb2312);//字符编码
if(!defined(dir_tpl)) define(dir_tpl,tpl);//默认模板目录
if(!defined(dir_data)) define(dir_data,data);//默认数据目录
if(!defined(debug)) define(debug,0);//默认运行模式
class template {
//note var
public $rewrite=false;//是否开启 伪静态 rewrite
public $rewrite_rule=array(); //设置伪静态规则
public $defaulttpldir;//默认的模板
public $tpldir;//模板目录
public $objdir;//编译缓存目录
public $tplfile;//模板文件
public $objfile;//编译文件
public $tplid=1;//模板编号
public $currdir='default';//当前风格目录
public $vars=array();//note 变量表
public $removeblanks=false;//移除空格
public $stdout='display';//输出类型
function __construct($tplid, $currdir) {
$this->template($tplid, $currdir);
}
function template($tplid, $currdir) {
ob_start();
if(file_exists(dir_tpl.'/'.$currdir)) {
$this->currdir = $currdir;
$this->tplid = $tplid;
} else {
$this->currdir = 'default';
$this->tplid = 1;
}
$this->defaulttpldir = dir_tpl.'/default';
$this->tpldir = dir_tpl.'/'.$this->currdir;
$this->objdir = dir_data.'/cache/tpl';
if(version_compare(php_version, '5') == -1) {
register_shutdown_function(array(&$this, '__destruct'));
}
}
//note publlic
function assign($k, $v) {
$this->vars[$k] = $v;
}
//note publlic
function display($file) {
extract($this->vars, extr_skip);
include $this->getobj($file);
}
function getobj($file, $tpldir = '') {
$subdir = ($pos = strpos($file, '/')) === false ? '' : substr($file, 0, $pos);
$file = $subdir ? substr($file, $pos + 1) : $file;
$this->tplfile = ($tpldir ? $tpldir : $this->tpldir).'/'.($subdir ? $subdir.'/' : '').$file.'.htm';
$this->objfile = $this->objdir.'/'.($tpldir ? '' : $this->tplid.'_').($subdir ? $subdir.'_' : '').$file.'.php';
//note 默认目录
if(@filemtime($this->tplfile) === false) {
$this->tplfile = $this->defaulttpldir.'/'.($subdir ? $subdir.'/' : '').$file.'.htm';
}
//note 判断是否比较过期
if(!file_exists($this->objfile) || debug && @filemtime($this->objfile) tplfile)) {
$this->compile();
}
return $this->objfile;
}
function gettpl($file) {
$subdir = ($pos = strpos($file, '/')) === false ? '' : substr($file, 0, $pos);
$file = $subdir ? substr($file, $pos + 1) : $file;
$tplfile = $this->tpldir.'/'.($subdir ? $subdir.'/' : '').$file.'.htm';
if(@filemtime($tplfile) === false) {
$tplfile = $this->defaulttpldir.'/'.($subdir ? $subdir.'/' : '').$file.'.htm';
}
return $tplfile;
}
function compile() {
$var_regexp = \@?\\\$[a-za-z_]\w*(?:\[[\w\.\\'\[\]\$]+\])*;
$vtag_regexp = \;
$const_regexp = \{([\w]+)\};
$template = file_get_contents($this->tplfile);
for($i = 1; $i if(strpos($template, '{subtpl') !== false) {
if(debug == 2) {
$template = str_replace('{subtpl ', '{tpl ', $template);
} else {
$template = preg_replace(/[\n\r\t]*\{subtpl\s+([a-z0-9_:\/]+)\}[\n\r\t]*/ies, file_get_contents(\$this->gettpl('\\1')), $template);
}
}
}
$remove = array(
'/(^|\r|\n)\/\*.+?(\r|\n)\*\/(\r|\n)/is',
'/\/\/note.+?(\r|\n)/i',
'/\/\/debug.+?(\r|\n)/i',
'/(^|\r|\n)(\s|\t)+/',
'/(\r|\n)/',
);
$this->removeblanks && $template = preg_replace($remove, '', $template);
$template = preg_replace(/\/s, {\\1}, $template);
$template = preg_replace(/\{($var_regexp)\}/, =\\1?>, $template);
$template = preg_replace(/\{($const_regexp)\}/, =\\1?>, $template);
$template = preg_replace(/(?, $template);
$template = preg_replace(/\/ies, \$this->arrayindex('\\1', '\\2'), $template);
$template = preg_replace(/\{\{eval (.*?)\}\}/ies, \$this->stripvtag(' \\1?>'), $template);
$template = preg_replace(/\{eval (.*?)\}/ies, \$this->stripvtag(' \\1?>'), $template);
$template = preg_replace(/[\n\r\t]*\{echo\s+(.+?)\}[\n\r\t]*/ies, \$this->stripvtag(' echo \\1; ?>',''), $template);
$template = preg_replace(/\{for (.*?)\}/ies, \$this->stripvtag(' for(\\1) {?>'), $template);
$template = preg_replace(/\{elseif\s+(.+?)\}/ies, \$this->stripvtag(' } elseif(\\1) { ?>'), $template);
for($i=0; $i$template = preg_replace(/\{loop\s+$vtag_regexp\s+$vtag_regexp\s+$vtag_regexp\}(.+?)\{\/loop\}/ies, \$this->loopsection('\\1', '\\2', '\\3', '\\4'), $template);
$template = preg_replace(/\{loop\s+$vtag_regexp\s+$vtag_regexp\}(.+?)\{\/loop\}/ies, \$this->loopsection('\\1', '', '\\2', '\\3'), $template);
}
$template = preg_replace(/\{if\s+(.+?)\}/ies, \$this->stripvtag(' if(\\1) { ?>'), $template);
$template = preg_replace(/\{tpl\s+(\w+?)\}/is, include \$this->getobj(\\\1\);?>, $template);
$template = preg_replace(/\{tpl\s+(.+?)\}/ise, \$this->stripvtag(' include \$this->getobj(\\\1\); ?>'), $template);
$template = preg_replace(/\{tmptpl\s+(\w+?)\}/is, include \$this->getobj(\\\1\, \$this->objdir);?>, $template);
$template = preg_replace(/\{tmptpl\s+(.+?)\}/ise, \$this->stripvtag(' include \$this->getobj(\\\1\, \$this->objdir); ?>'), $template);
$template = preg_replace(/\{else\}/is, } else { ?>, $template);
$template = preg_replace(/\{\/if\}/is, } ?>, $template);
$template = preg_replace(/\{\/for\}/is, } ?>, $template);
$template = preg_replace(/$const_regexp/, =\\1?>, $template);//note {else} 也符合常量格式,此处要注意先后顺序
$template = preg_replace(/(\\\$[a-za-z_]\w+\[)([a-za-z_]\w+)\]/i, \\1'\\2'], $template);
$fp = fopen($this->objfile, 'w');
fwrite($fp, $template);
fclose($fp);
}
function arrayindex($name, $items) {
$items = preg_replace(/\[([a-za-z_]\w*)\]/is, ['\\1'], $items);
return =$name$items?>;
}
function stripvtag($s) {
$vtag_regexp = \;
return preg_replace(/$vtag_regexp/is, \\1, str_replace(\\\, '', $s));
}
function loopsection($arr, $k, $v, $statement) {
$arr = $this->stripvtag($arr);
$k = $this->stripvtag($k);
$v = $this->stripvtag($v);
$statement = str_replace(\\\, '', $statement);
return $k ? foreach((array)$arr as $k => $v) {?>$statement}?> : foreach((array)$arr as $v) {?>$statement } ?>;
}
function __destruct() {
$content = ob_get_contents();
//处理 rewrite
if($this->rewrite) {
$arr=$this->rewrite_rule;
$s=$arr[0];
$e=$arr[1];
$c
}
ob_end_clean();
echo $content;
}
}
$tpl = new template('skin',default);
$tpl->objdir='tpp';
$tpl->rewrite=true;//开启rewrite 需要服务器支持
$tpl->rewrite_rule=array(array(/index\.php/),array(index.html)); //rewrite规则
$tpl->assign(indexurl,index.php);
$tpl->assign(str,我是字符串啦啦啦);
$tpl->assign(ec,我是被echo出来的);
$tpl->assign(subhtml,{subtpl ttt}这是用来引入一个模板文件的,这个就是引入ttt.htm);
$tpl->assign(a,array('dasdasd'.'bbbbbbb','cccccccccccccc'));
$tpl->assign(i,1);
$tpl->display(index);
?>
新建 tpl/default/index.html
复制代码 代码如下:
无标题文档
1.字符串赋值 :
{$str}
2.数组赋值 :
{loop $a $v}{$v},{/loop}
或者
{loop $a $key $val }{$val},{/loop}
3.{$subhtml}
{subtpl ttt}
4.原来我是{$indexurl } 现在我被变成了index.php
5.我还可以 echo 出来呢
{echo $ec}
6.其实我还可以加减乘除的 6*7*8
{echo 6*7*8;}
7.常用的就这些了 还有什么不懂的
新建 tpl/default/ttt.html
新建 tpp目录 ok了 以上就介绍了discuz x2.5 从康盛产品discuz提取出来的模板类,包括了discuz x2.5方面的内容,希望对php教程有兴趣的朋友有所帮助。