当前位置: 代码迷 >> Web前端 >> [手把手教]discuzX2插件制作教程_最初学者级别的入门坎 一
  详细解决方案

[手把手教]discuzX2插件制作教程_最初学者级别的入门坎 一

热度:309   发布时间:2012-11-23 00:03:43.0
[手把手教]discuzX2插件制作教程__最菜鸟级别的入门坎 一
?绝世十二少 于 2011-10-17 10:49 编辑

? ?? ?? ?终于也轮到我写教程指导后人了,在此感谢会员(sw08)的热心指导,同时也感谢曾经提供各种插件资料给我的论坛朋友们,是你们帮我跨过了插件的入门坎,也让我对插件有一点点认识,在此感谢各位!

? ?? ?? ?想想这几天为了自己网站(www.souhaikou.com)的需求而不得不踏入插件制作的圈子,很多时候别人开发的插件往往不能满足自己的需求,可自己又不会这方面的知识,网站无法达到预想的效果,心里总有万分的无奈,无从下手。我作为一个菜鸟站长或PHP程序员来说,东西如果不能达到我想要得效果,我会想尽办法去解决,不然心里一直不爽!相信大家也会像我这样,现在就让我这个菜鸟来教你们开发处女作吧!

? ?? ??有钱给钱,有力给力,别光看不回帖,这样不给力噢

? ?? ??一、开发插件所需资料与工具
? ?? ?? ?1、DiscuzX2 插件机制? ?http://dev.discuz.org/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值
? ?? ?? ?? ?? ?? ?其余的可直接打印出来查看,如:
  1. <?php
  2. require_once './source/class/class_core.php';
  3. $discuz = & discuz_core::instance();
  4. $discuz->init();
  5. print_r(get_defined_constants());
  6. ?>
复制代码
? ?? ?? ?? ?4.2、全局变量
? ?? ?? ?? ?? ???直接打印$_G即可得知,如:??
  1. <?php
  2. require_once './source/class/class_core.php';
  3. $discuz = & discuz_core::instance();
  4. $discuz->init();
  5. print_r($_G);
  6. ?>
复制代码
? ?? ?? ?? ?4.3、数据库配置参数
? ?? ?? ?? ?? ?? ?直接打印$_G['config']['db']即可,如:
  1. <?php
  2. require_once './source/class/class_core.php';
  3. $discuz = & discuz_core::instance();
  4. $discuz->init();
  5. print_r($_G['config']['db']);
  6. ?>
复制代码
? ?? ?? ?? ?4.4、数据库操作
? ?? ?? ?? ?? ?? ?DB::table()? ?? ?? ???//增加了pre的数据库表名
? ?? ?? ?? ?? ?? ?DB::delete()? ?? ?? ???//删除表中数据
? ?? ?? ?? ?? ?? ?DB::insert()? ?? ?? ???//向表中插入数据
? ?? ?? ?? ?? ?? ?DB::update()? ?? ?? ???//更新表中数据
? ?? ?? ?? ?? ?? ?DB::fetch()? ?? ?? ???//配合DB::query来实现数据资源数据的获取
? ?? ?? ?? ?? ?? ?DB::query()? ?? ?? ???//执行一条数据库语句
? ?? ?? ?? ?? ?? ?DB::fetch_first()??//获取结果集的第一条记录

? ?? ?? ?? ?? ?? ?更多操作请查看文档:http://dev.discuz.org/wiki/index.php?title=Discuz%E6%95%B0%E6%8D%AE%E5%BA%93%E7%B1%BB

? ?? ?? ?5、熟悉 ./source/function/function_admincp.php 管理后台文件里的函数,知道具体函数是实现什么功能效果
? ?? ?? ?6、了解和掌握基础通用的类、函数??http://dev.discuz.org/wiki/#.E5.9F.BA.E7.A1.80.E6.A1.86.E6.9E.B6.E3.80.81.E7.B1.BB.E3.80.81.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 文件,在文件结尾添加以下代码开启插件设计者模式
  1. $_config['plugindeveloper'] = 2;? ?// 1 表示开启插件设计者模式 ; 2 表示开启插件设计者模式且显示前台页面的潜入点
