在插件开发中,会遇到需要把一些插件数据输出到模板的某个位置,可是系统自带的嵌入点又无法满足我们这个需求,这个时候就需要我们在模板中自定义一个嵌入点,并把插件数据输出到模板这个相应位置,要实现这个功能
我们先看下官方的文档,
文档中涉及这部分功能的原文如下:
函数名并不限于以上列表,您可以自定义,只要符合以下规则,函数就会在适当的地方被调用。
function CURMODULE_USERDEFINE[_output]()
CURMODULE 指明了此函数在哪个模块执行,可通过常量 CURMODULE 得到当前页面的 CURMODULE 值。 USERDEFINE 可自定义,如果函数名以“_output”结尾则会在模板输出前调用,否则会在模块执行前调用。 如:attachment_test() 函数会在论坛的下载附件的时候执行。 “_output”结尾的函数的第一个参数为数组,含义为 array('template' => 要输出的模板名, 'message' => showmessage 的文字) 如:以下函数将在登录的时候输出调试文字
function logging_test_output($a) { print_r($a); print_r($_POST); }
如果对discuz不太熟悉,通常看到这个会有点懵,我下面用一个简单的示例说明下
比如我们要向门户首页的模板中某个位置输出插件的数据
门户首页的链接通常是portal.php这样的,这样不容易看到CURMODULE 值,我们这样写portal.php&mod=index,后面加上这个参数,我们会发现访问还是门户首页,其实这个就是门户首页完整的路径了,
那门户首页的CURMODULE 值就是 “index”
如果想知道其他页面的CURMODULE 值是什么,可以在模板中写
<!--{eval debug(CURMODULE);}-->
这样就可以输出当前页面的CURMODULE 值了
我们获取了CURMODULE 值,就可以先自定义一个嵌入点名称了
<!--{hook/index_test}-->
这里index就是当前页面CURMODULE 值,test是你自己自定义的名称
定义完嵌入点名称,接下来我们就需要写hook.class.php文件中的内容了
<?php
if(!defined('IN_DISCUZ')) {
exit('Access Denied');
}
class plugin_hl_test {
}
class plugin_hl_test_portal extends plugin_hl_test {
function index_ads(){
//在这里输出插件数据
}
}
上面文件中hl_test 为你的插件名称
上面plugin_hl_test_portal 为首页所在的模块名为portal
至此,就可以在模板中指定位置插入插件的数据了。