新版语法变更
- 思维(CMSware)的设计终旨就是将网站管理人员从繁重的手工管理中解脱出来,而更多的关注于网站的内容管理和网站的样式设计,通过动态内容静态化,最大幅度的降低了系统的负荷,同时也保留了动态网页的灵活性,通过使用优秀的自有模版引擎和语法,再加上灵活的思维(CMSware)功能调用插件的二次开发,你可以自由的发挥出你设计的天赋,展现你网站与众不同的形像,最大限度的利用思维(CMSware)给你带来的效率提升。
思维(CMSware)2.85相对于思维(CMSware)2.7的模版语法变更
+ NodeGUID ,增加 all- 参数的支持。就像all-{NodeID} 一样使用方法。
+ CMS::NODELIST结点列表加上 orderby 参数,默认为“NodeSort DESC”
+ 新增用户名调用函数CreationUser,根据后台用户id去查出。 [@CreationUser($CreationUserID)]
思维(CMSware)2.62相对于思维(CMSware)2.61的模版语法变更
- 改进的自动缩略图函数AutoMini
AutoMini(源图地址, 缩略图尺寸, 内容信息数组, 缩略图品质, 是否自动裁图, URL前缀)
URL前缀:默认为空,用于源图地址为相对地址时定位图片.
使用举例:
[@AutoMini($a,"100*200",$var,'','','http://www.sohu.com/photo/')]
[@AutoMini($a,"100*200",$var,0,0,'http://www.sohu.com/photo/')]
- CMS_CONTENT调用新增参数LoopMode="1",在只有一条返回值时也生成二维数组。
- 新增附加发布调用“ExtraPublish”,
- 支持子模版
思维(CMSware)2.61相对于思维(CMSware)2.6的模版语法变更
- 改进的自动缩略图函数AutoMini
AutoMini(源图地址, 缩略图尺寸, 内容信息数组, 缩略图品质, 是否自动裁图)
缩略图品质:默认为75,可设范围0~100.
是否自动裁图:默认为1,1为是,0为否
例如:[@AutoMini($Photo, '120*100', $Publish, 90, 1)]
思维(CMSware)2.6相对于思维(CMSware)2.51的模版语法变更
- 新增CMS计算统计类调用标签"COUNT",用于求COUNT、SUM、AVG这些值,返回一个字符串变量,主要使用function属性定义统计操作,其他属性同CMS_LIST
<cms action="COUNT" return="countValue" Function="count(*)" NodeID="2" />
<cms action="COUNT" return="sumValue" Function="SUM(c.price)" NodeID="2" />
<cms action="COUNT" return="avgValue" Function="AVG(c.price)" NodeID="2" />
总记录数:[$countValue]
price字段和: [$sumValue]
price字段平均值: [$avgValue]
- CMS_LIST支持ignore="1,2"忽略结点ID
- 新增returnKey标签 ,可以定义内容列表记录返回那些字段,一般列表只需要获得Title即可,而无需返回Content等字段,使用此属性,可以一定程度上提高更新效能。
<CMS action="LIST" return="List" NodeID="{$NodeInfo.NodeID}" orderby="Hits_Total" num="10" returnKey="Title,Keywords" />
<LOOP name="List" var="var" key="key">
<ul>
<li>
<a href="[$var.URL]" target="_blank" title="[$var.Title]" >[@CsubStr($var.Title, 0, 18)] </a><span class="process">(<font color="#ff6600"> [$var.Hits_Total] </font>)</span>
</li>
</ul>
</LOOP>
思维(CMSware)2.51相对于思维(CMSware)2.5的模版语法变更
- 新增Cache标签Cache="1" ,可以用于所有调用,模版中的CMS调用通过使用Cache,可以大幅提升批量更新的效率.
Cache使用技巧需要特别注意,只有模版公共调用的部分使用Cache才有效果,比如内容页 头部的导航NODELIST调用,或者top10之类的调用,结点首页的Page-10分页调用最好不要用Cache, 因为不会提升任何效率.
<CMS action="LIST" return="List" NodeID="{$NodeInfo.NodeID}" orderby="Hits_Total" num="10" Cache="1" />
<LOOP name="List" var="var" key="key">
<ul>
<li>
<a href="[$var.URL]" target="_blank" title="[$var.Title]" >[@CsubStr($var.Title, 0, 18)] </a><span class="process">(<font color="#ff6600">[$var.Hits_Total]</font>)</span>
</li>
</ul>
</LOOP>
思维(CMSware)2.5相对于思维(CMSware)2.1的模版语法变更
- loop语句新增start属性,可以设置key的起始值
<loop name="List" var="var" key="key" start="1" >
<li>[$key] <a href="[$var.URL]">[$var.Title]</a>
</loop>
- 新增“结点唯一标识符(NodeGUID)”,LIST调用里面使用NodeGUID进行调用。注意:NodeGUID不能和NodeID同时使用,结点唯一标识符建议使用”域名.结点名“的形式以保证唯一性。(对于对外发布共享的结点更需要注意这点)
<CMS action="LIST" return="List" NodeGUID="com.cmsware.news.global" Num="20" />
<ul>
<loop name="List" var="var" key="key">
<li>[$var.ContentID] <a href="[$var.URL]">[$var.Title]</a>
</loop>
</ul>
NODELIST调用新增新参数 <CMS action="NODELIST" return="List" type="brother">
type
- parent : 调用所有父级结点列表(新)
- brother : 调用所有同级(兄)结点列表(新)
- son : 调用所有子结点列表,等同于“sub”(新)
- 新增header标签,实现发送文件头的功能, 比如动态发布中加XML头
属性(name:header名)
<header name="Content-Type: text/html; charset=gbk" />
<header name="Content-Type: text/xml; charset=gbk" />
-
- 从2.5RC3起,模版引擎增加新的模版调用语法,同时完全兼容1.x/2.x模版语法,新语法支持更多更强的功能。
- - 标签语法遵守XML方式,所有调用标签参数的值必须用引号""括起来,比如:
<CMS::LIST:List NodeID="1" TableID="2" Limit="">
所有标签的参数名不再区分大小写,但调用标签名要区分大小写,如:
<CMS::NODELIST:List NodeID='1'> 中的NODELIST必须大写,但NodeID和nodeid一样
CMS调用
<CMS action="LIST" return="ListOne" where="(c.Title=='{$var.Title}' and c.Photo!='') or c.Hit>=10" NodeID="1" />
<CMS action="CONTENT" return="contentInfo" IndexID="{$var.IndexID}" />
<CMS action="SQL" return="ListTwo" query="select * from cmsware_site where Disabled=0" />
IF语句
<if test="$a > $b && ($b>$e)">
<elseif test="$c > $b || $a == 0" >
<else>
</if>
LOOP语句
<loop name="List" var="var" key="key" >
</loop>
Op操作语句
该语句为新增语句,用于表达式的运算
格式:<op exp="要运算的表达式" />
例子:
<op exp="$var=$var+1" />
<op exp="$var++" />
<op exp="$var=($var - 5)/10" />
<op exp="$var=date()" />
<op exp="$var=date('Y-m-d', $info.Time)" />
Op语句的功能非常强大,可以用来替换var语句进行复杂变量定义
<var name="hello" value="world" /> 等同于
-
<op exp="$hello='world'" />
使用Op语句进行复杂变量定义:
<op exp="$hello=Cstrsub($var.Content,1,10,'...').'New!'" />
Debug语句
该语句为新增语句,用于变量调试
格式:<debug name="变量名" />
例子:
<CMS action="SEARCH" return="List" NodeID="{$NodeID}" Field="Keywords" Keywords="{$Keywords}" Num="10" Separator="," IgnoreContentID="{$ContentID}" /><!--使用SEARCH调用获取相关文章列表-->
<debug name="List" />
<LOOP name="List" key="key" var="var">
<li><a href="[$var.URL]">[$var.Title]</a></li>
</LOOP>
[新旧模版语法比较]
- 为了符合XML规范,新版本<CMS...>中的所有属性必须使用""进行闭合,同时将老版的闭合标签<CMS...>..</CMS>改为非闭合标签<CMS.../>。
- 所有非闭合标签必须使用 />作为结束符,比如<op exp="$var=$var+1" />
闭合标签: 比如 <loop ......>....</loop>、<if...>......</if>.
非闭合标签: 比如 <cms action="xxx" return="xxx"..../>、<op exp="xxx" />、<var name="xxx" value="xxx" />
- 新版模版语法改为将where调用直接放在<cms...>标签中,请大家注意
新版CMS调用:
<CMS action="LIST" return="ListOne" where="(c.Title=='{$var.Title}' and c.Photo!='') or c.Hit>=10" NodeID="1"/>
<CMS action="SQL" return="ListTwo" query="select * from cmsware_site where Disabled=0" />
老版CMS调用:
<CMS::LIST:ListOne NodeID="1">
<where: (c.Title=='{$var.Title}' and c.Photo!='') or c.Hit>=10 >
...
</CMS>
新版LOOP调用:
<loop name="List" var="var" key="key">
</loop>
老版LOOP调用:
<loop $List var=var key=key>
</loop>
新版IF调用:
<if test="$a > $b && ($b>$e)">
<elseif test="$c > $b || $a == 0" >
<else>
</if>
老版IF调用:
<if $a > $b && ($b>$e)>
<elseif $c > $b || $a == 0 >
<else>
</if>