Discuz教程网

discuzX2插件制作教程__最菜鸟级别的入门坎

[复制链接]
authicon 马甲2号 发表于 2012-11-9 10:41:34 | 显示全部楼层 |阅读模式
一、开发插件所需资料与工具
           1、DiscuzX2 插件机制   wiki/#.E6.8F.92.E4.BB.B6.E6.9C.BA.E5.88.B6
           2、语言包编码转换工具 convertz  【百度一下】(专门用来处理多种编码的插件安装 )
           3、数据库管理工具 navicat   【百度一下】(方便数据库的查看与操作)
           4、网站的基本数据,这些数据包括:系统常量、全局变量、系统调用 ,首先从系统常量说起
              4.1、系统常量
                  DISCUZ_ROOT     //网站根目录

                  TIMESTAMP          //程序执行的时间戳

                  CHARSET             //程序的语言编码类型

                  IS_ROBOT           //是否是机器访问
                    FORMHASH          //HASH值
                    其余的可直接打印出来查看,如:
  

      

  复制代码

              4.2、全局变量
                   直接打印$_G即可得知,如:  
  

      

  复制代码

              4.3、数据库配置参数
                    直接打印$_G['config']['db']即可,如:
  

      

  复制代码

              4.4、数据库操作
                    DB::table()           //增加了pre的数据库表名
                    DB::delete()           //删除表中数据
                    DB::insert()           //向表中插入数据
                    DB::update()           //更新表中数据
                    DB::fetch()           //配合DB::query来实现数据资源数据的获取
                    DB::query()           //执行一条数据库语句
                    DB::fetch_first()  //获取结果集的第一条记录
  
                    更多操作请查看文档:wiki/index ... E%E5%BA%93%E7%B1%BB
  
           5、熟悉 ./source/function/function_admincp.php 管理后台文件里的函数,知道具体函数是实现什么功能效果
           6、了解和掌握基础通用的类、函数  wiki/#.E5. ... 1.E5.87.BD.E6.95.B0
  
        、安全性处理
            1、文件的安全性
               所有与插件有关的程序,包括全部的前后台程序,因全部使用外壳调用,请务必在第一行加入
                if(!defined('IN_DISCUZ')) {
                          exit('Access Denied');
                 }
               以免其被 URL 直接请求调用,产生安全问题。
  
            2、对数值处理
               2.1、 intval();    //处理非负整数 ,如:$uid=intval($uid);
                注意,使用intval后,一定要想一想,自己这个变量是不是应该非负的?如果是的话,得加个判断语句,或者用abs,max等函数处理下
               2.2、 trim();      //去除左右空格, 如:$username=trim($username);
               2.3、 对于文字内容,记得使用htmlspecialchars(dhtmlspecialchars)
               2.4、 写入数据库时的注意事项
                     要进数据库的变量一定得addslashes(DZ内为daddslashes,如用DZ无须再次过滤,DZ已将所有$_POST和$_GET过滤),当然,如果你进的是数字(比如uid,并且已经intval过),或者是其他一些肯定不会出错的,那么你可以不做这一步。
               2.5、 在写sql语句时,变量一定得记得用’框起来。如果变量是字符串,不这么做会出错。如果是数字不这么做不会提示出错,但是有可能有注入的危险。
               2.6、 数组在运用前记得写$xxx = array();  原因很简单,防止用户提交恶意的值。
  
            3、语句查询优化
                在写SQL语句是尽量符合SQL规则,语句查询要相应的优化,有先有后;数据表要相应的创建索引,加快查询速度,这里不多说。
  
         三、实例讲解之插件的前兆
             1、最先清楚需要开发什么功能的插件,插件机制是否能够开发,最后能否达到预期效果,否则一切都免谈了
             2、需要使用什么菜单、什么参数,配置哪些选项、数据结构如何设计、前后台实现哪些功能等等
             3、需要哪些函数,discuz内部是否有这功能的函数,尽量用内部的函数来达到预期效果
             4、最好不要改动discuz原有的布局,宁愿Coty一段代码出来也不要在原有的函数上添加功能,防止以后的升级问题
             5、尽最大能力去开发智能的插件,多用变量代替常量,增强程序的移植性,可维护性
  
        、实例讲解之基本配置
             1、安装全新的DiscuzX2
             2、打开 config/config_global.php 文件,在文件结尾添加以下代码开启插件设计者模式
    $_config['plugindeveloper'] = 2;   // 1 表示开启插件设计者模式 ; 2 表示开启插件设计者模式且显示前台页面的潜入点
      

  复制代码

                 
