本功能为二次开发者设计,站长看不懂不影响正常使用,绕行即可。
在二次开发中常常遇到这样的情况,希望自己的代码在页面打开之前有机会执行。比如这种需求:判断是搜索引擎的蜘蛛,就做出一定的动作。这样的代码就需要在页面打开之前执行。
不需要修改AKCMS的代码即可实现这样的功能,不修改AKCMS代码的好处是保持以后升级的时候不需要把修改过的文件,修改过的代码merge到新的版本中,始终保持独立。
AKCMS 2.7以上版本在动态执行时会检查(/plugins/runtime/)中是否有_before.php结尾的文件,如果有就在页面打开之前执行他们。页面打开完毕后检查(/plugins/runtime/)中是否有_after.php结尾的文件,如果有就执行他们。
例如这个需求:把所有动态执行的每一次访问的访问地址都记下日志以便分析。
拷贝以下代码:
<?php
error_log($_SERVER['REQUEST_URI']."\n", 3, AK_ROOT.'./logs/log.txt');
?>
保存为/plugins/runtime/log_after.php即可。
注意:生成静态页之后,直接就是HTML文件的显示,当然不能执行任何代码,所以本文所说的功能都是针对AKCMS动态执行时而言。
3.8新增功能:采集功能的hook
hook程序的以函数的形式统一写在configs/hook.php中,函数命名规则:
1 采集列表页的hook,命名为hook_spidelist_123(123代表采集规则ID,下同)
2 采集内容页的hook,命名为hook_spiderurl_123
以数组的形式向hook函数传入已经采集到的全部数据。举一个例子:要把采集内容页(假设内容页采集规则的ID是1)采集到的title中的字母全部大写就在/configs/hook.php中增加这样一个函数:
function hook_spiderurl_1($value) {
$value['title'] = strtoupper($value['title']);
return $value;
}
保存后就立即生效了,下次采集完ID1的采集规则后,会自动调用这个函数,实现你想要的功能。
3.8.4新增功能:保存内容的hook
hook程序的以函数的形式统一写在configs/hook.php中,函数命名规则:
1 修改内容正文的hook,命名为hook_saveitemdata_123(123代表所属模块ID,下同)
函数会传入两个参数,第一个是正文内容,第二个是除正文外其他字段的一个数组。返回值是处理后的正文内容。
2 修改内容其他字段的hook,命名为hook_saveitem_123
函数会传入两个参数,第一个是除正文外其他字段的一个数组,第二个是正文内容。返回值是处理后的数组。