帝国、PHPCMS及织梦对比(五):标签解析方式分析
帝国CMS万能标签说明

网页制作流程:1、制作显示效果页面;2、修改效果页面加上万能标签ecmsinfo;3、将已加上万能标签的HTML效果页面代码复制到后台更新;4、查看生成后的页面效果。
1、制作显示效果页面先用Dreamweaver做出网页效果,如下为我们预先做的普通HTML页面效果(图1):效果页面HTML代码如下(HTML代码1):<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312"><title>ecmsinfo万能标签使用教程</title><style>td {font-size: 10pt;}.line{line-height: 14pt;font-size: 10pt;}A:link {text-decoration: none; color:#000000}A:visited {text-decoration: none; color: #000000}A:active {text-decoration: underline; color:#000000 }A:hover {text-decoration: underline; color:#FF0000;}</style></head><body topmargin="0"><table width="700" border="0"align="center" cellpadding="3" cellspacing="1" bgcolor="#CEEEFB"><tr><tdheight="60"><div align="center"><font size="6"><strong>ecmsinfo万能标签使用教程</strong></font></div></td></tr><tr><td height="25" bgcolor="#FFFFFF"></td></tr></table><table width="700" border="0" align="center" cellpadding="0" cellspacing="0"><tr><td width="50%" valign="top"><table width="98%" border="0" cellpadding="3" cellspacing="1" bgcolor="#CEEEFB"><tr><td height="23"><strong>国内新闻</strong></td></tr><tr><td bgcolor="#FFFFFF"><table width="100%"▲top2、修改效果页面加上万能标签ecmsinfo:我们来分析下上面做好的HTML网页调用样式,如下图(图2):上图我们分析了该网页共有两种调用显示样式:文字调用样式、图片调用样式:文字调用样式:一行一列,显示内容包括"标题"(标题长度截取36个字符),"标题链接","发布时间"格式;应用于国内、国际、娱乐、体育新闻4个栏目,每个栏目显示最新3条信息。
phpcmspc标签详解

