找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 529|回复: 0

[扩展开发] Discuz 插件开发【旗舰版】 二次开发 - 在线手册

[复制链接]
发表于 2025-7-2 17:00:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区

您需要 登录 才可以下载或查看,没有账号?立即注册

×
验证插件二次开发

本功能由PHP+MYSQL语言开发,无缝对接新秀网络验证系统,采用独立入口文件、类文件、第三方类文件库进行调用开发。所有功能实现及控制均采用api接口操作,数据输出形式为JSON、XML两种常见形式,达到毫秒级数据快速交换功能。

1、插件开发是结合新秀网络验证系统进行的二次开发,不能独立使用;

2、插件开发遵循Discuz、新秀网络验证、PHP语言规范开发;

3、插件开发适用于新秀网络验证系统旗舰版ver1.0.0版本以后;

4、本功能与新秀网络验证系统、扩展框架系统,代码相互独立,但功能同时执行;

5、插件开发可使用Discuz内置函数、新秀网络验证内置函数、PHP函数。

适用环境:php版本>7.1、Mysql版本>5.7以上、Discuz版本>3.5。

= Discuz资料库  = Discuz插件开发文档  = 开发交流  =  BUG反馈  =  QQ客服:3188639  QQ交流群:281079920

  a: q- @1 v; G+ A; \( N
接口开发常用函数

1、DB数据库操作函数    /*常用MYSQL数据库操作命令,增、减、改、查功能函数。*/

2、新秀网络验证数据库对照表    /*新秀网络验证系统内部,所有数据库表及说明*/

3、Discuz官方数据库对照表  /*Discuz官方数据库表,包括discuz、UCente数据库字典。*/

4、Discuz基础框架、类、函数    /*包含Discuz官方基础框架、类、函数、方法使用说明。*/

5、新秀网络基础框架类、函数    /*包含新秀网络验证基础框架、类、函数、方法使用说明。*/

2 q( ?7 g; A% S; Y7 g
使 用 简 介

1、插件开发演示文件下载(IP地址查询)

ip.zip (10.6 KB, 下载次数: 118)

2、插件开发演示文件目录说明

xinxiuvip_network \\新秀网络验证应用中心插件主目录

—libs \\自定义类存放目录 (用于开发者存放第三方类、自定义类)

——libs_ip.php \\自定义方法库开发文件 (自定义开发接口方法库)

—function \\自定义方法存放目录 (用于开发者存放自定义开发接口类和方法)

——function_ip.php \\自定义方法类开发文件 (自定义开发接口方法类)

—plugins \\插件数据库代码存放目录 (用于开发者存放插件数据库执行代码)

—ip\\插件名目录

——extend_network.php \\设置插件数据库执行代码文件(数据新增、更新、删除,接口增加、删除功能,插件安装和卸载代码)

template/plugin/admin \\插件前端htm开发存放目录(根据discuz官方插件前台开发代码进行开发

—ip\\插件名目录

——ip.htm \\插件后台设置文件(根据discuz官方插件后台开发代码进行开发,并在插件设计页面自行增加插件设置文件入口)

ip.inc.php \\自定义接口入口开发文件

3、如何安装、开发、调试?

#1、下载演示文件后,上传至新秀网络验证插件根目录。discuz论坛插件根目录 \source\plugin\xinxiuvip_network\

#2、使用PHP代码编辑软件,对入口文件 ip.inc.php 和 自定义方法类文件 function_ip.php 等进行开发。

#3、如需新增接口文件,请根据演示文件,修改 “ip” 为您想要的文件名,但不能与新秀框架插件内文件名冲突,且开发的接口方法,不能与新秀框架冲突

#4、如何发布自己开发的插件并获取一定收益,请联系客服QQ:

#5、功能代码开发完成,组装调试接口:


//根据演示文件中组装url接口地址

http://demo.xinxiuvip.com/plugin.php?id=xinxiuvip_network:ip&action=ip_cha&key=123456&ip=14.21.97.153&soft=48EEBF83657DFEC3


[PHP] 纯文本查看 复制代码
{
  "code": 200,
  "result": "OK",
  "count": 2,
  "data": {
    "ip": "14.21.97.153",
    "dizhi": "- 广东"
  },
  "sqltime": "0.04s"
}

ip.inc.php入口文件代码实例
[PHP] 纯文本查看 复制代码
<?php

#========================================
#以下两行代码,用于开发环境下代码错误提示,可根据提示信息进行代码检查,无误后即可注释掉!
//ini_set("display_errors", "on");
//error_reporting(E_ALL);
#========================================

#========================================
#防止游客直接输入网址进行访问,权限检测,勿动!!!
if (!defined('IN_DISCUZ')) {
    exit('Access Denied');
}
#========================================

#========================================
#引入自定义开发类文件,此文件保存位置 'function/ip' 代表 function/function_ip.php 如需修改请按格式进行!
C::import('function/ip', 'plugin/xinxiuvip_network', false);//注意这里插件开发和接口二次开发不同!
$api = new function_ip();//实例化function_ip.php类操作,实例化后可用$api->调用function_ip.php中的类方法!
#========================================


#此处为入口文件,根据接口方法,调用对应类方法。
switch ($api->action) { //$api->action 获取入口方法,勿动!!!

    #========================================
    case 'ip_cha': // 判断是否是此方法,如果是则进入下一步!
        $ip = web_client::safe_check('ip', true); //判断参数传输,params为参数名称,iscore为是否是必填项(true为必填,false为可空)
        $api->ip_cha($ip);//调用function_ip.php实例化后类方法,根据类方法设置传入参数。
        break;
    #此处代码根据接口开发需求,可以无限添加循环。
    #========================================

    #========================================
    #此处代码是判断接口输入是否正确。勿删!!!
    default:
        web_output::json_output(400, 'error010');
        break;
    #========================================
}


# t5 f* Z! c/ q0 v& M* A4 |
function_ip.php自定义方法类代码实例
[PHP] 纯文本查看 复制代码
<?php

#========================================
#以下两行代码,用于开发环境下代码错误提示,可根据提示信息进行代码检查,无误后即可注释掉!
//ini_set("display_errors", "on");
//error_reporting(E_ALL);
#========================================

#========================================
#防止游客直接输入网址进行访问,权限检测,勿动!!!
if (!defined('IN_DISCUZ')) {
    exit('Access Denied');
}
#========================================

#========================================
#引入核心系统类,勿删!!!
C::import('class/plugin', 'plugin/xinxiuvip_network', false);
#========================================


#如何引入自定义系统类?
#1、将自定义核心类、第三方核心类上传至extend文件夹下;
#2、通过 C::import 、 require_once 两种引入形式引入第三方核心类;
#3、在下方方法中使用 web_agent_config::convertip_tiny($ip, $ipdatafile); 进行调用,具体功能看libs_ip封装代码;
C::import('libs/ip', 'plugin/xinxiuvip_network', false);//如果没有自定义类库,请将此处注释掉!
#注释结束


class function_ip extends class_plugin
{
    public $action_all = array('ip_cha');//所有接口必填,用逗号隔开!!!除以下key、adminkey所包含以外,未包含的接口都是通过token令牌进行访问。
    public $function_action_key = array('ip_cha');//使用key密钥访问的接口
    public $function_action_adminkey = array();//使用管理密钥adminkey访问的接口

    /**
     * 构造方法 __construct() 是在实例化对象时被自动调用
     * 用途:可以用于初始化程序(可以给成员属性赋值,也可以调用成员方法)
     */
    public function __construct()
    {
        global $_G;
        $_G['network_soft_config']; //当前软件配置,可以直接调用
        $_G['network_plugin_config']; //当前插件配置,可以直接调用
        parent::__construct();//注意这里和接口二次开发不同
    }

    #========================================
    #此处为标准类方法,可根据DISCUZ、新秀网络验证内置函数进行调用,也可使用PHP官方函数进行操作。
    public function ip_cha($ip)
    {
        #-具体DISCUZ内置函数、新秀网络验证内置函数、PHP函数,论坛相应帖子有专门介绍。
        $tinyipfile = DISCUZ_ROOT . './data/ipdata/tinyipdata.dat';

        $data = libs_ip::convertip_tiny($ip, $tinyipfile);//调用lib自定义封装类库示例;

        $data_array = array(
            'ip' => $ip,
            'dizhi' => $data,
        );


        #========================================
        #嵌入插件开发钩子,注意:此扩展方法在应用中心扩展文件中使用‘extend_plugin.php’;
        web_client::class_hook('hook_ip_cha', array('ip' => $ip));

        /*
         * 下面是插件拓展对应的方法
         * 注意class_hook中的'hook_ip_cha' 就是扩展文件中的方法名!
         *
        public function hook_ip_cha($ip){
            var_dump($ip);
        }
        */
        #========================================



        $data ? web_output::json_output(200, 'OK', $data_array) : web_output::json_output(400, '请检查IP地址是否正确!');
        #-具体DISCUZ内置函数、新秀网络验证内置函数、PHP函数,论坛相应帖子有专门介绍。
    }
    #========================================

    /**
     * 析构方法 __destruct() 是在对象被销毁时自动调用
     * 用途:可以进行资源的释放操作或文件的关闭操作或信息保存操作
     */
    public function __destruct()
    {
        return parent::__destruct(); // TODO: 析构方法
    }

}
" _9 J( u3 Y9 G$ x$ D; A
libs_ip.php自定义方法类库代码实例
[PHP] 纯文本查看 复制代码
<?php

#以下两行代码,用于开发环境下代码错误提示,可根据提示信息进行代码检查,无误后即可注释掉!
//ini_set("display_errors", "on");
//error_reporting(E_ALL);
#注释结束

#引入验证自带核心系统类,勿删!!!
C::import('class/xinxiu', 'plugin/xinxiuvip_network', false);
#注释结束

class libs_ip
{
    /**
     * 自定义方法类库,用于扩展系统功能!
     * 1、在function_ip.php中引用此类库,直接调用方法即可!
     * 2、引用代码:C::import('lib/ip', 'plugin/xinxiuvip_network_plugin', false);//引用自定义类库!
     * 3、此方法为纯静态方法,无需实例化,可直接调用!
     * 4、调用代码:web_agent_config::convertip_tiny($ip,$tinyipfile);//调用lib自定义封装类库示例!
     */
      public static function convertip_tiny($ip, $ipdatafile) {
        static $fp = NULL, $offset = array(), $index = NULL;

        $ipdot = explode('.', $ip);
        $ip    = pack('N', ip2long($ip));

        $ipdot[0] = (int)$ipdot[0];
        $ipdot[1] = (int)$ipdot[1];

        if($fp === NULL && $fp = @fopen($ipdatafile, 'rb')) {
            $offset = @unpack('Nlen', @fread($fp, 4));
            $index  = @fread($fp, $offset['len'] - 4);
        } elseif($fp == FALSE) {
            return  '- Invalid IP data file';
        }

        $length = $offset['len'] - 1028;
        $start  = @unpack('Vlen', $index[$ipdot[0] * 4] . $index[$ipdot[0] * 4 + 1] . $index[$ipdot[0] * 4 + 2] . $index[$ipdot[0] * 4 + 3]);

        for ($start = $start['len'] * 8 + 1024; $start < $length; $start += 8) {

            if ($index[$start] . $index[$start + 1] . $index[$start + 2] . $index[$start + 3] >= $ip) {
                $index_offset = @unpack('Vlen', $index[$start + 4] . $index[$start + 5] . $index[$start + 6] . "\x0");
                $index_length = @unpack('Clen', $index[$start + 7]);
                break;
            }
        }

        @fseek($fp, $offset['len'] + $index_offset['len'] - 1024);
        if($index_length['len']) {
            return '- '.@fread($fp, $index_length['len']);
        } else {
            return '- Unknown';
        }

    }
}


* q" N/ n8 J9 \: K
ip.htm插件后台设置文件
[HTML] 纯文本查看 复制代码
<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <title>插件设置页面</title>
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link href="/source/plugin/xinxiuvip_network/template/res/layui/css/layui.css" rel="stylesheet">
    <link href="/source/plugin/xinxiuvip_network/template/res/adminui/dist/css/admin.css" rel="stylesheet">
</head>

<style>
    body {
        background-color: #ffffff;
    }

    .layui-form-label {
        width: 120px !important;
    }
</style>

<body>

    <div class="layui-fluid">
        <div class="layui-row layui-col-space15">
            <div class="layui-form layui-form-pane" id="form" lay-filter="form" action="">

                <table class="layui-table" id="tips">
                    <thead>
                        <tr>
                            <th class="layui-bg-gray">插件设置页面</th>
                        </tr>
                    </thead>
                    <tbody>
                        <tr>
                            <td>
                                <ul>
                                    <li>此页面为插件后台设置页面,请根据具体文档进行设置。
                                        <a href="http://www.xinxiuvip.com/forum.php?mod=viewthread&tid=649"
                                            target="_blank">【插件开发文档】</a>
                                    </li>
                                </ul>
                            </td>
                        </tr>
                    </tbody>
                </table>

                <div class="layui-form-item adminj-sort-item" style="width: 100%;">
                    <label class="layui-form-label">radio开关类</label>
                    <div class="layui-input-inline" style="width: 30%;">
                        <!--{if $plugin_config['status'] == 0}-->
                        <input name="status" type="radio" value="0" checked="" title="正常" lay-skin="primary">
                        <input name="status" type="radio" value="1" title="禁止" lay-skin="primary">
                        <input name="status" type="radio" value="2" title="其他" lay-skin="primary">
                        <!--{elseif $plugin_config['status'] == 1}-->
                        <input name="status" type="radio" value="0" title="正常" lay-skin="primary">
                        <input name="status" type="radio" value="1" checked="" title="禁止" lay-skin="primary">
                        <input name="status" type="radio" value="2" title="其他" lay-skin="primary">
                        <!--{elseif $plugin_config['status'] == 2}-->
                        <input name="status" type="radio" value="0" title="正常" lay-skin="primary">
                        <input name="status" type="radio" value="1" title="禁止" lay-skin="primary">
                        <input name="status" type="radio" value="2" checked="" title="其他" lay-skin="primary">
                        <!--{/if}-->
                    </div>
                    <div class="layui-form-mid layui-word-aux">radio开关类注释</div>
                </div>

                <div class="layui-form-item adminj-sort-item" style="width: 100%;">
                    <label class="layui-form-label">开关组件</label>
                    <div class="layui-input-inline" style="width: 30%;">
                        <!--{if $plugin_config['switch'] == 1}-->
                        <input type="checkbox" name="switch" lay-skin="switch" value="1" checked lay-text="开启|关闭">
                        <!--{else}-->
                        <input type="checkbox" name="switch" lay-skin="switch" value="1" lay-text="开启|关闭">
                        <!--{/if}-->
                    </div>
                    <div class="layui-form-mid layui-word-aux">开关组件注释</div>
                </div>

                <div class="layui-form-item adminj-sort-item" style="width: 100%;">
                    <label class="layui-form-label">复选框</label>
                    <div class="layui-input-inline" style="width: 30%;">
                        <!--{if is_array($plugin_config['checkbox'])}-->
                        <!--{if strpos(','.implode(',', $plugin_config['checkbox']).',', ',0,') !== false}-->
                        <input type="checkbox" name="checkbox[]" value="0" title="选项1" checked lay-skin="primary">
                        <!--{else}-->
                        <input type="checkbox" name="checkbox[]" value="0" title="选项1" lay-skin="primary">
                        <!--{/if}-->
                        <!--{if strpos(','.implode(',', $plugin_config['checkbox']).',', ',1,') !== false}-->
                        <input type="checkbox" name="checkbox[]" value="1" title="选项2" checked lay-skin="primary">
                        <!--{else}-->
                        <input type="checkbox" name="checkbox[]" value="1" title="选项2" lay-skin="primary">
                        <!--{/if}-->
                        <!--{if strpos(','.implode(',', $plugin_config['checkbox']).',', ',2,') !== false}-->
                        <input type="checkbox" name="checkbox[]" value="2" title="选项3" checked lay-skin="primary">
                        <!--{else}-->
                        <input type="checkbox" name="checkbox[]" value="2" title="选项3" lay-skin="primary">
                        <!--{/if}-->
                        <!--{if strpos(','.implode(',', $plugin_config['checkbox']).',', ',3,') !== false}-->
                        <input type="checkbox" name="checkbox[]" value="3" title="选项4" checked lay-skin="primary">
                        <!--{else}-->
                        <input type="checkbox" name="checkbox[]" value="3" title="选项4" lay-skin="primary">
                        <!--{/if}-->
                        <!--{if strpos(','.implode(',', $plugin_config['checkbox']).',', ',4,') !== false}-->
                        <input type="checkbox" name="checkbox[]" value="4" title="选项5" checked lay-skin="primary">
                        <!--{else}-->
                        <input type="checkbox" name="checkbox[]" value="4" title="选项5" lay-skin="primary">
                        <!--{/if}-->
                        <!--{else}-->
                        <input type="checkbox" name="checkbox[]" value="0" title="选项1" lay-skin="primary">
                        <input type="checkbox" name="checkbox[]" value="1" title="选项2" lay-skin="primary">
                        <input type="checkbox" name="checkbox[]" value="2" title="选项3" lay-skin="primary">
                        <input type="checkbox" name="checkbox[]" value="3" title="选项4" lay-skin="primary">
                        <input type="checkbox" name="checkbox[]" value="4" title="选项5" lay-skin="primary">
                        <!--{/if}-->
                    </div>
                    <div class="layui-form-mid layui-word-aux">复选框组件注释</div>
                </div>
                <div class="layui-form-item adminj-sort-item" style="width: 100%;">
                    <label class="layui-form-label">滑块组件</label>
                    <div class="layui-input-inline" style="width: 30%;">
                        <div id="slider-demo" style="margin-top: 15px;"></div>
                        <input type="slider" name="slider" value="{$plugin_config['slider']}" placeholder="请设置滑块值"
                            autocomplete="off" class="layui-input" style="display:none;">
                    </div>
                    <div class="layui-form-mid layui-word-aux">滑块组件注释</div>
                </div>


                <div class="layui-form-item adminj-sort-item" style="width: 100%;">
                    <label class="layui-form-label">颜色选择器</label>
                    <div class="layui-input-inline" style="width: 10%;">
                        <div style="display: flex; align-items: center;">
                            <input type="color" name="color" value="{$plugin_config['color']}" placeholder="请选择颜色"
                                autocomplete="off" class="layui-input" id="colorPicker" style="height: 38px;">
                            <span style="margin-left: 10px; font-size: 12px; color: #999;">点击选择颜色</span>
                        </div>
                    </div>
                    <div class="layui-form-mid layui-word-aux" style="margin-left: 20%;">颜色选择器组件注释</div>
                </div>

                <div class="layui-form-item adminj-sort-item" style="width: 100%;">
                    <label class="layui-form-label">text文本</label>
                    <div class="layui-input-inline" style="width: 30%;">
                        <input type="text" name="text" value="{$plugin_config['text']}" autocomplete="off"
                            class="layui-input" style="width: 99%;">
                    </div>
                    <div class="layui-form-mid layui-word-aux">text文本注释</div>
                </div>

                <div class="layui-form-item adminj-sort-item" style="width: 100%;">
                    <label class="layui-form-label">text文本验证</label>
                    <div class="layui-input-inline" style="width: 30%;">
                        <input type="password" name="password" value="{$plugin_config['password']}" autocomplete="off"
                            class="layui-input" style="width: 99%;">
                    </div>
                    <div class="layui-form-mid layui-word-aux">text文本password密码隐藏类验证注释</div>
                </div>

                <div class="layui-form-item adminj-sort-item" style="width: 100%;">
                    <label class="layui-form-label">
                        textarea文本
                    </label>
                    <div class="layui-input-inline" style="width: 30%;">
                        <textarea class="layui-textarea" name="textarea" style="width: 99%;">{$plugin_config['textarea']}
                                                </textarea>
                    </div>
                    <div class="layui-form-mid layui-word-aux">
                        textarea文本域注释
                    </div>
                </div>
                <div class="layui-form-item adminj-sort-item" style="width: 100%;">
                    <label class="layui-form-label">select下拉框</label>
                    <div class="layui-input-inline" style="width: 30%;">
                        <select name="select" lay-search>
                            <option value="">请选择</option>
                            <!--{if $plugin_config['select'] == 1}-->
                            <option value="1" selected>value为1</option>
                            <!--{else}-->
                            <option value="1">value为1</option>
                            <!--{/if}-->
                            <!--{if $plugin_config['select'] == 2}-->
                            <option value="2" selected>value为2</option>
                            <!--{else}-->
                            <option value="2">value为2</option>
                            <!--{/if}-->
                            <!--{if $plugin_config['select'] == 3}-->
                            <option value="3" selected>value为3</option>
                            <!--{else}-->
                            <option value="3">value为3</option>
                            <!--{/if}-->
                        </select>
                    </div>
                    <div class="layui-form-mid layui-word-aux">select下拉框注释</div>
                </div>

                <div class="layui-form-item adminj-sort-item" style="width: 100%;">
                    <label class="layui-form-label">时间选择</label>
                    <div class="layui-input-inline" style="width: 30%;">
                        <input type="text" name="groupline" value="{$plugin_config['groupline']}" id="form-date"
                            placeholder="yyyy-MM-dd HH:mm:ss" autocomplete="off" class="layui-input"
                            style="width: 99%;">
                    </div>
                    <div class="layui-form-mid layui-word-aux">时间选择注释</div>
                </div>

                <div class="layui-form-item adminj-sort-item" style="width: 100%;">
                    <label class="layui-form-label">
                        选择积分
                    </label>
                    <div class="layui-input-inline" style="width: 30%;">
                        <select name="credits" lay-search>
                            <!--{if $plugin_config['credits'] == false}-->
                            <option value="">第一次设置,需提交一次!</option>
                            <!--{else}-->
                            {$plugin_config['credits']}
                            <!--{/if}-->

                        </select>
                    </div>
                    <div class="layui-form-mid layui-word-aux">
                        内置选择积分类型。
                    </div>
                </div>
                <div class="layui-form-item adminj-sort-item" style="width: 100%;">
                    <label class="layui-form-label">
                        选择积分2
                    </label>
                    <div class="layui-input-inline" style="width: 30%;">
                        <select name="credits2" lay-search>
                            <!--{if $plugin_config['credits2'] == false}-->
                            <option value="">第一次设置,需提交一次!</option>
                            <!--{else}-->
                            {$plugin_config['credits2']}
                            <!--{/if}-->
                        </select>
                    </div>
                    <div class="layui-form-mid layui-word-aux">
                        内置选择积分类型。
                    </div>
                </div>
                <div class="layui-form-item adminj-sort-item" style="width: 100%;">
                    <label class="layui-form-label" style="margin-top: -3px;">
                        选择会员组
                    </label>
                    <div class="layui-input-inline" style="width: 30%;">
                        <select name="groupids" lay-ignore="" class="layui-select-group layui-select-tips"
                            multiple="multiple" data-placeholder="" data-dropdown-css-class="select2-purple"
                            style="width: 99%;height: 200px;">
                            <!--{if $plugin_config['groupids'] == false}-->
                            <option value="" selected>第一次设置,需提交一次!</option>
                            <!--{else}-->
                            {$plugin_config['groupids']}
                            <!--{/if}-->

                        </select>
                    </div>
                    <div class="layui-form-mid layui-word-aux">
                        内置选择会员组。
                    </div>
                </div>

                <div class="layui-form-item adminj-sort-item" style="width: 100%;">
                    <label class="layui-form-label" style="margin-top: -3px;">
                        选择会员组12
                    </label>
                    <div class="layui-input-inline" style="width: 30%;">
                        <select name="groupids1" lay-ignore="" class="layui-select-group layui-select-tips"
                            multiple="multiple" data-placeholder="" data-dropdown-css-class="select2-purple"
                            style="width: 99%;height: 200px;">
                            <!--{if $plugin_config['groupids1'] == false}-->
                            <option value="" selected>第一次设置,需提交一次!</option>
                            <!--{else}-->
                            {$plugin_config['groupids1']}
                            <!--{/if}-->
                        </select>
                    </div>
                    <div class="layui-form-mid layui-word-aux">
                        内置选择会员组。
                    </div>
                </div>

                <div class="layui-form-item adminj-sort-item" style="width: 100%;">
                    <label class="layui-form-label" style="margin-top: -3px;">
                        选择会员组3
                    </label>
                    <div class="layui-input-inline" style="width: 30%;">
                        <select name="groupids_123" lay-ignore="" class="layui-select-group layui-select-tips"
                            multiple="multiple" data-placeholder="" data-dropdown-css-class="select2-purple"
                            style="width: 99%;height: 200px;">
                            <!--{if $plugin_config['groupids_123'] == false}-->
                            <option value="" selected>第一次设置,需提交一次!</option>
                            <!--{else}-->
                            {$plugin_config['groupids_123']}
                            <!--{/if}-->
                        </select>
                    </div>
                    <div class="layui-form-mid layui-word-aux">
                        内置选择会员组。
                    </div>
                </div>

                <div class="layui-form-item adminj-sort-item" style="width: 100%;">
                    <label class="layui-form-label" style="margin-top: -3px;">
                        选择论坛板块
                    </label>
                    <div class="layui-input-inline" style="width: 30%;">
                        <select name="forum" lay-ignore="" class="layui-select-group layui-select-tips"
                            multiple="multiple" data-placeholder="" data-dropdown-css-class="select2-purple"
                            style="width: 99%;height: 200px;">
                            <!--{if $plugin_config['forum'] == false}-->
                            <option value="" selected>第一次设置,需提交一次!</option>
                            <!--{else}-->
                            {$plugin_config['forum']}
                            <!--{/if}-->
                        </select>
                    </div>
                    <div class="layui-form-mid layui-word-aux">
                        内置选择论坛板块。
                    </div>
                </div>

                <div class="layui-form-item adminj-sort-item" style="width: 100%;">
                    <label class="layui-form-label" style="margin-top: -3px;">
                        选择论坛板块1
                    </label>
                    <div class="layui-input-inline" style="width: 30%;">
                        <select name="forum1" lay-ignore="" class="layui-select-group layui-select-tips"
                            multiple="multiple" data-placeholder="" data-dropdown-css-class="select2-purple"
                            style="width: 99%;height: 200px;">
                            <!--{if $plugin_config['forum1'] == false}-->
                            <option value="" selected>第一次设置,需提交一次!</option>
                            <!--{else}-->
                            {$plugin_config['forum1']}
                            <!--{/if}-->
                        </select>
                    </div>
                    <div class="layui-form-mid layui-word-aux">
                        内置选择论坛板块。
                    </div>
                </div>

                <div class="layui-form-item adminj-sort-item" style="width: 100%;">
                    <label class="layui-form-label" style="margin-top: -3px;">
                        DIY下拉菜单
                    </label>
                    <div class="layui-input-inline" style="width: 30%;">
                        <select name="multiple" lay-ignore="" class="layui-select-group layui-select-tips"
                            multiple="multiple" data-placeholder="" data-dropdown-css-class="select2-purple"
                            style="width: 99%;height: 200px;" lay-search="true">
                            <option value="">空</option>
                            <optgroup label="选择级别">
                                <!--{if is_array($plugin_config['multiple']) && in_array('9', $plugin_config['multiple'])}-->
                                <option value="9" selected>一级</option>
                                <!--{else}-->
                                <option value="9">一级</option>
                                <!--{/if}-->
                                <!--{if is_array($plugin_config['multiple']) && in_array('10', $plugin_config['multiple'])}-->
                                <option value="10" selected>二级</option>
                                <!--{else}-->
                                <option value="10">二级</option>
                                <!--{/if}-->
                                <!--{if is_array($plugin_config['multiple']) && in_array('11', $plugin_config['multiple'])}-->
                                <option value="11" selected>三级</option>
                                <!--{else}-->
                                <option value="11">三级</option>
                                <!--{/if}-->
                                <!--{if is_array($plugin_config['multiple']) && in_array('12', $plugin_config['multiple'])}-->
                                <option value="12" selected>四级</option>
                                <!--{else}-->
                                <option value="12">四级</option>
                                <!--{/if}-->
                                <!--{if is_array($plugin_config['multiple']) && in_array('13', $plugin_config['multiple'])}-->
                                <option value="13" selected>五级</option>
                                <!--{else}-->
                                <option value="13">五级</option>
                                <!--{/if}-->
                                <!--{if is_array($plugin_config['multiple']) && in_array('14', $plugin_config['multiple'])}-->
                                <option value="14" selected>六级</option>
                                <!--{else}-->
                                <option value="14">六级</option>
                                <!--{/if}-->
                                <!--{if is_array($plugin_config['multiple']) && in_array('15', $plugin_config['multiple'])}-->
                                <option value="15" selected>七级</option>
                                <!--{else}-->
                                <option value="15">七级</option>
                                <!--{/if}-->
                            </optgroup>
                            <optgroup label="自定义用户组">
                                <!--{if is_array($plugin_config['multiple']) && in_array('16', $plugin_config['multiple'])}-->
                                <option value="16" selected>实习版主</option>
                                <!--{else}-->
                                <option value="16">实习版主</option>
                                <!--{/if}-->
                                <!--{if is_array($plugin_config['multiple']) && in_array('17', $plugin_config['multiple'])}-->
                                <option value="17" selected>网站编辑</option>
                                <!--{else}-->
                                <option value="17">网站编辑</option>
                                <!--{/if}-->
                                <!--{if is_array($plugin_config['multiple']) && in_array('18', $plugin_config['multiple'])}-->
                                <option value="18" selected>信息监察员</option>
                                <!--{else}-->
                                <option value="18">信息监察员</option>
                                <!--{/if}-->
                                <!--{if is_array($plugin_config['multiple']) && in_array('19', $plugin_config['multiple'])}-->
                                <option value="19" selected>审核员</option>
                                <!--{else}-->
                                <option value="19">审核员</option>
                                <!--{/if}-->
                            </optgroup>
                        </select>
                    </div>
                    <div class="layui-form-mid layui-word-aux">
                        内置选择会员组。
                    </div>
                </div>


                <div class="layui-form-item adminj-sort-item">
                    <div class="layui-input-block">
                        <button type="submit" class="layui-btn" lay-submit="" lay-filter="postButton" id="postButton">
                            立即修改
                        </button>
                    </div>
                </div>
            </div>
        </div>
    </div>
    <script src="/source/plugin/xinxiuvip_network/template/res/layui/layui.js?t=1233"></script>
    <script src="/source/plugin/xinxiuvip_network/template/res/utils.js?=1"></script>

    <script>
        layui.use(['form', 'layer', 'jquery', 'laydate', 'slider', 'colorpicker', 'rate'], function () {
            var form = layui.form;
            var layer = layui.layer;
            var $ = layui.jquery;
            var laydate = layui.laydate;
            var slider = layui.slider;
            var colorpicker = layui.colorpicker;
            var rate = layui.rate;

            // 渲染所有表单元素
            form.render(); // 特别渲染select元素


            laydate.render({
                elem: '#form-date',
                type: 'datetime',
                fullPanel: true // 2.8+
            });

            // 初始化滑块组件
            slider.render({
                elem: '#slider-demo',
                min: 0,
                max: 100,
                value: "{$plugin_config['slider']}",
                change: function (value) {
                    $('[name="slider"]').val(value);
                }
            });

            form.on('submit(postButton)', function (data) {
                var field = data.field; // 获取表单字段值


                // 对所有表单字段进行HTML实体编码(仅处理字符串类型)
                for (var key in field) {
                    if (field.hasOwnProperty(key) && typeof field[key] === 'string') {
                        field[key] = replaceHtmlEntities(field[key]);
                    }
                }

                function getQueryParam(param) {
                    const search = window.location.search || window.location.hash.split('?')[1] || '';
                    const params = new URLSearchParams(search);
                    return params.get(param);
                }
                const dir = getQueryParam('dir');

                $.post('plugin.php?id=xinxiuvip_network:plugin_admin&action=api&dir=' + dir, {
                    data: field,
                }, function (jsondata, textStatus, jqXHR) {
                    if (jsondata.code === 200) {
                        layer.msg('[ ' + dir + ' ] 插件设置成功!', {
                            icon: 1
                        });
                    } else {
                        layer.msg('[ ' + dir + ' ] 插件设置失败!', {
                            icon: 2
                        });
                    }
                    return false;
                });
            });
        });
    </script>
</body>

</html>

  Q6 W$ d; q% N/ o9 o5 j
extend_network.php插件安装卸载配置实例
[PHP] 纯文本查看 复制代码
<?php

if (!defined('IN_DISCUZ')) {
    exit('Access Denied');
}

C::import('class/xinxiu', 'plugin/xinxiuvip_network', false);

class extend_network 
{

    public function __construct() //构造方法
    {
        //parent::__construct();
    }
    /**
     * ##创建插件的安装代码
     * 1、此处代码以创建数据库表为主,提前创建插件需要的数据库表及字段!
     * 2、在这里也可以添加一些插件自定义php代码,系统自动执行!
     * 3、如果不需要执行代码,直接返回true即可,实例:return true;
     */
    public function hook_plugin_install() //插件安装代码
    {
        $sql = <<<EOF
        CREATE TABLE IF NOT EXISTS `pre_xinxiuvip_plugin_ip` (
          `id` BIGINT(16) unsigned NOT NULL AUTO_INCREMENT,
          `text1` longtext NOT NULL,
          PRIMARY KEY (`id`)
        ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 ;
EOF;
        $sql ? web_mysql::xinxiuvip_plugin_run_sql($sql) : ''; //执行上面的多行SQL代码;
        return true; //创建结束
    }
    /**
     * ##更新插件的更新代码
     * 1、此处代码以更新数据库表为主,对安装的数据库表和字段进行更新!
     * 2、在这里也可以添加一些插件自定义php代码,系统自动执行!
     * 3、如果不需要执行代码,直接返回true即可,实例:return true;
     */
    public function hook_plugin_upgrade() //插件更新代码
    {
        $sql = <<<EOF
        CREATE TABLE IF NOT EXISTS `pre_xinxiuvip_plugin_ip` (
          `id` BIGINT(16) unsigned NOT NULL AUTO_INCREMENT,
          `text1` longtext NOT NULL,
          PRIMARY KEY (`id`)
        ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 ;
EOF;
        $sql ? web_mysql::xinxiuvip_plugin_run_sql($sql) : ''; //执行上面的多行SQL代码;
        return true; //更新结束
    }
    /**
     * ##卸载插件的卸载代码
     * 1、此处代码以卸载数据库表为主,对安装的数据库表和字段进行卸载!
     * 2、在这里也可以添加一些插件自定义php代码,系统自动执行!
     * 3、如果不需要执行代码,直接返回true即可,实例:return true;
     */
    public function hook_plugin_uninstall() //插件卸载代码
    {
        $sql = <<<EOF
        DROP TABLE IF EXISTS `pre_xinxiuvip_plugin_ip`;
EOF;
        $sql ? web_mysql::xinxiuvip_plugin_run_sql($sql) : ''; //执行上面的多行SQL代码;
        return true; //更新结束
    }
    /**
     * ##安装插件的接口代码
     * 1、此处代码以添加插件接口为主,对插件封装的接口,添加到数据库!
     * 2、如果不需要添加任何接口信息,直接返回false即可,实例:return false;
     */
    public function hook_plugin_actions_install() //插件安装接口代码
    {
        $actions_array = array(
            array(
                'type' => 'ip模块',//插件模块
                'name' => '查询ip地址',//接口名称
                'actions' => 'ip_cha',//接口方法
                'url' => 'http://www.xinxiuvip.com/thread-556-1-1.html',//接口文档
            ),
            array(
                'type' => 'ip模块1',//插件模块
                'name' => '查询ip地址1',//接口名称
                'actions' => 'ip_cha1',//接口方法
                'url' => 'http://www.xinxiuvip.com/thread-556-1-1.html',//接口文档
            ),
        );
        return $actions_array;
    }
    /**
     * ##更新插件的接口代码
     * 1、此处代码以更新插件接口为主,对插件封装的接口,更新到数据库!
     * 2、如果不需要更新任何接口信息,直接返回false即可,实例:return false;
     */
    public function hook_plugin_actions_upgrade() //插件接口更新代码
    {
        $actions_array = array(
            array(
                'type' => 'ip模块2',//插件模块
                'name' => '查询ip地址2',//接口名称
                'actions' => 'ip_cha2',//接口方法
                'url' => 'http://www.xinxiuvip.com/thread-556-1-1.html',//接口文档
            ),
        );
        return $actions_array;
    }
}

- D0 ^  q2 `7 j: Q/ S) ~$ g
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|新秀网络验证系统API[软著登字第13061951号] ( 豫ICP备2021033257号-1 )

GMT+8, 2026-1-7 07:19 , Processed in 0.282872 second(s), 69 queries , Redis On.

Powered by Discuz! X3.5 Licensed

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表
slot777
slot qris
atlas123
KAPAK123
MENARA123
BARONG123
VIRGO123
HORAS123
KAKEK123
ION123
PATEN123
SALAM123
TUYUL123
KUNGLO123
PINTU123
JOKI123
INTI123
JADI123
MENANGBET
JADIJP
ACEH123
TINGGIBET
SUMBER4D
PULANG4D
POLAMAXWIN
INTAN123
dingin4d
paten123
slotsultan
slot sultan