前端模版的hook

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

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等其他的动态修改模版的需求也都类似,都是判断条件符合后修改模版,二次开发时可以灵活运用。