phpcms pc 标签详解PHPCMS V9内容模块PC标签调用说明模块名:content 模块提供的可用操作操作名说明lists 内容数据列表relation 内容相关文章hits 内容数据点击排行榜category 内容栏目列表position 内容推荐位列表position操作说明如下:--------------------------------------------------------------------------------内容推荐位列表(position):可用参数:参数名是否必须默认值说明posid 是null 推荐位IDcatid 否null 调用栏目IDthumb 否0 是否仅必须缩略图order 否null 排序类型num 是null 数据调用数量代码例子:{pc:contentaction="position" posid="2" order="listorder DESC"num="4"}<ul>{loop $data $key $val}<li> <a href="{$val['url']}">{$val['title']}</a></li>{/loop }</ul>{/pc}返回参数如下表:字段类型空默认注释title char(80) 否NULL 推荐位标题url char 否NULL 推荐位链接地址inputtime int(10) 否NULL 推荐位发布时间thumb char 是NULL 推荐位缩略图其他不定是根据模型所设置的加入到推荐位中字段名称--------------------------------------------------------------------------------内容列表(lists):可用参数:参数名是否必须默认值说明catid 否null 调用栏目IDthumb 否0 是否仅必须缩略图order 否null 排序类型num 是null 数据调用数量代码例子:{pc:contentaction="lists" catid="2" order="id DESC"num="4"}<ul>{loop $data $key $val}<li> <a href="{$val['url']}">{$val['title']}</a></li>{/loop }</ul>{/pc}返回参数如下表:字段类型空默认注释title char(80) 否NULL 推荐位标题url char 否NULL 推荐位链接地址inputtime int(10) 否NULL 推荐位发布时间thumb char 是NULL 推荐位缩略图其他不定是其他模型字段--------------------------------------------------------------------------------点击排行榜(hits):可用参数:参数名是否必须默认值说明catid 否null 调用栏目IDday 否0 调用多少天内的排行order 否null 排序类型(本月排行- monthviews DESC 、本周排行- weekviews DESC、今日排行- dayviews DESC)num 是null 数据调用数量代码例子:{pc:contentaction="hits" catid="2" order="weekviews DESC"num="10"}<ul>{loop $data $key $val}<li> <a href="{$val['url']}">{$val['title']}</a></li>{/loop }</ul>{/pc}返回参数如下表:字段类型空默认注释title char(80) 否NULL 推荐位标题url char 否NULL 推荐位链接地址inputtime int(10) 否NULL 推荐位发布时间thumb char 是NULL 推荐位缩略图其他不定是其他模型字段-------------------------------------------------------------------------------相关文章(relation):可用参数:参数名是否必须默认值说明catid 否null 调用栏目IDrelation 否$relation 无需更改keywords 否null 内容页面取值:$rs[keywords]num 是null 数据调用数量代码例子:{pc:contentaction="relation" relation="$relation" catid="$catid" num="5" keywords="$rs[keywords]"}{loop $data $r}<li>·<a href="{$r[url]}"target="_blank">{$r[title]}</a><span>({date('Y-m-d',$r[inputtime])})</span></li>{/loop}{/pc}返回参数如下表:字段类型空默认注释title char(80) 否NULL 推荐位标题url char 否NULL 推荐位链接地址inputtime int(10) 否NULL 推荐位发布时间thumb char 是NULL 推荐位缩略图其他不定是其他模型字段--------------------------------------------------------------------------------栏目列表(category):可用参数:参数名是否必须默认值说明catid 否0 调用该栏目下的所有栏目,默认0,调用一级栏目$siteid 否1 默认调用系统站点order 否null 排序方式、一般按照listorder ASC排序,即栏目的添加顺序num 是null 数据调用数量代码例子:{pc:contentaction="category" catid="0" num="25" siteid="$siteid"order="listorder ASC"} {loop $data $r}<li><ahref="{$r[url]}"><span>{$r[catname]}</span>& lt;/a></li> {/loop} {/pc}返回参数如下表:字段类型默认值说明catid smallint 无栏目IDsiteid tinyint(3) 0 站点IDmodule varchar(15) 无模块IDtype tinyint(1) 1 栏目类型IDmodelid tinyint(5) 5 模型IDparentid smallint(5) 5 上级父栏目arrparentid varchar(255) 无所有父栏目child tinyint(1) 0 子栏目arrchildid mediumtext 无所有子栏目catname varchar(30) 无栏目名称image varchar(100) 无栏目图片description mediumtext 无栏目描述parentdir varchar(100) 无父栏目目录catdir varchar(30) 无栏目目录url varchar(100) 无栏目链接items mediumint(8) 0 栏目内容数hits int(10) 0 点击数setting mediumtext 无栏目设置listorder smallint(5) 0 排序ismenu tinyint(1) 0 是否显示sethtml tinyint(1) 0 是否生成到根目录letter varchar(30) 无栏目拼音。
DEDECMS,ECMS(帝国CMS),PHPCMS,PHP168这四款CMS比较之我见

