相关文章自定义接口
在 Z-BlogPHP 中读取文章对象的 RelatedList 属性(相关文章列表)时会触发 Filter_Plugin_Post_RelatedList 接口,可以接管系统默认的相关文章查询,实现按标签、同分类、随机推荐等自定义逻辑。
接口信息
| 接口 | 参数 | 说明 |
|---|---|---|
Filter_Plugin_Post_RelatedList | $post | Post 类的 RelatedList 接口 |
完整案例
下例为带标签的文章按标签取相关文章,其余文章仍走系统默认的相关文章逻辑:
php
<?php
RegisterPlugin("demoAPP", "ActivePlugin_demoAPP");
function ActivePlugin_demoAPP()
{
Add_Filter_Plugin('Filter_Plugin_Post_RelatedList', 'demoAPP_Post_RelatedList');
}
function demoAPP_Post_RelatedList($post)
{
global $zbp;
if ($post->Type == 0 && $post->Tag != '') {
// 动态设置 RETURN 信号,本次读取使用本回调的返回值
SetPluginSignal('Filter_Plugin_Post_RelatedList', __FUNCTION__, PLUGIN_EXITSIGNAL_RETURN);
return GetList(
(int) $zbp->option['ZC_RELATEDLIST_COUNT'],
null,
null,
null,
$post->Tags,
null,
null
);
}
}注意事项
- 触发时机在读取
RelatedList属性时;系统默认逻辑是按文章标签做关联查询,本例与之类似但完全由插件控制查询条件。 - 只有回调内动态设置
PLUGIN_EXITSIGNAL_RETURN信号后返回值才会生效,否则系统继续执行默认查询;如需全站接管,可在注册时静态传入PLUGIN_EXITSIGNAL_RETURN。 - 返回值应为文章对象数组(
GetList的返回值可直接使用),模板中对$article->RelatedList的遍历会直接使用该结果。 - 相关文章查询发生在文章页渲染时,回调中的查询条件应尽量走数据库索引字段,避免在文章较多时拖慢页面。