复制代码
? ?? ?? ?? ?? ??<ignore_js_op style="WIDOWS: 2; TEXT-TRANSFORM: none; BACKGROUND-COLOR: rgb(255,255,255); TEXT-INDENT: 0px; LETTER-SPACING: normal; FONT: 14px/20px Tahoma, 'Microsoft Yahei', Simsun; WORD-WRAP: break-word; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(68,68,68); WORD-SPACING: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><img style="WORD-WRAP: break-word; CURSOR: pointer" id="aimg_1063409" class="zoom" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" title="QQ截图未命名.jpg" onclick="zoom(this, this.src, 0, 0, 0)" alt="QQ截图未命名.jpg" src="http://att.discuz.net/data/attachment/forum/201110/15/195757azahp4jyaqyejatr.jpg" width="498" inpost="1" file="http://att.discuz.net/data/attachment/forum/201110/15/195757azahp4jyaqyejatr.jpg" zoomfile="http://att.discuz.net/data/attachment/forum/201110/15/195757azahp4jyaqyejatr.jpg" aid="1063409"><font face="宋体"><span class="Apple-converted-space">?</span></font></ignore_js_op>
? ?? ?? ???3、更新缓存(为了显示潜入点),刷新前台页面看看就知道什么叫嵌入点了,有嵌入点得地方就可以顺便输出内容,包括源码
? ?? ?? ?? ?? ??<ignore_js_op style="WORD-WRAP: break-word"><img style="WORD-WRAP: break-word; CURSOR: pointer" id="aimg_1063792" class="zoom" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" title="aa.jpg" onclick="zoom(this, this.src, 0, 0, 0)" alt="aa.jpg" src="http://att.discuz.net/data/attachment/forum/201110/16/132122911dgdudtgloyg7l.jpg" width="542" inpost="1" file="http://att.discuz.net/data/attachment/forum/201110/16/132122911dgdudtgloyg7l.jpg" zoomfile="http://att.discuz.net/data/attachment/forum/201110/16/132122911dgdudtgloyg7l.jpg" aid="1063792"><span class="Apple-converted-space">?</span></ignore_js_op>

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

? ?? ?? ?? ?? ??<ignore_js_op style="WORD-WRAP: break-word"><img style="WORD-WRAP: break-word; CURSOR: pointer" id="aimg_1063418" class="zoom" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" title="设计插件信息.jpg" onclick="zoom(this, this.src, 0, 0, 0)" alt="设计插件信息.jpg" src="http://att.discuz.net/data/attachment/forum/201110/15/201734qekrmkddqv3mvjqm.jpg" width="557" inpost="1" file="http://att.discuz.net/data/attachment/forum/201110/15/201734qekrmkddqv3mvjqm.jpg" zoomfile="http://att.discuz.net/data/attachment/forum/201110/15/201734qekrmkddqv3mvjqm.jpg" aid="1063418"><span class="Apple-converted-space">?</span></ignore_js_op>
? ?? ?? ?? ?? ?? ?? ?? ? (注意:提交完后记得在插件目录下建以标识符为名的文件夹,如: ./source/plugin/send_jinbi)



? ?? ?? ?? ?3、选择插件语言包
? ?? ?? ?? ????<ignore_js_op style="WIDOWS: 2; TEXT-TRANSFORM: none; BACKGROUND-COLOR: rgb(255,255,255); TEXT-INDENT: 0px; LETTER-SPACING: normal; FONT: 14px/20px Tahoma, 'Microsoft Yahei', Simsun; WORD-WRAP: break-word; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(68,68,68); WORD-SPACING: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><img style="WORD-WRAP: break-word; CURSOR: pointer" id="aimg_1063426" class="zoom" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" title="插件语言包.jpg" onclick="zoom(this, this.src, 0, 0, 0)" alt="插件语言包.jpg" src="http://att.discuz.net/data/attachment/forum/201110/15/2024428vdvsmaaaj8dcecg.jpg" width="312" inpost="1" file="http://att.discuz.net/data/attachment/forum/201110/15/2024428vdvsmaaaj8dcecg.jpg" zoomfile="http://att.discuz.net/data/attachment/forum/201110/15/2024428vdvsmaaaj8dcecg.jpg" aid="1063426"><font face="宋体"><span class="Apple-converted-space">?</span></font></ignore_js_op>