现如今网络已经进入平常家庭,很多网民已经不满足于QQ以及一些blog的个性展现而走向了网站建设的站长之路,一些个人网站的崛起也让他们看到了成功的曙光,与此同时,各类网站管理系统(以下简称cms)也犹如雨后春笋般地出现在了大家的眼前,给很多有站长梦的朋友建设网站带来了曙光。
但问题也随之而来,那就是:站长们应该如何选择cms,选择的cms系统是否能够完全满足自己的需要,cms是否能够稳定而持久的方便站长的工作?是否能够满足网站在将来发展的需要?以及选择的cms操作性如何等等,通过这些问题我对国内PHP 类的主流CMS进行了一些个人的摸索和总结,从“适用人群”,“负载性能”,“可操作性”,“功能方面”,“文档及服务”这五个方面来总结一些自己小小的心得希望对广大的站长和希望成为站长的朋友们选择适合自己的一款CMS带来些许的帮助。
参与比较的CMS为目前国内比较热门的几个包括了:DEDECMS,ECMS(帝国CMS),PHPCMS,PHP168 这四款也是目前用的最多的CMS。
适用人群首先解释一下这里的适用人群指的是网络水平或者说对网站技术了解的多少,因为广大的站长的水平不可能是一样的,有的站长是由于兴趣才走上了站长的道路,可能对网络的一般常识是了解的但涉及到专业一点的网站方面的技术时可能就会有些欠缺,对于这样的站长来说选择一款简单实用适合自己的CMS就显得有比较重要了。
接下来就国内比较热门的几个PHP类的CMS来归归类以方便给正在选择的站长们一个参考!DEDECMS:这款CMS就个人使用的情况来看还是比较简单的,对新手来说唯一需要了解和知道的就是它的系统标签,好在DEDE给出了比较详细的标签使用说明,这样就给新手的站长提供了进一步掌握和熟悉DEDE的途径。
最后推荐那些不需要有太多功能和站点属于个人站且对它的标签不觉得很烦的人可以选择DEDE来架构你的站点。
ECMS(帝国CMS):如果是第一次接触听说这款CMS会觉得它的名字很有霸气,也会想像它的功能和实力是不是也会和它的名字一样呢。
织梦、帝国及PHPCMS对比(12):PHPCMS低级BUG问题分析-电脑资料

织梦、帝国及PHPCMS对比(12):PHPCMS低级BUG问题分析-电脑资料落叶之前发布了一系列关于PHPCMS、织梦及帝国这三款CMS 对比分析文章,在对比分析中出现过对PHPCMS部分功能和架构设计方式明显的偏好,一些站长朋友们在评论中多提到落叶在为PHPCMS 捉刀的质疑,。
本文中落叶详细分析下PHPCMS2008中一直存在的并且在sp4最终版中仍然存在的严重甚至低级的问题及一些使用中遇见的“见鬼”的问题。
A、低级问题/BUG:1.删除栏目时所有子栏目和子栏目下所有文章不作任何提示,直接删除。
一般的思路时,如果栏目下有子栏目,或者栏目下已经有多篇文章,删除时应该提示该栏目不允许删除,或者至少应该给出危险警告,结果PHPCMS中是一不小心,点删除栏目,然后弹出的JS中“是否要删除栏目”点了确定后,就一下子所有子栏目全部干掉了,这也意味着这些所有栏目下的文章也没办法显示了。
虽然可以根据PHPCMS 中DATA目录下的栏目缓存中手动在数据库中找回这些栏目,但这个引起的麻烦自不待言了。
很多新技术员进来时,使用PHPCMS套站时,我都很明确的说明,PHPCMS后台不允许做任何删除操作,然而还是常有因为误点击而导致几十个子栏目及栏目因为这样的误点击全部消失的情况。
不过,落叶在新站规划时,一般都会修改PHPCMS栏目删除对应方法,删除前先查询栏目是否有子栏目,然后子栏目是否有文章,如果有需先删除文章,再删除子栏目,才能删除父栏目。
2.移动栏目后栏目关系字段没能正确更新,删除原栏目的父栏目,已经移走的子栏目会跟着被全部干掉落叶不止一次发生过这样的杯具,原来B栏目是A栏目的子栏目,后来想到B栏目独立出来做一级栏目更好,于是把B栏目修改为一级栏目,然后更新栏目缓存,修复栏目数据,心想这下应该没问题了,然后删掉A栏目,结果大杯具发生了,整个A栏目及B栏目以及B栏目以下的所有栏目跟着被删除了。
问题出现的原因:PHPCMS无限级分类每个分类中以arrchildid 字段记录了所有子栏目的ID,当把B栏目称出后,PHPCMS程序中没能对B栏目的原父栏目的相关字段正常更新,结果删除A栏目时,遍历arrchildid中的所有子栏目,括B栏目,一起全部干掉了。
dede织梦cms模板标签说明

