phpcms 的模板模板机制
发布:smiling 来源: PHP粉丝网 添加日期:2014-10-21 16:42:57 浏览: 评论:0
phpcms有自己的一套模板机制,代码如下:
- function template_parse($str, $istag = 0)
- {
- $str = preg_replace("/([\n\r]+)\t+/s","\\1",$str);
- $str = preg_replace("/\<\!\-\-\{(.+?)\}\-\-\>/s", "{\\1}",$str);
- $str = preg_replace("/\{template\s+(.+)\}/","<?php include template(\\1); ?>",$str); 相当于
- $str = preg_replace("/\{include\s+(.+)\}/","<?php include \\1; ?>",$str);
- $str = preg_replace("/\{php\s+(.+)\}/","<?php \\1?>",$str);
- $str = preg_replace("/\{if\s+(.+?)\}/","<?php if(\\1) { ?>",$str);
- $str = preg_replace("/\{else\}/","<?php } else { ?>",$str);
- $str = preg_replace("/\{elseif\s+(.+?)\}/","<?php } elseif (\\1) { ?>",$str);
- $str = preg_replace("/\{\/if\}/","<?php } ?>",$str);
- $str = preg_replace("/\{loop\s+(\S+)\s+(\S+)\}/","<?php if(is_array(\\1)) foreach(\\1 AS \\2) { ?>",$str);
- $str = preg_replace("/\{loop\s+(\S+)\s+(\S+)\s+(\S+)\}/", "<?php if(is_array(\\1)) foreach(\\1 AS \\2 => \\3) { ?>",$str);
- $str = preg_replace("/\{\/loop\}/","<?php } ?>",$str);
- $str = preg_replace("/\{\/get\}/","<?php } unset(\$DATA); ?>",$str);
- $str = preg_replace("/\{tag_([^}]+)\}/e", "get_tag('\\1')", $str);
- $str = preg_replace("/\{get\s+([^}]+)\}/e", "get_parse('\\1')", $str);
- $str = preg_replace("/\{([a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7 f-\xff:]*\(([^{}]*)\))\}/","<?php echo \\1;?>",$str);
- $str = preg_replace("/\{\\$([a-zA-Z_\x7f-\xff][a-zA-Z0-9_ \x7f-\xff:]*\(([^{}]*)\))\}/","<?php echo \\1;?>",$str);
- $str = preg_replace("/\{(\\$[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*)\}/","< ?php echo \\1;?>",$str);
- $str = preg_replace("/\{(\\$[a-zA-Z0-9_\[\]\'\"\$\x7f-\xff]+)\}/es", "addquote('<?php echo \\1;?>')",$str);
- $str = preg_replace("/\{([A-Z_\x7f-\xff][A-Z0-9_\x7f-\xff ]*)\}/s", "<?php echo \\1;?>",$str);
- if(!$istag) $str = "<?php defined('IN_PHPCMS') or exit('Access Denied'); ?>".$str; //phpfensi.com
- return $str;
- }
其中先容几个关键点:
/s 是将 代表任意符号的"."变成任意的符号。dedecms \s 是空格的意思.
$str = preg_replace("/([\n\r]+)\t+/s","\\1",$str); 取括号中一个或者多个回车换行的字符并且外面有至少一个制表符的字符.
$str = preg_replace("/\<\!\-\-\{(.+?)\}\-\-\>/s", "{\\1}",$str); //这是将注释父里面变成大括号.
$str = preg_replace("/\{include\s+(.+)\}/","<?php include \\1; ?>",$str); //输进的 include 将被替换成 <?php include ?>
$str = preg_replace("/\{php\s+(.+)\}/","<?php \\1?>",$str); //例如 {php echo "a"} 将被替换成 <?php echo "a";?>
$str = preg_replace("/\{if\s+(.+?)\}/","<?php if(\\1) { ?>",$str);
$str = preg_replace("/\{else\}/","<?php } else { ?>",$str); 这个事讲{if } {else} 替换<?php if ($a='1') echo a; else {a='b'}?> 替换的是 if +空格 +一个或者多个字符 if (\\1)是取括号里的值也就是内存地址的值
$str = preg_replace("/\{loop\s+(\S+)\s+(\S+)\}/","<?php if(is_array(\\1)) foreach(\\1 AS \\2) { ?>",$str);
$str = preg_replace("/\{loop\s+(\S+)\s+(\S+)\s+(\S+)\}/", "<?php if(is_array(\\1)) foreach(\\1 AS \\2 => \\3) { ?>",$str); // 这连个似乎拿出来有点疏漏http://www.pcbaike.net/,大家可以研究研究,测试时没有合适的主要是取第一个括号中或者第二个括号中的数据假如是数组替换成foreach循环 $str = preg_replace("/\{get\s+([^}]+)\}/e", "get_parse('\\1')", $str);
这个事替换get标签实质上是调用一个 get_parse 函数,有参函数.
Tags: phpcms模板机制 phpcms模板标签
相关文章
- ·Phpcms V9内容页show模板调用标签详解(2014-10-19)
- ·phpcms v9笔记之模板制作案例(2014-10-24)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)