Discuz应用中心之所以能够汇聚众多开发者,主要得益于其便捷性。对于具备技术基础的开发者而言,Discuz提供了较低的学习门槛,使得他们可以快速上手并进行二次开发。
在Discuz的二次开发过程中,增加templat和plugin目录是常见的操作方式。这意味着开发者可以通过自定义插件和模板来打造个性化的Discuz站点。而在插件开发中,一个不可忽视的重要概念就是插件嵌入点(hook)。类似的机制在其他开源程序中也存在,例如WordPress。
Discuz默认提供了一些嵌入点,我们可以在config/config_global.php文件中加入以下代码,从而在网站前台查看各个自带嵌入点的位置:
$_config['plugindeveloper'] = 2;
这些自带的嵌入点已经覆盖了大多数页面嵌入的场景。然而,在实际开发中,有时我们需要在除默认嵌入点之外的位置添加额外的嵌入点。例如,在手机模板forumdisplay.htm文件中,可能有这样的代码:
{$thread[subject]}....... |
这里官方提供的默认嵌入点允许我们在记录上方插入内容。但如果希望在
标签下方嵌入内容,该怎么办呢?虽然开发者们可能有各自的解决方法,但使用自定义嵌入点显然更为直接和高效。
幸运的是,Discuz确实支持自定义嵌入点,并且实现起来非常简单。根据官方文档,只要遵循以下规则即可:
函数名应为 CURMODULE_USERDEFINE[_output](),其中CURMODULE表示当前模块,可通过常量CURMODULE获取;USERDEFINE为自定义部分。如果函数名以“_output”结尾,则会在模板输出前调用,否则会在模块执行前调用。
举个例子,假设我们需要在手机主题列表页面显示插件读取的主题前四张附件图片,可以编写如下代码:
// 全局嵌入点类
class mobileplugin_muquan_m_seting {
// 代码块
}
// 脚本嵌入点类
class mobileplugin_muquan_m_seting_forum extends mobileplugin_muquan_m_seting{
// 读取前面四张附件图片的方法,用于显示在主题列表中
public function forumdisplay_threadsimglist_output(){
// 代码块
}
// 其他方法
}
其中,forumdisplay_threadsimglist_output 方法是为了自定义嵌入点而创建的。这里的 forumdisplay 是 CURMODULE,threadsimglist 是 USERDEFINE。
在模板中的嵌入点则为:
结合官方文档,相信开发者们已经掌握了如何自定义前端嵌入点的方法。如果有任何疑问或遇到问题,欢迎留言交流。
// 全局嵌入点类
class mobileplugin_muquan_m_seting {
// 代码块
}
// 脚本嵌入点类
class mobileplugin_muquan_m_seting_forum extends mobileplugin_muquan_m_seting{
// 读取前面四张附件图片的方法,用于显示在主题列表中
public function forumdisplay_threadsimglist_output(){
// 代码块
}
// 其他方法
}