Discuz教程网

[插件制作] [Discuz X1.5] Discuz X 插件制作教程

[复制链接]
authicon dly 发表于 2011-8-14 15:02:11 | 显示全部楼层 |阅读模式
网站的基本数据
在DX的这个框架中,我们会经常用到一些使用的数据,这些数据包括:系统常量、全局变量、系统调用 ,首先我们从系统常量说起
    系统常量
DX里面对一些常量做了自己的定义,接下来的表格列举了,更多的变量可以使用附录里的代码获得。
常量名
说明
DISCUZ_ROOT
网站的根目录
TIMESTAMP
程序执行的时间戳
CHARSET
程序的语言编码类型
IS_ROBOT
是否是机器访问
FORMHASH
HASH值
   全局变量
DX的全局变量事实上全部压缩到了一个变量:$_G里面,接下来的表格列举了常用的$_G数据内部的变量,更多的变量可以使用附录里的代码获得。
变量名
说明
uid
用户UID
username
用户名
groupid
用户组ID
clientip
用户IP地址
charset
语言编码
siteurl
网站地址
config
网站基本配置,这是一个数组
setting
网站基本设置,这是一个数组

    系统调用    系统调用里面,恐怕最重要的调用要数DB这个静态对象了。这是一个数据库的静态对象,对其的使用也是经常用到的,其方法包括:
变量名
说明
DB::table()
增加了pre的数据库表名
DB::delete()
删除表中数据
DB::insert()
向表中插入数据
DB::update()
更新表中数据
DB::fetch()
配合DB::query来实现数据资源数据的获取
DB::query()
执行一条数据库语句
DB::fetch_first()
获取结果集的第一条记录
    另外,系统的一些其它的系统调用,包括:获取用户信息、插入帖子等内容,都可以在:souce/function/ 文件夹下找到对应的文件来查看。

1. 查看全部常量:

  1. <?php
  2. require_once './source/class/class_core.php';
  3. require_once './source/function/function_home.php';
  4. $discuz = & discuz_core::instance();
  5. $discuz->init();
  6. print_r(get_defined_constants());
  7. ?>
复制代码


2. 查看$_G变量中内容

  1. <?php
  2. require_once './source/class/class_core.php';
  3. require_once './source/function/function_home.php';
  4. $discuz = & discuz_core::instance();
  5. $discuz->init();
  6. print_r($_G);
  7. ?>
复制代码

接下来.我们就已 "扩展中心"插件为例 制作一个简易,却很实用的论坛扩展插件.

首先.打开论坛后台: 插件 -> 插件 -> 设计新插件

214026p0lccxne3k6sn0ez.png


注:唯一标识符提交后.将不能再次修改.提交后,会切换到插件的设置页面.如果不涉及到其他编码.可以不选用"插件语言包"


接下来.我们就可以开始添加插件的模块文件了.
打开程序目录:/source/plugin/   建立新文件包 dst_Expand
(这里的文件包名要与唯一标识符一致)

第一步.我们先做一个admincp.inc.php  
   在/source/plugin/唯一标识符/下 新建一个文件 admincp.inc.php
因为扩展中心不需要后台设置 所以该文件不需要编写内容  只需复制一下内容即可


  1. <?php
  2. if(!defined('IN_DISCUZ')) {
  3.         exit('Access Denied');
  4. }
  5. ?>
复制代码

文件写好后.返回后台的模块设置.按下图样式填写:
215345f8in8ih5iq899y8g.png


写好只有点击提交.返回到插件列表页.点击开启.后台部分便完成了.
220135j3vlvsiv2ajigjys.png


之后开始编写其他模块文件
返回 设计 -> 模块  按下图添加新模块
22105300p0oslgjgs0dlvp.png

添加完毕后 界面 -> 导航栏 -> 选择"扩展" 可用  
在/source/plugin/唯一标识符/下 新建一个文件 Expand.inc.php
在里面编写


  1. <?php
  2. /**
  3. *      [New.DST] (C)2010-2011 New PHP Support Forum
  4. *      This is NOT a freeware, use is subject to license terms
  5. *
  6. *      $Id: Expand.inc.php 2010-07-31Z [DST]上官雨伦 $
  7. */

  8. if(!defined('IN_DISCUZ')) {
  9.         exit('Access Denied');
  10. }
  11.         include template("dst_Expand:Expand");

  12. ?>


