通过 Filter_Plugin_PostComment_Core 接口,可以在 Z-BlogPHP 发表评论前对评论对象做最后检查与改写。该接口在 PostComment() 函数内触发,此时评论数据已读入 $cmt 对象,但尚未执行系统过滤函数 FilterComment,也未写入数据库。
Filter_Plugin_PostComment_Core
PostComment()
$cmt
FilterComment
&$cmt
下例在评论发表前检查黑名单关键词,命中时置 $cmt->IsThrow = true 阻止评论入库,否则把评论内容中的敏感词替换掉:
$cmt->IsThrow = true
<?php RegisterPlugin("demoAPP", "ActivePlugin_demoAPP"); function ActivePlugin_demoAPP() { Add_Filter_Plugin('Filter_Plugin_PostComment_Core', 'demoAPP_PostComment_Core'); } function demoAPP_PostComment_Core(&$cmt) { // 命中黑名单词时丢弃评论 $blacklist = array('赌博', '代开发票'); foreach ($blacklist as $word) { if (stripos($cmt->Content, $word) !== false) { $cmt->IsThrow = true; return; } } // 普通敏感词替换 $cmt->Content = str_ireplace(array('敏感词'), '***', $cmt->Content); // 记录处理日志 $file = $GLOBALS['zbp']->usersdir . 'plugin/demoAPP/core.log'; $log = date('Y-m-d H:i:s') . ' PostComment_Core #' . $cmt->ID . ' LogID=' . $cmt->LogID . PHP_EOL; file_put_contents($file, $log, FILE_APPEND); }
$cmt->Save()
IsThrow
true
Filter_Plugin_PostComment_Succeed
root
Filter_Plugin_CheckComment_Core
评论发表前拦截扩展
通过
Filter_Plugin_PostComment_Core接口,可以在 Z-BlogPHP 发表评论前对评论对象做最后检查与改写。该接口在PostComment()函数内触发,此时评论数据已读入$cmt对象,但尚未执行系统过滤函数FilterComment,也未写入数据库。接口信息
Filter_Plugin_PostComment_Core&$cmt完整案例
下例在评论发表前检查黑名单关键词,命中时置
$cmt->IsThrow = true阻止评论入库,否则把评论内容中的敏感词替换掉:注意事项
PostComment()中、系统过滤函数FilterComment之前、$cmt->Save()之前;FilterComment执行后若检测到IsThrow为true,系统会中止发表并返回错误,因此在本接口中置IsThrow可以阻止评论入库;&$cmt,否则对评论对象的修改不会生效;Filter_Plugin_PostComment_Succeed是同一发表流程的前后两段:Core 在入库前触发、可拦截或改写,Succeed 在入库及计数完成后触发;root权限,评论会进入待审核队列,此时同样会先经过本接口;Filter_Plugin_CheckComment_Core接口,两者操作的都是 Comment 对象。