<img id="aimg_71ebE"  class="zoom" width="498" file="data/attachment/forum/201110/15/195757azahp4jyaqyejatr.jpg" border="0" alt="" />
             3、更新缓存(为了显示潜入点),刷新前台页面看看就知道什么叫嵌入点了,有嵌入点得地方就可以顺便输出内容,包括源码
  
               <img id="aimg_5TVam"  class="zoom" width="542" file="data/attachment/forum/201110/16/132122911dgdudtgloyg7l.jpg" border="0" alt="" />
  

        、实例讲解之管理中心
              1、这里以“会员注册后自动送100个金币”为例 (主要传授对数据库的操作)
              2、填写插件最基本信息
  

                 <img id="aimg_SlQvL"  class="zoom" width="557" file="data/attachment/forum/201110/15/201734qekrmkddqv3mvjqm.jpg" border="0" alt="" />
  
                         (注意:提交完后记得在插件目录下建以标识符为名的文件夹,如: ./source/plugin/send_jinbi)
  

  
  

              3、选择插件语言包
                <img id="aimg_aJX1m"  class="zoom" width="312" file="data/attachment/forum/201110/15/2024428vdvsmaaaj8dcecg.jpg" border="0" alt="" />
  

                       
                 <img id="aimg_fiaSB"  class="zoom" file="data/attachment/forum/201110/15/202722l8o3v83lalz31xq8.jpg"   border="0" alt="" />
  
              4、添加插件变量配置
                 <img id="aimg_h7W4X"  class="zoom" file="data/attachment/forum/201110/15/203420q665ukx7vx5xsz6q.jpg"   border="0" alt="" />
                   具体可以点最后面的"详细"进入编辑
  
  

              5、在插件列表中找到"新注册会员送100个金币"插件并启用
  
               <img id="aimg_sMdT6"  class="zoom" width="555" file="data/attachment/forum/201110/15/203953hhfoojphfh4h6dc6.jpg" border="0" alt="" />
       六、实例讲解之页面嵌入
           1、插件页面嵌入-普通版
              <img id="aimg_oS050"  class="zoom" file="data/attachment/forum/201203/09/090540irsi3mhm13737iav.jpg"   border="0" alt="" />
  
           2、在 ./source/plugin/send_jinbi/ 目录下建立 send_jinbi.class.php 文件,目的为了页面嵌入
  

      

  复制代码

           3、基本上已经完成一大半了,你只要开启插件,然后更新缓存(可靠点),然后到前台去注册一个会员,则会自动送上100金币。
             <img id="aimg_Qa9QJ"  class="zoom" file="data/attachment/forum/201203/09/0905437a1e224x7gkan21v.jpg"   border="0" alt="" />
  
         七、实例讲解之安装、卸载及升级
              1、 安装(install.php)、卸载(uninstall.php)程序中可随意设计页面的跳转,只要在插件安装、卸载结束时候输出添加 $finish = TRUE; 即可,脚本中可用 runquery() 函数执行 SQL 语句。

      

  复制代码

  2、升级(upgrade.php)程序中可通过 $fromversion 和 $toversion 变量判断升级的具体版本号,并随意设计页面的跳转,只要在插件升级结束时候输出添加 $finish = TRUE;可,脚本中可用 runquery() 函数执行 SQL 语句。

      

  复制代码

  3、其他功能请参考其他插件
  
  
  
  



上一篇:专访贵港视窗:地方网站需要虚心学习用心经营
下一篇:shopex修改品牌专区logo图片大小教程
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1314学习网 ( 浙ICP备10214163号 )

GMT+8, 2025-5-2 14:20

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表