在模版中灵活处理变量的4种方法

注意:AKCMS已于2019年12月27日宣布停止更新,此文档仅供老用户参考,不建议新用户选择AKCMS建站。
注意:AKCMS6.1.2已取消授权机制,文档中关于授权、服务、技术支持等的内容均已失效。

本文是关于二次开发的高级用法,普通站长请绕行,以免烧脑子。

在模版中显示变量(假设变量名是$var)最通常的写法是:

<{$var}>

但有时我们不想直接显示,而是对变量做一些处理再显示。假设有一个需求,截断变量的前20个字然后输出。

旧版本的akcms可以通过<{akecho}>标签+过滤器来实现这个需求:

先创建一个过滤器截断20个汉字

过滤器的内容是(每个汉字长度为2,每个英文、数字长度为1,所以20个汉字就是40):

php:ak_substr($input, 0, 40);

假设过滤器的ID是x,然后在标签中应用这个过滤器。

<{akecho source=$var filter="x"}> <!--x用来代替过滤器的ID,比如1-->

在6.1版中有了更简单的方法:

<{akecho source=$var filter="x"}> <{$var[#x]}> <!--上面两个调用完全等效,x代表过滤器的ID,比如:1-->

这样的写法虽然比原来简单了一些,但是还是需要创建过滤器,像截断字数这种常用的调用我们提供了第2种处理方法:不用创建过滤器,直接在变量的后面加:长度。

<{$var[:40]}>

有时候需要对变量进行简单的处理,比如:想把全部字母都转为大写,稍微有php基础的朋友知道有一个strtoupper函数可以实现这个功能。akcms还支持第3种处理方法:

<{$var[@strtoupper]}>

就是在变量的后面加上[@函数名],但是只支持1个参数的函数。

如果需求比较复杂,相应的处理代码也比较复杂就无法这样简写了,akcms还支持第4种处理方法:假设需求是变量先与"abc"连接再md5,再截取前6个字符就这样写:

<{$var[@substr(md5($1."abc"),0,6)]}>

在@的后面写php语句,用$1代替要处理的变量。

理论以上这4种变量处理方法能做的事,akecho+过滤器都可以做,只不过新的这方法更方便、简单、直接。

备注:本文用$var变量举例,实际上不存在这个变量。不同类型的模版中有哪些预定义的变量请参考:《所有模版都可以用的全局变量》、《内容页模版变量》、《栏目页模版变量》、《主题页模版变量》、《单页模版变量