1

插件的创建和配置

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'],方法参数


甄城
1.2k 声望35 粉丝

引用和评论

0 条评论