phpcms 2008 sp4的模板原理,tag的解析原理

phpcms中模板解析主要是通过global.func.php,的

function template($module = 'phpcms', $template = 'index', $istag = 0)
{
	$compiledtplfile = TPL_CACHEPATH.$module.'_'.$template.'.tpl.php';
  //  echo "$compiledtplfile";
	if(TPL_REFRESH && (!file_exists($compiledtplfile)
            || @filemtime(TPL_ROOT.TPL_NAME.'/'.$module.'/'.$template.'.html') > @filemtime($compiledtplfile) ||
                    @filemtime(TPL_ROOT.TPL_NAME.'/tag.inc.php') > @filemtime($compiledtplfile)))
	{
		require_once PHPCMS_ROOT.'include/template.func.php';
		template_compile($module, $template, $istag);
	}
	return $compiledtplfile;
}

函数来实现的,这其中比较重要的是template_compile函数来实现的对模板的编译,编译过过程中使用了preg_replace这个函数并加了个/e参数,对tag,get这样的标签进行了替换

	$str = preg_replace("/\{tag_([^}]+)\}/e", "get_tag('\\1')", $str);
	$str = preg_replace("/\{get\s+([^}]+)\}/e", "get_parse('\\1')", $str);

举个例子,对于<div id="slide">{tag_首页幻灯片}</div>这个标签的解析的结果为, 

<!--幻灯片-->
<div id="slide"><?php echo tag('phpcms', 'tag_content_slide', "SELECT a.contentid,a.catid,a.typeid,a.areaid,a.title,a.style,a.thumb,a.keywords,a.description,a.userid,a.updatetime,a.inputtime,a.url FROM `pc_content` a, `pc_content_position` p WHERE a.contentid=p.contentid AND p.posid=2 AND a.status=99   AND  `thumb`!=''  ORDER BY a.contentid DESC", 0, 5, array (  'class' => 'url',  'target' => '_blank',  'width' => '296',  'height' => '164',));?></div>
<!--热点文章-->

function get_tag($tagname)
{
	global $TAG;
    if(!isset($TAG)) $TAG = cache_read('tag.inc.php', TPL_ROOT.TPL_NAME.'/');
	return isset($TAG[$tagname]) ? '<?php echo '.$TAG[$tagname].';?>' : '{tag_'.$tagname.'}';
}

模板解析后,使用了inlude并解析后的文件包含进来,解析的内容默认是从template/default/tag.inc.php中取出的内容

时间: 2024-12-04 02:49:14

phpcms 2008 sp4的模板原理,tag的解析原理的相关文章

phpcms 2008 sp4的这个版本如何添加一个系统字段

phpcms中可以自定义模型,模型的共同字段在pc_content表中,其它的扩展字段在pc_c_这样的前缀中的表中, 自定义模型的过程如下:自定义一个模型,会使用一组创建表的sql,这个sql存储在include/amdin/model.sql这个文件中 每个字段都有以下属性,issystem,这个属性决定着是在主表还是在附表中,还有formtype这个表示在界面生成html的类型.

phpcms 2008 sp4中一个表模型中不能出现两个地区的错误的修复

出现这个问题的原因是因为使用的了相同的js函数,函数名错误,导致了调用乱了,只要修改一个生成的界面的js就可以,最简单的办法,在函数上加入控件的ID,如何解决呢 在fields->areaid->form.inc.php中给函数加入控件的ID,最主要的是area_load与area_reload,这两个函数,修改完成后,还需要修改一下load.php这个文件,因为这个文件返回的是一个select控件,在select控件的onchange这个函数也需要调整成新的函数名,这样问题就解决了

PHPCMS 2008 最新漏洞demo测试详解

Phpcms2008 是一款基于 PHP+Mysql 架构的网站内容管理系统,也是一个开源的 PHP 开发平台.Phpcms 采用模块化方式开发,功能易用便于扩展,可面向大中型站点提供重量级网站建设解决方案.3年来,凭借 Phpcms 团队长期积累的丰富的Web开发及数据库经验和勇于创新追求完美的设计理念,使得 Phpcms 得到了近10万网站的认可,并且越来越多地被应用到大中型商业网站. 0x02 写在前面的话 phpcms 2008 这是我看第二次代码了,之前已经发现了一些问题,只是没放出来

PHPCMS 2008正式内测版本未能及时发布导致大量用户不满

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 由于phpcms 2008 正式内测版本未能在昨天准时发布,导致很多用户不满! 大量用户在phpcms论坛上发布大量宣泄的帖子,一示抗议.虽然phpcms这几年里积累了大量的用户群体,由于今天的事件,加上前几次的不能如期发布的事件,导致大量用户的流失,它的用户群体越来越少.这也见证了自phpcms被酷六收买以后的不被重视! 这次的事件,在ph

“2008艺海寻人模板设计大赛”强势登场

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 今日,ShopEx与视觉中国.蓝色理想.DoNews.TechWeb.Admin5.ChinaZ联合举办的"2008艺海寻人模板设计大赛"已正式启动.此赛事面向国内数十万网页设计师,征集针对国内市场占有率第一的网店软件提供商ShopEx公司近期推出的ShopEx_SingleV4.8的模板创意设计作品. 大赛为国内数十万网

PHP技巧:详解phplib模板使用过程及运行原理

index.htm文件内容: 以下为引用的内容: <html><head><body><!-- BEGIN RowSort -->{SortList}<br><!-- END RowSort --></body></head></html> index.php内容: <?$t->set_file ("Index", "index.htm");$t-

php-我有一个ecshop商城模板,请问如何解析然后自己修改

问题描述 我有一个ecshop商城模板,请问如何解析然后自己修改 2C 如何修改php文件局部修改,关键是如何把php解析出来,然后直接用Dreamweaver修改 解决方案 最好找个会php的人给你搞吧!找个网站发布个任务 ,完了顺便让他教教你怎么弄!改模板也不是简单的在页面里换掉php代码就可以的!

netty对http协议解析原理

本文主要介绍netty对http协议解析原理,着重讲解keep-alive,gzip,truncked等机制,详细描述了netty如何实现对http解析的高性能. 1 http协议 1.1 描述         标示 ASCII 描述 字符 CR  13 Carriage return (回车)  \n LF  10 Line feed character(换行) \r SP  32 Horizontal space(空格)   COLON  58 COLON(冒号) : http协议主要使用C

HTML解析原理概括(转载)

HTML解析原理 标准的web前端工程师需要知道 ◎浏览器(或者相应播放器)的渲染/重绘原理  这我得加把劲了.我还真的说的不是很清楚,我就G下,结果不是很多,找到了有一个,就记下来了... 以下部分来自handawei-javaeye的blog:   Web页面运行在各种各样的浏览器当中,浏览器载入.渲染页面的速度直接影响着用户体验 简单地说,页面渲染就是浏览器将html代码根据CSS定义的规则显示在浏览器窗口中的这个过程.先来大致了解一下浏览器都是怎么干活的: 1. 用户输入网址(假设是个h