AKCMS提供了优先级从低到高全局、模块、栏目、内容四级模版设置机制,灵活应用可以适应绝大多数关于模版的需求。有时,特殊的需求需要在这四种机制之外,动态修改模版。我举几个例子:
例1:某网站需要增加手机版,检测到手机访问的时候显示对应的wap模版。
例2:某网站需要防采集,检测到某IP段的访问就使用一组假模版随机输出。
例3:某网站要黑帽SEO,检测到百度蜘蛛就喂一些与普通访客不同的模版。
前端模版的hook可以实现这样的需求(需要内核6.1+),首先创建一个应用(如何创建应用?)。
确保应用的目录中有一个子目录叫hook,然后在其中新建一个文件叫:foretemplate.php
在这个程序中,可以读到当前即将渲染的模版(变量名$template),要实现前述的功能就是为$template这个变量重新赋值。
最简单的直接改:
<?php $template = ',demo.htm'; ?>
确保这个模版文件存在,然后在后台“更新缓存”。再刷新前台页面,就会看到原来正常的页面已经替换为模版,demo.htm的内容了。
当然这只是一个演示,实际直接绕过后台的四级模版设置这样赋值是没有意义的。在这一句的前面肯定要加条件判断语句。
下面是一个应用的完整的hook代码的举例:
<?php if(is_mobile_request()) { if(!ifstartwith($template, ',wap_')) $template = ',wap_'.substr($template, 1); } ?>
稍微有点php的基础很容易理解这些代码的意思是,如果发现是手机请求,就在要渲染的模版前加wap_前缀。至于防采集和黑帽SEO等其他的动态修改模版的需求也都类似,都是判断条件符合后修改模版,二次开发时可以灵活运用。