复制代码

其中


  1.   include template("dst_Expand:Expand");
复制代码
template:表示dst_Expand插件文件包目录下的模板文件
dst_Expand:表示该插件的唯一标识符
Expand:表示template下的模板文件名


接下来 在dst_Expand插件文件包目录下新建新文件包 template
在 template 文件包下新建文件 Expand.htm

在 Expand.htm 文件里 编写


  1. {template common/header}
  2. <div id="wp" class="wp">
  3.         <div id="pt" class="wp"><a href="index.php" class="nvhm">$_G[setting][bbname]</a>  &rsaquo; 扩展中心</div>
  4. 这里是内页所显示的内容
  5. {template common/footer}
复制代码
其中:
  1. {template common/header}
复制代码

表示调用页头文件
  1. <div id="pt" class="wp"><a href="index.php" class="nvhm">$_G[setting][bbname]</a>  &rsaquo; 扩展中心</div>
复制代码

表示:
222409al2b9oxuajaiobyo.png


  1. {template common/footer}
复制代码

表示调用页底文件.

这样, 一个内页就算完成了.

接下来,我们就根据上面的教程制作一个扩展中心的内页

template 文件包下的 Expand.htm
可以做任何的形式,只要你熟悉CSS和DIV

下面,贴出扩展中心的代码
把上面教程中 "这里是内页所显示的内容" 替换成
  

  1.       <link rel="stylesheet" type="text/css" href="source/plugin/dst_Expand/template/Expand.css">
  2. <div id="ct" class="wp cl">
  3.         <div class="mn mw">
  4.                 <div class="bm bml">
  5.                         <div class="bm_c cl">
  6.                                 <div id="forum_rules">
  7.                                         <div class="pbm xg2">
  8. <ul class="tb cl">
  9. <li id="Id_About_Us"> <a href="plugin.php?id=dst_Expand:Expand&amp;to=Id_About_Us">关于我们</a></li>
  10. <li id="Id_Team_News"> <a href="plugin.php?id=dst_Expand:Expand&amp;to=Id_Team_News">团队动态</a></li>
  11. <li id="Id_License_Agreement"> <a href="plugin.php?id=dst_Expand:Expand&amp;to=Id_License_Agreement">授权协议</a></li>
  12. <li id="Id_Team_Rules"> <a href="plugin.php?id=dst_Expand:Expand&amp;to=Id_Team_Rules">团队规章</a></li>
  13. <li id="Id_Business_Support"> <a href="plugin.php?id=dst_Expand:Expand&amp;to=Id_Business_Support">商业支持</a></li>
  14. <li id="Id_Partners"> <a href="plugin.php?id=dst_Expand:Expand&amp;to=Id_Partners">合作伙伴</a></li>
  15. <li id="Id_Team_Concept"> <a href="plugin.php?id=dst_Expand:Expand&amp;to=Id_Team_Concept">团队理念</a></li>
  16. <li id="Id_Contact_us"> <a href="plugin.php?id=dst_Expand:Expand&amp;to=Id_Contact_us">联系我们</a></li>
  17. <li id="Id_Site_Map"> <a href="plugin.php?id=dst_Expand:Expand&amp;to=Id_Site_Map">网站地图</a></li>
  18. <li id="Id_Advertising"> <a href="plugin.php?id=dst_Expand:Expand&amp;to=Id_Advertising">广告服务</a></li>
  19. <li id="Id_Site_Help"> <a href="plugin.php?id=dst_Expand:Expand&amp;to=Id_Site_Help">网站帮助</a></li>
  20. </ul> <br />


  21. <!--{if $_G['gp_to'] == 'Id_Team_News'}-->{template dst_Expand:Id_Team_News}
  22. <!--{elseif $_G['gp_to'] == 'Id_License_Agreement'}-->{template dst_Expand:Id_License_Agreement}
  23. <!--{elseif $_G['gp_to'] == 'Id_Team_Rules'}-->{template dst_Expand:Id_Team_Rules}
  24. <!--{elseif $_G['gp_to'] == 'Id_Business_Support'}-->{template dst_Expand:Id_Business_Support}
  25. <!--{elseif $_G['gp_to'] == 'Id_Partners'}-->{template dst_Expand:Id_Partners}
  26. <!--{elseif $_G['gp_to'] == 'Id_Team_Concept'}-->{template dst_Expand:Id_Team_Concept}
  27. <!--{elseif $_G['gp_to'] == 'Id_Contact_us'}-->{template dst_Expand:Id_Contact_us}
  28. <!--{elseif $_G['gp_to'] == 'Id_Site_Map'}-->{template dst_Expand:Id_Site_Map}
  29. <!--{elseif $_G['gp_to'] == 'Id_Advertising'}-->{template dst_Expand:Id_Advertising}
  30. <!--{elseif $_G['gp_to'] == 'Id_Site_Help'}-->{template dst_Expand:Id_Site_Help}
  31. <!--{else}-->{template dst_Expand:Id_About_Us}
  32. <!--{/if}-->
  33.                                         </div>
  34.                                 </div>
  35.                         </div>
  36.                 </div>
  37.         </div>
  38. </div>
  39.                 </div>


  40. <script type="text/javascript">
  41. <!--
  42.     var ishave=true;
  43.     var isset=false;
  44.     querystring=document.location.search;
  45.     lo=querystring.indexOf('to=');
  46.     if (lo>0) {
  47.         var result=querystring.substr(lo+3);
  48.         if (result=="")  ishave=false;
  49.     }
  50.     else { ishave=false; }
  51.     divob=document.getElementById('forum_rules');
  52.     lis=divob.getElementsByTagName('li');
  53.     if (ishave) {
  54.         for (var i=0; i<lis.length; i++) {
  55.             if (lis.id==result) {
  56.                 lis.className="a";
  57.                 isset=true;
  58.                 break;
  59.             }
  60.         }
  61.     }
  62.     else {
  63.         lis[0].className="a";
  64.     }
  65.     if (!isset) lis[0].className="a";
  66. //-->
  67. </script>


