前端模版的hook

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