插件的创建和配置
discuz在不同版本中获取url参数
2.0 $_G['gp_uid']
2.5 $_GET['uid']
插件都能实现那些功能?
用户功能:
页面显示嵌入点
前台功能入口
菜单选项模块
管理功能:
后台管理功能入口
数据功能:
论坛主题数据处理模
插件开发三种状态
文件
/config/config_global.php
变量
$_config['plugindeveler'] = 状态
状态
NULL:不开启插件开发模式,不开启嵌入点
1:开启插件开发默认,不开启嵌入点
2:开启插件开发模式,开启嵌入点
如何设计一个新插件
后台-》应用-》插件-》设计新插件-》新增一个插件
自定义模块
后台-》应用-》插件-》选择插件-》模块(新增一个插件的模块)
自定义变量
选定插件-》设计-》变量 ,按情况操作后,会出现左侧树形菜单中
嵌入点类型
1、页面嵌入点
作用:修改页面显示
页面嵌入点分为三种类型
1、全局页面嵌入点(一般以global作为前缀,出现在公共模板上)
运行位置:公共模板页面
2、普通页面嵌入点(一般以模块名作为前缀,例如:forum,出现在模块页面上)
运行位置:普通模块模板页面
3、输出前置页面嵌入点
运行位置:模块与模板间,处理数据
页面嵌入点类的命名规则
全局页面嵌入点类(必须)
class plugin_插件标识符{}
普通嵌入点类
class plugin_插件标识符_入口文件名{}
(例如:forum.php?mod=viewthread&tid=1)
页面嵌入点方法命名规则
全局页面嵌入点方法
function global_任意(){}
输出前置页面嵌入点方法(模块名就是mod后面的参数)
function 模块名_任意_output(){}
普通页面嵌入点方法
function 模块名_任意(){}
2、信息提示嵌入点
作用:修改showmessage()
3、广告嵌入点
作用:处理广告位数据
4、功能嵌入点
作用:处理主题,帖子,头像数据等
案例:创建一个页面插件类
后台-》应用-》插件-》模块-》模块类型选择【页面嵌入-普通版】-》xxx.class.php
进入插件的目录新建一个xxx.class.php文件
<?php
//全局嵌入点类(plugin_标识符)
class plugin_ppctest{
//全局页面嵌入点方法,必须写在全局嵌入点类里面,方法与嵌入点取名相同即可
function global_cpnav_extra1(){
//include template('ppctest:forum/ppctest');
return 'hello world!!!';
}
}
//普通嵌入点类(plugin_标识符_文件名),必须继承全局嵌入点类
//例如:forum.php?mod=viewthread&tid=1,文件名就是forum
class plugin_ppctest_forum extends plugin_ppctest{
//前置页面嵌入点,会在页面的最前面输出出来
//在<html>之前,所以前置页面嵌入点方法一般做数据处理使用
function index_sayhi_output(){
//一般做数据处理
global $_G;
$_G['member']['username'] = 'hehe';
}
//普通嵌入点方法取名,模块名打头,后面任意
//function 模块名_任意(){}
//例如下面的index模块的status_extra方法
function index_status_extra(){
return 'baidu';
}
}
页面嵌入点的两种返回值类型
字符串类型
示例:[string global_login_extra]
作用:普通数据显示
数组类型:列表数据显示(后面的那个/0是数组的索引值)
示例:[array forumdisplay_thread_subject/0]
作用:列表数据显示
插件模板的定义规则
用法:
include template(插件标识符:模块目录名/模块名称)
示例:
include template('ppctest:forum/baidu');
对应
插件目录/ppctest/template/forum/baidu.htm
注意:
在上面插件模板中,3.2的版本,直接在方法中include template可以输出至前端页面了,而这之前的版本,需要配合{block}标签,在include 进来的模板页面使用html代码,然后return $变量名出去,到前端使用
公共嵌入点
方法名:
common()
声明位置:
公共嵌入点类
调用位置:
所有嵌入点
参数使用:
无
//全局嵌入点类(plugin_标识符)
class plugin_ppctest{
//声明公共嵌入点,在所有方法执行之前执行,可以做一些常量,变量的处理
function common(){
global $_G;
$_G['zhencheng'] = 'hello wolrd!!!';
}
}
class plugin_ppctest_forum extends plugin_ppctest{
function index_status_extra(){
global $_G;//声明全局变量,为方便使用common方法里的定义的变量
return $_G['zhencheng'].'-baidu';
}
}
信息嵌入点使用
方法名:
模块名_任意名称_message()
声明位置:
脚本嵌入点类
调用位置:
当前脚本提示用户信息时
参数使用:
方法参数
//例如,在forum.php文件中加入如下一段代码
showmessage('info:这是一段提示信息','index.php');
//在嵌入类中写入如下代码
class plugin_ppctest_forum extends plugin_ppctest{
function index_test_message($p){
debug($p);
}
}
浏览器浏览forum.php就出现如下效果,说明可以自定义一些message的效果
Array
(
[param] => Array
(
[0] => info:这是一段提示信息
[1] => index.php
[2] => Array
(
)
[3] => Array
(
)
[4] => 0
)
)
广告嵌入点使用
方法名:
ad_广告嵌入点名称()
声明位置:
全局嵌入点类,脚本嵌入点类
调用位置:
对应的广告位
参数使用:
方法参数
//下面用全局嵌入点类说明
//全局嵌入点类(plugin_标识符)
class plugin_ppctest{
//方法ad_headerbanner通过开启插件配置选项查询到的
function ad_headerbanner(){
return '<a href="www.baidu.com">baidu</a>';
}
文本解析嵌入点使用
方法名:
discuzcode()
声明位置:
全局嵌入点类
调用位置:
主题文本解析时
参数使用:
$_G['discuzcodemessage'],方法参数
//全局嵌入点类(plugin_标识符)
class plugin_ppctest{
function discuzcode(){
global $_G;
//下面代码将会在每个帖子后面加上”————zhencheng“
$_G['discuzmessage'].='————zhencheng';
}
}
主题删除嵌入点使用
方法名:
deletethread()
声明位置:
全局嵌入点类
调用位置:
主题被删除前,后时
参数使用:
$_G['deletethreadtids'],方法参数
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。