复制代码
然后再写个CSS文件 Expand.css

  1. #ct {
  2. background:none !important;
  3. }
复制代码

这回去看看发生了什么吧

下面 我来详细的解剖一下上面的导航栏的写法

在上面的导航栏效果中:

  1. <li id="Id_About_Us"> <a href="plugin.php?id=dst_Expand:Expand&amp;to=Id_About_Us">关于我们</a></li>
复制代码
href="" 中的路径  表示的是各个分类的路径
关于我们 则表示的导航栏的文字
而下面

  1. <!--{if $_G['gp_to'] == 'Id_Team_News'}-->{template dst_Expand:Id_Team_News}
复制代码

等等中的

  1. {template dst_Expand:Id_Team_News}
复制代码

表示的是 dst_Expand这个插件文件包下的template文件包下的Id_Team_News.htm 文件
  因为该插件下面要输写的内容过多.为了方便整理和修改.我们在这里采用了外调的方法.
也就是说 每一个导航栏 单独写成一个.htm的文件 然后再由Expand.htm 这个文件总的来调用.这样每一个分类下的内容就简洁多了
但是这里一定要注意几点:
一.文件的目录{template dst_Expand:Id_Team_News} 里的Id_Team_News.htm 文件要和Expand.htm为同一个目录.
二.<li>中的ID 以及变量$_G['gp_to'] == '里的ID 一定要保持和文件名 也就是&to= 后面的一致 否则就会产生模板文件找不到的错误

最后.我们就可以在分类下,填写自己想要的内容了.
按照上面已经写好的Expand.htm   我们新建一个文件 Id_About_Us.htm  这个是"关于我们"的文件
新建好以后 我们在文件中任意输入任何文字内容
2251146lzvzdwq8068q8lf.png

225122g20qf2f4s06z2ou7.png


以上,我们就可以根据上述的教程,制作出一个简单的"扩展中心"插件了
当然,如果你可以熟练的运用CSS+Div 的话.还可以做出更精美的效果. 您可以参考
http://www.17dst.com/plugin.php?id=dst_Expand:Expand 根据自己的需要 运用CSS+Div





上一篇:Discuz 插件编码转换教程
下一篇:超多个性等级图标、勋章、在线列表、等精美图标,绝对有你想要的
authicon qnbs1 发表于 2011-9-8 16:02:18 | 显示全部楼层
这个我收藏了。相当好
authicon 久久商道(过客人 发表于 2012-7-31 21:28:44 | 显示全部楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1314学习网 ( 浙ICP备10214163号 )

GMT+8, 2024-4-27 22:40

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

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