dede织梦cms模板标签说明,模版制作解析引擎概述模板设计规范代码参考标记参考:arclist(artlist,likeart,hotart,imglist,imginfolist,coolart,specart ) field channel mytag vote friendlink mynews loop channelartlist page list pagelist pagebreak fieldlist一、织梦模板解析引擎概述在了解DedeCms的模板代码之前,了解一下织梦模板引擎的知识是非常有意义的。
织梦模板引擎是一种使用XML名字空间形式的模板解析器,使用织梦解析器解析模板的最大好处是可以轻松的制定标记的属性,感觉上就像在用HTML一样,使模板代码十分直观灵活,新版的织梦模板引擎不单能实现模板的解析还能分析模板里错误的标记。
1、织梦模板引擎的代码样式有如下几种形式:{dede:标记名称属性='值'/}{dede:标记名称属性='值'}{/dede:标记名称}{dede:标记名称属性='值'}自定义样式模板(InnerText){/dede:标记名称}提示:对于{dede:标记名称属性='值'}{/dede:标记名称}这种形式的标记,在2.1版中,表示结束只需要用“{/dede}”,但V3中需要严格用“{/dede:标记名称}”,否则会报错。
2、织梦模板引擎内置有多个系统标记,这些系统标记在任何场合都是能直接使用的。
(1) global 标记,表示获取一个外部变量,除了数据库密码之外,能调用系统的任何配置参数,形式为:{dede:global name='变量名称'}{/dede:global}或{dede:global name='变量名称' /}其中变量名称不能加$ 符号,如变量$cfg_cmspath ,应该写成{dede:global name='cfg_cmspath' /} 。
介绍几种常见的开源CMS

介绍几种常见的开源CMS1、dedecms(织梦)织梦是我们见到或是听到的最多的开源解决方案,适合于中小企业的网站系统解决方案,包括小型的门户系统,dedecms采用php+mysql的架构。
代表作seowhy、php1002、phpcmsPHPCMS 是国内领先的网站管理系统,同时也是一个开源的PHP开发框架。
3、动易cms这款是我最先接触的开源cms,比较简单,asp+access架构,现在已经发展到有.net平台的开源程序。
非常好用,强大。
4、帝国cms也是一款非常优秀的B/S架构的开源PHP内容管理系统,这款我没用过,也没测试过,据说很强大,大家有兴趣的童鞋可以尝试下。
5、kesioncms(科汛网站管理系统)采用ASP+ACCESS/MSSQL架构,系统具有极强的可扩展性。
6、sdcms时代内容管理系统。
也是一套asp+access的架构开源程序。
很不错。
试用过。
7、ecshop出自shopex公司的开源电子商务平台解决方案。
是一款非常好用的B2C程序,笔者曾经用过,非常优秀,PHP+MYSQL架构。
8、destoon强大的B2B(电子商务)行业门户解决方案,基于PHP+MYSQL的架构。
有很多大型的B2B 门户站都采用该套程序。
9、wordpress这个应该国内采用最多的个人博客开源系统了。
适合于个人博客、小型的企业站、CMS 10、z-blog国内优秀开源的ASP个人博客系统11、discuz康盛公司出品的最初只是为解决BBS而服务的社区型论坛系统,现在已经发展为一个综合性的开源程序服务提供商,DZ也是们国内论坛用得最多的开源cms,现在康盛公司并入腾讯更是展现出强大的后劲力量。
12、phpwind这也是一家强大的开源社区论坛系统,现在已经嫁入阿里巴巴,相信未来前景广阔。
这些都是我平时用过的,或是自己建站用过,或是本地测试过,上面介绍的除了帝国CMS我没有测试过,其余的我都测试过。
开源CMS赏析

