gpt4 book ai didi

从康盛产品(discuz)提取出来的模板类

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 26 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章从康盛产品(discuz)提取出来的模板类由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

代码如下

<?php  /*template.class.php  @康盛微博 模板提取类 觉得这个模板好用 花些时间独立出来。 by 雷日锦  @看了一下ctt 这个模板 跟 phpcms的模板类似 难道?? ^_^ 嘿嘿!!!  @ 微博 http://weibo.com/lrjxgl  @ 好东西大家共享 磕磕绊绊的提取出来 有问题请提出来  @ 模板文件默认为 .htm  $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");  */  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) < filemtime($this->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 = "\<\?=(\@?\\\$[a-zA-Z_]\w*(?:\[[\w\.\"\'\[\]\$]+\])*)\?\>";  $const_regexp = "\{([\w]+)\}";  $template = file_get_contents($this->tplfile);  for($i = 1; $i <= 3; $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("/(?<!\<\?\=|\\\\)$var_regexp/", "<?=\\0?>", $template);  $template = preg_replace("/\<\?=(\@?\\\$[a-zA-Z_]\w*)((\[[\\$\[\]\w]+\])+)\?\>/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<2; $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 = "\<\?=(\@?\\\$[a-zA-Z_]\w*(?:\[[\w\.\"\'\[\]\$]+\])*)\?\>";  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];  $content=preg_replace($s,$e,$content);  }  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  。

复制代码代码如下

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  <html xmlns="http://www.w3.org/1999/xhtml">  <head>  <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />  <title>无标题文档</title>  </head>  <body>  1.字符串赋值 :<br />  {$str}  <br />  2.数组赋值 :<br />  {loop $a $v}{$v},{/loop}  或者<br />  {loop $a $key $val }{$val},{/loop}  3.{$subhtml}<br />  {subtpl ttt}<br />  4.原来我是{$indexurl } 现在我被变成了index.php<br />  5.我还可以 echo 出来呢<br />  {echo $ec}<br />  6.其实我还可以加减乘除的 6*7*8  {echo 6*7*8;}  7.常用的就这些了 还有什么不懂的 <br />  </body>  </html>  。

新建 tpl/default/ttt.html  新建 tpp目录 ok了 。

最后此篇关于从康盛产品(discuz)提取出来的模板类的文章就讲到这里了,如果你想了解更多关于从康盛产品(discuz)提取出来的模板类的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com