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

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


在模版中显示变量(假设变量名是$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变量举例,实际上不存在这个变量。不同类型的模版中有哪些预定义的变量请参考:《所有模版都可以用的全局变量》、《内容页模版变量》、《栏目页模版变量》、《主题页模版变量》、《单页模版变量