开源CMS赏析国内CMS产品有很多,开源的产品也不少,大概的可分为以下几类:.NET开源产品:We7CMS;PHP开源产品:Dede CMS、PHP CMS和帝国CMS;ASP开源产品:动易SiteFactory和KesionCMS;Java开源的产品目前还没见到,以上产品是个人所了解过的,并且也试用过一段时间的,以上这些CMS产品都是经过多年的风雨洗礼后,依然屹立于市场上的产品。
在国内,如果你遇到了开源的好产品,千万不要放过,国内的市场飘摇不定,能一直坚持下来并持续更新的产品是值得我们学习和尊敬的。
本身笔者也是从事这个行业的人,之前也一直在用上述的产品,中间由于某些原因有一段时间不是很关注他们的消息,最近朋友说起来让推荐个好用的内容管理系统,笔者在推荐的同时又把以上的CMS重新的看了一下,最终推荐了一个比较适合朋友情况的产品。
因为本身就在这个行业内,不时的也会有朋友QQ上问,所以笔者决定做一个简单的分析记录下来,分享出去可以供更多的人参考。
基本的功能这儿就不在提了,相信真正了解过CMS的人也很清楚,基础功能大家都差不多,关键就是看谁的更好用。
当作为用户的时候,使用CMS的目的就是为了建站,建站无非就是栏目、模板和信息发布,剩下的就是一些扩展性的功能和细节的处理。
栏目和信息发布没啥可说的,每家的产品都差不多,笔者就从模板、扩展性和细节上来阐述一下。
1、模板模板这块做的比较好的是We7CMS,用全拖拽的方式来实现模板的建设,包括模板的布局,样式的展示,都是通过拖拽的方式,就像现在的博客一样,当然We7CMS的模板建设比博客拖拽的功能要强大很多,We7模板中的布局和样式是可以任意修改的,基于DIV和CSS,很少会用到切图这个环节了;但是We7系统内部提供的部件并不是很多,仅够做出一个简单的小门户站,大部分的部件还需要到他们的插件商店去下载。
刚开始的时候笔者其实并不理解,但是看到使用过的CMS后,发现就We7的产品安装包最大,差不多有20M左右,再加上.NET本身第一次打开网页的速度就不快,也可以理解人家为啥要提供小部分的部件,大部分的需要下载,减少系统冗余啊。
织梦标签常用模板及解释(新手必看)

