调用

在模板中除了直接显示的变量之外,还有另一种获取动态数据列表的方式,我们称之为“调用”。下面给出一个简单的调用:

<table>
<{getitems category="10" num="5" template="<tr><td>[itemid]</td><td><a href='[url]'>[title]</a></td></tr>"}>
</table>

了解HTML的站长能很容易理解这个调用是展示了一个表格,其中的category="10"代表从ID为10的栏目取内容,num="5"代表取5条。稍加修改就能在您的测试模板中看到效果,生成的页面源代码是这样的:

<table>
<tr><td>674</td><td><a href='http://dev.akcms.net/dynamic/5.2.htm'>5.2发布 改进应用的编码机制</a></td></tr><tr><td>678</td><td><a href='http://dev.akcms.net/dynamic/5.2.1.htm'><font color="#FF0000">5.2.1发布 又修正了分页BUG</font></a></td></tr><tr><td>680</td><td><a href='http://dev.akcms.net/dynamic/diy-link.htm'><font color="#FF0000">庆祝广告自助发布功能上线 优质外链限时半价</font></a></td></tr><tr><td>955</td><td><a href='http://dev.akcms.net/dynamic/5.3.5.htm'>5.3.5发布 改进了批量生成栏目静态页</a></td></tr><tr><td>970</td><td><a href='http://dev.akcms.net/dynamic/970.htm'>企业网站模板2发布</a></td></tr><!--0.0156-->
</table>


相信大家对什么是调用已经有了直观的概念了,下面我们以这个调用为例详细的说一下这个规则:


1 getitems我们叫它“调用标签”,AKCMS内核一共支持10种基础的调用标签:


getitems
获取内容
getattachments
获取附件
getlists获取列表项(通用)
getcategories
获取栏目
gettime获取时间(通用)
getpaging
获取分页
getsqls获取数据库表内容(通用)
getcomments获取评论
gettexts获取内容正文(常用于分页)
getpictures
获取图片

因为AKCMS的灵活扩展的特性,通过应用(插件)可以扩充更强大、丰富的调用功能(应用中心:http://jimifan.com/app/


2 category="10"和num="5"是“调用参数”,每一种调用标签对应许多可选或必选的参数。


3 template="xxxxxxxxxxxx"是“调用模板”,它决定符合条件的内容以何种格式输出,可以理解为列表的循环体。


4 调用的前后必须是“<{”、“}>”,用于表示开始和结束。


5 调用参数不但可以是直接值,也可以是变量,假设当前页面有一个变量叫$c1(具体哪个页面可以用哪个变量请参考《变量》),内容是某栏目的ID,如果要调用该栏目的内容也可以直接把变量作为调用参数的值(注意看category参数的差异):

<{getitems category=$c1 num="5" template="<tr><td>[itemid]</td><td><a href='[url]'>[title]</a></td></tr>"}>


6 变量不但可以作为参数,也可以出现在调用模板中,假设一个有变量叫$abc,现在有需求需要在ID之前固定显示这个$abc的值,可以在模板里直接插入变量(注音:因为调用模板本身就在<{}>中间,所以调用模板里的变量不需要再加<{}>前后缀),下面是具体的实例(注意看调用模板的差异):

<{getitems category="10" num="5" template="<tr><td>$abc[itemid]</td><td><a href='[url]'>[title]</a></td></tr>"}>

由于变量之后紧跟着的是中括号“[”,它是天然的变量终止符。如果想在“123”的前面固定显示$abc的值,按照上面的例子应该写成

<{...... template="...$abc123..."}>

因为变量名中数字也是合法的,所以系统误认为变量名就叫“$abc123”于是就出错了。这种情况下要人工为变量输入一个终止符:“\00”

<{...... template="...$abc\00123..."}>

这样系统就知道$abc是一个变量,123是跟在变量后面的。“\00”只起到分隔变量的作用,无任何输出。


7 调用模板中插入变量时,必须使用双引号

正常情况下,调用模板的指定使用双引号和单引号均可,但如果想在其中插入变量则只能使用双引号。

<{... template='abc'}>
<!--template是abc-->

<{... template="abc"}>
<!--template是abc-->

<{... template='abc$abc'}>
<!--template是abc$abc($不被认为是变量的开始,而是$字符)-->

<{... template="abc$abc"}>
<!--template是abc后面接变量$abc的内容-->


8 调用可以嵌套,但只支持嵌套一次,大部分情况下这就足够了,如果在制作模板中需要用到两次或以上的嵌套,首先应该想到修改实现方式。嵌套调用比较复杂,请参考专门的文档《嵌套调用


9 调用的效率远低于变量,当一个数据有现成的变量的时候(比如:内容页)不要使用调用获取,因为这会带来额外的数据库查询开销,页面打开速度将受影响。下面两个代码的显示效果是一样的,但速度相差很大:

1 <{$title}>
<!--几乎不花时间-->

2 <{getitems id=$id num="1" template="[title]"}>
<!--2、3次数据库查询是起码的-->