? ?? ?? ?? ?? ?? ?? ?
? ?? ?? ?? ?? ??<ignore_js_op style="WIDOWS: 2; TEXT-TRANSFORM: none; BACKGROUND-COLOR: rgb(255,255,255); TEXT-INDENT: 0px; LETTER-SPACING: normal; FONT: 14px/20px Tahoma, 'Microsoft Yahei', Simsun; WORD-WRAP: break-word; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(68,68,68); WORD-SPACING: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><img style="WORD-WRAP: break-word; CURSOR: pointer" id="aimg_1063429" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" title="QQ截图未命名.jpg" onclick="zoom(this, this.getAttribute('zoomfile'), 0, 0, '0')" alt="QQ截图未命名.jpg" src="http://att.discuz.net/data/attachment/forum/201110/15/202722l8o3v83lalz31xq8.jpg.thumb.jpg" inpost="1" file="http://att.discuz.net/data/attachment/forum/201110/15/202722l8o3v83lalz31xq8.jpg.thumb.jpg" zoomfile="http://att.discuz.net/data/attachment/forum/201110/15/202722l8o3v83lalz31xq8.jpg" aid="1063429"><font face="宋体"><span class="Apple-converted-space">?</span></font></ignore_js_op>

? ?? ?? ?? ?4、添加插件变量配置
? ?? ?? ?? ?? ??<ignore_js_op style="WIDOWS: 2; TEXT-TRANSFORM: none; BACKGROUND-COLOR: rgb(255,255,255); TEXT-INDENT: 0px; LETTER-SPACING: normal; FONT: 14px/20px Tahoma, 'Microsoft Yahei', Simsun; WORD-WRAP: break-word; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(68,68,68); WORD-SPACING: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><img style="WORD-WRAP: break-word; CURSOR: pointer" id="aimg_1063435" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" title="插件变量配置.jpg" onclick="zoom(this, this.getAttribute('zoomfile'), 0, 0, '0')" alt="插件变量配置.jpg" src="http://att.discuz.net/data/attachment/forum/201110/15/203420q665ukx7vx5xsz6q.jpg.thumb.jpg" inpost="1" file="http://att.discuz.net/data/attachment/forum/201110/15/203420q665ukx7vx5xsz6q.jpg.thumb.jpg" zoomfile="http://att.discuz.net/data/attachment/forum/201110/15/203420q665ukx7vx5xsz6q.jpg" aid="1063435"><font face="宋体"><span class="Apple-converted-space">?</span></font></ignore_js_op>
? ?? ?? ?? ?? ???具体可以点最后面的"详细"进入编辑


? ?? ?? ?? ?5、在插件列表中找到"新注册会员送100个金币"插件并启用
? ?? ?? ?? ?? ??<ignore_js_op style="WIDOWS: 2; TEXT-TRANSFORM: none; BACKGROUND-COLOR: rgb(255,255,255); TEXT-INDENT: 0px; LETTER-SPACING: normal; FONT: 14px/20px Tahoma, 'Microsoft Yahei', Simsun; WORD-WRAP: break-word; WHITE-SPACE: normal; ORPHANS: 2; COLOR: rgb(68,68,68); WORD-SPACING: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px"><img style="WORD-WRAP: break-word; CURSOR: pointer" id="aimg_1063436" class="zoom" onmouseover="showMenu({'ctrlid':this.id,'pos':'12'})" title="启用插件.jpg" onclick="zoom(this, this.src, 0, 0, 0)" alt="启用插件.jpg" src="http://att.discuz.net/data/attachment/forum/201110/15/203953hhfoojphfh4h6dc6.jpg" width="555" inpost="1" file="http://att.discuz.net/data/attachment/forum/201110/15/203953hhfoojphfh4h6dc6.jpg" zoomfile="http://att.discuz.net/data/attachment/forum/201110/15/203953hhfoojphfh4h6dc6.jpg" aid="1063436" initialized="true"><span class="Apple-converted-space"><font face="宋体">?</font></span></ignore_js_op>