织梦标签常用模板及解释{dede:type} 这个是指定栏目的调用,typeid='10' 是栏目ID [field:typelink/]栏目链接,eg:list_article {dede:type typeid='0'} [field:typename /] {/dede:type}完整list_articledede:include filename="head.htm"/}{dede:include filename="right.htm"/}{dede:field name='position'/}{dede:type typeid='0'} [field:typename /] {/dede:type}{dede:list pagesize='10'}[field:title /][field:description/]{/dede:list}{dede:pagelist listitem="info,index,end,pre,next,pageno,option" listsize="5"/}{dede:include filename="footer.htm"/}完整article_imagedede:include filename="head.htm"/}{dede:include filename="right.htm"/}{dede:field name='position'/}{dede:field.title/}{dede:field name='imgurls' row='1'} <img src=[field:imgsrc/] alt="[field:alttext /]" /> {/dede:field} {dede:productimagelist} <img src=[field:imgsrc/] alt="[field:alttext /]" /> {/dede:productimagelist}dede: 图集内容页从dede:field name='imgurls' 获得图片列表{dede:field name='imgurls' alt='图片输出区'}<img src=[field:imgsrc/] alt="[field:alttext /]" />{/dede:field}上面的调用代码默认情况下只能调用一张大图,下面教大家怎样获得所有大图列表首先发布图片集的时候“表现方式”选择第三种,即多缩略图样式然后我们把缩略图改成大图的方法:打开文件:include\taglib\channel\img.lib.php查找$fields['imgsrc'] = $fields['ddimg'];改成$fields['imgsrc'] = $fields['imgsrc'];完成article_article.htmdede:include filename="head2.htm"/}当前位置: {dede:field name='position'/}{dede:field.title/}织梦一些核心调用代码// 列出所有分类<ul>{dede:channel type='top' row='10' currentstyle="<li class='hover'><a href='~typelink~' ~rel~><span>~typename~</span></a></li>"} <li><a href='[field:typeurl/]' [field:rel/]><span>[field:typename/]</span></a></li>{/dede:channel}</ul>// 分类的文章列表<div class="place"><strong>当前位置:</strong> {dede:field name='position'/}</div><!-- /place --><div class="listbox"><ul class="e2">{dede:list pagesize='10'}<li> [field:array runphp='yes']@me = (empty(@me['litpic']) ? "" : "<a href='{@me['arcurl']}' class='preview'><img src='{@me['litpic']}'/></a>"); [/field:array] [<b>[field:typelink/]</b>] <a href="[field:arcurl/]" class="title">[field:title/]</a> <span class="info"> <small>日期:</small>[field:pubdate function="GetDateTimeMK(@me)"/] <small>点击:</small>[field:click/] <small>好评:</small>[field:scores/] </span><p class="intro"> [field:description/]... </p></li>{/dede:list}</ul></div>//内容页的核心代码<div class="place"> <strong>当前位置:</strong> {dede:field name='position'/}</div><!-- /place --><div class="viewbox"><div class="title"><h2>{dede:field.title/}</h2></div><!-- /title --><div class="info"><small>时间:</small>{dede:field.pubdate function="MyDate('Y-m-d H:i',@me)"/}<small>来源:</small> {dede:field.source/}<small>作者:</small>{dede:field.writer/} <small>点击:</small><script src="{dede:field name='phpurl'/}/count.php?view=yes&aid={dede:field name='id'/}&mid={dede:field name='mid'/}" type='text/javascript' language="javascript"></script></div><!-- /info -->{dede:field.description runphp='yes'}if(@me<>'' )@me = '<div class="intro">'.@me.'</div';{/dede:field.description}<div class="content"><table width='100%'><tr><td><div id="contentMidPicAD" style="float:right; clear:both; top:0; vertical-align:top;">{dede:myad name='contentMidPicAD'/}</div>{dede:field.body/}{dede:field.vote/}(责任编辑:{dede:adminname/})</td></tr></table></div>注:{dede:field.title/}文章标题{dede:field.body/} 文章内容。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
作为CMS,最需要做到地是把程序和数据展示分离出来,让用户不需要了解太多程序的程序即可很方便的使用来搭建合种个性化站点,而标签的灵活性,很大程度上决定了CMS 的好用与不好用,而标签的好用不好用,除了处决于标签本身在细节上做的细致程度(如详细的帮助文档、简单的标签生成方式等)决定外,整个标签体系的设计思路更起到决定作用。
本文中落叶对PHPCMS、DEDECMS及帝国CMS的标签的设计思路与解析方式作一些简要的对比分析。
现在主流的PHP程序实现数据处理与数据展示的分离,都会使用第三方的或者自己开发的模板引擎,一般的模板引擎中除了支持特定格式的数据变量标签展示外,还支持数组循环、逻辑判断、函数处理、文件包含、PHP原生语法等。
一般的模板引擎的处理思路时各种以HTML文本的方式存储(有的是.html的扩展名,有的是.tpl的扩展名),然后模板引擎会对模板中的标签或代码进行编译预处理成PHP文件缓存到特定目录,处理成的PHP文件里面不再是标签格式,而是标签被处理后可直接执行的对应的PHP语句块。
然后在PHP控制文件中处理好数据后,使用模板调用函数调用编译好的PHP文件形式的缓存模板(当然,过程中会有判断,如果缓存不存在,则直接从原模板文件编译一次生成缓存后调用),直接整合到PHP控制文件中一起执行。
如果是生成静态,则是先处理好数据后,引用编译好的模板文件,执行,输入后缓存区,后面再写入生成HTML文件。
早期的ASP类风格的CMS设计没有系统化的模板引擎,而是采用单一替换的模式,即先读入模板文件,然后替换模板文件中标签,每一个标签都是单独处理替换。
PHPCMS和DEDECMS中模板的处理方式为通用的模板引擎处理方式,而帝国CMS的模板处理方式为早期的ASP类风格CMS的处理方式。
1. PHPCMS标签的解析方式:
PHPCMS标签形式主要有TAG标签和GET标签,静态HTML模板在编译过程中会经过模板引擎统一进行正则替换并转化为对应的PHP函数块。
如:{tag_标签内容列表},经模板引擎编译处理后:
在控制PHP文件中使用模板引用函数引用模板时,该标签即自动调用global.func.php 文件中的tag函数执行得到文章列表结果后输出。
又如GET标签:调用最新10条文章标题的GET标签
经PHPCMS模板引擎编译解析后的PHP代码块:
2. DEDECMS标签的解析方式:
DEDECMS标签的解析方式和PHPCMS类,经过DEDE模板引擎类的dedetag.class.php 的编译处理,标签被处理成PHP代码块后缓存到data目录的tplcache目录。
如:分页页码列表标签{dede:pagelistlistsize=‘5’ listitem=‘’/}经DEDE模板引擎编译解析后和模板HTML一起缓存到缓存目录的对应的PHP代码块为:
因为DEDE CMS模板引擎也是目前通用的模板引擎编译解析方式,所以整个流程和PHPCMS类似。
3. 帝国CMS标签处理方式:
据落叶的观察,帝国CMS是没有模板引擎这个概念的,每一个标签的处理都是单独用函数来替换。
前一段时间,一位朋友希望在内容页有多分页的文章前面加上分页小标题导航。
当时,为了实现这个小小的功能,落叶仔细研究了下落叶的模板标签解析功能,实际发现,帝国CMS在生成静态时,是先将需要展示的数据处理好,甚至整合HTML文件然后单个替换模板中的标签,每个标签都单独写一个或几个函数来处理,然后替换后生成静态。
基本上帝国CMS中的标签替换基本是白名单替换。
结果是,即使自己想在内容页增加一个简单的自定义标签,实现一些小的功能,都需要修改帝国的functions.php和t_functions.php中的核心函数文件。
举个帝国CMS处理标签的简单例子:
获取面包屑导航的标签的处理代码如下:
处理标题标签的代码如下:
一般如果按照模板引擎编译解析的方式,会选将所有变量性质的标签直接通过定界符判断出是标签,然后统一使用正则进行解析,而帝国的处理方式是一个个单独处理,所以就出现像上面的那样,$string为读取出来的模板内容,然后一步一步逐一替换处理,典型的早期的动易、新云等ASP类CMS的标签的处理方式。
不管帝国CMS这样处理的执行效率高不高,至少二次开发的效率是很低的,每个页面的标签或者变量都要单独去处理。
如果是想在模板中增加一个自定义变量类的标签,在PHPCMS中只需要在模板中{$自定义变量名}这样即可,而帝国CMS中除了在模板中添加[!—自定义变量名--](如[!--pagedes--])外,不得不在生成静态的处理函数中增加类似上面的标签替换步骤,如:$string=str_replace('[!--pagedes--]',$pagedes,$string);
也许对于普通用户而言,不论标签的解析方式如何,只要把标签做得细致,简单好用,灵活,就够了,所以帝国CMS还是有比较多的忠实用户的,很多人觉得很省心,不要考虑啥逻辑,按照说明,标签放上去,就基本没问题。
而对于深度用户,尤其是有编程基础的用户,喜欢DIY或者个性需求较多的,更习惯目前主流的模板引擎的编译解析方式,不太喜欢封装得很好的标签,希望得到干净的数据,可以直接在模板中进行逻辑处理,而标签除了一部分是变量外,调用数据类标签,实际是特定格式调用的系统函数。
至少落叶,偏向于喜欢PHPCMS和DEDECMS的标签解析方式,而对帝国CMS的标签处理方式比较纠结。