在模板中除了直接显示的变量之外,还有另一种获取动态数据列表的方式,我们称之为“调用”。下面给出一个简单的调用:
<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次数据库查询是起码的-->