`

DZ插件制作简易入门教程(自学手记)第二篇

阅读更多

谢谢大家的鼓励和帮助,我会继续写下去。工作忙,只能周末寥寥几笔,不当之处,请指正,我会修改的。

在开篇中,可以说已经做完了一个完整的插件。不过功能很简单,只能在表格中央显示“Hello World!”。下面来做一件事,实现对插件中央显示的文字进行设定。

有两种方法可以达到这一目的。

方法一:利用DISCUZ论坛插件管理的自定义变量。
1.1 进入后台->扩展->论坛插件->管理->详情->变量
2009-04-25_204813.jpg 
  *配置名称意思是该项设定的名称(好像有点废话^_^)。
  *配置变量名是指该项设定所控制的变量。
  *配置类型中有很多种类,因为该例中要设定的是一个字符串,所以选字串。

1.2 上一步完成后,在后台->扩展->论坛插件,插件列表Hello World插件下面会出现一项参数设置。
2009-04-25_210222.jpg 

1.3 点击参数设置后就能看见所设置的配置(变量)了。
2009-04-25_210618.jpg 

1.4 为正确显示出所设定的内容,对插件程序模块文件helloworld.inc.php进行编辑并保存。

  1. <?
  2. if(!defined('IN_DISCUZ')) {
  3.         exit('Access Denied');
  4. }

  5. if(!$discuz_uid) {//如果想未登陆的游客也能看到本插件,删除6~8行,谢谢q-tech指正^_^
  6.         showmessage('not_loggedin', null, 'NOPERM');
  7. }

  8. include DISCUZ_ROOT.'./forumdata/cache/plugin_'.$identifier.'.php';
  9. extract($_DPLUGIN[$identifier], EXTR_SKIP);
  10. extract($_DPLUGIN[$identifier]['vars']);

  11. //$say_string='Hello World!';

  12. include template('hw_helloworld');
  13. ?>
复制代码
  *在第1.1步中设定好了配置变量后,该变量实际是放在该插件相关的缓存文件中,第10行代码即将此缓存文件“装入”。在论坛根目录/forumdata/cache/下可以找到这个缓存文件,文件名plugin_helloworld.php。
  *如果打开该文件可以发现设定的配置变量say_string存放在一个数组$_DPLUGIN['helloworld']中,名字为$say_string,PHP中变量前面都要有$符号。程序的11、12行代码就是将此数组“解开”,以得到$say_string变量。关于extract函数和其它语句的的详细内容请参考PHP手册。

1.5 保存后可以尝试在本篇步骤1.3的界面中提交新值,插件界面上的值应该有变化了。
2009-04-25_214211.jpg 
2009-04-25_214317.jpg 

方法二:自己编写插件设定程序
  DISCUZ的自定义配置变量基本能够满足一般插件的设定需求,但是对比较高级和复杂的插件,还是自己编写设定程序比较好。下面还以Hello World项目为例子,顺带简单说一下怎么引用和操作数据库。

2.1 在论坛根目录\plugins\helloworld下新建一个文件setting.inc.php,在论坛根目录\templates\default下新建一个文件hw_setting.htm。

2.2 在后台插件模块页面为Hello World插件添加一个程序模块。
2009-04-25_220831.jpg 

2.3 在DISCUZ论坛的数据库中添加一张数据表命名为cdb_plugin_helloworld,建立一个字段say_string。并插入一条记录,随便什么内容吧。我是用phpmyadmin来做这件事的,具体怎么操作请参考mysql手册。
2009-04-25_221653.jpg 

2.4 编辑hw_setting.htm,创建一个提交数据的界面。
2009-04-25_230920.jpg 
表单部分的代码如下:
  1. <form name="form1" method="post" action="admincp.php?action=plugins&identifier=$identifier&mod=$mod" >
  2.         <div align="center">欢迎词:
  3.           <input type="text" name="textfield" value="$hw_set_saystring">

  4.           <input type="submit" name="hw_submit" class="btn" value="提交">
  5.                   <input type="hidden" name="formhash" value="$hw_formhash">
  6.       
  7.         </div>
  8.       </form>
复制代码
  *因为在插件模块设置中程序模块setting的模块类型设为了“后台调用(后台菜单)”,也就是通过admincp.php这个“传送带”来运行setting模块的,所以表单要提交给admincp.php,并且后面要跟上必要的参数,因此,表单的action参数要写成action="admincp.php?action=plugins&identifier=$identifier&mod=$mod"。在本例中,不用$identifier和$mod变量而直接写成:action="admincp.php?action=plugins&identifier=helloworld&mod=setting"也不会有错,但出于安全性和稳定性考虑并不建议这样写。
  *表单中必须要有一个name为formhash的隐藏标签(代码第6行),用于传送表单的哈希值进行安全性验证。其值要事先准备好,这一点见下一步。
  *因为是通过“后台调用(后台菜单)”的方式用admincp.php来执行,所以,setting模版的开头和结尾不用加{template header}和{template footer},这一点将在以后讨论。

2.5 编辑setting.inc.php的内容如下:
  1. <?
  2. if(submitcheck('hw_submit')){
  3.         $db->query("UPDATE {$tablepre}plugin_helloworld SET say_string='$textfield';");
  4.         cpmsg('设置成功!', 'admincp.php?action=plugins&identifier='.$identifier.'&mod='.$mod,'succeed');
  5. }

  6. $query= $db->query("SELECT * FROM {$tablepre}plugin_helloworld;");

  7. $hw_field=$db->fetch_array($query);

  8. $hw_set_saystring=$hw_field['say_string'];

  9. $hw_formhash=FORMHASH;

  10. include template('hw_setting');
  11. ?>
复制代码
  *代码开始的if判断是否有表单提交的动作,如果有,则更新数据库,显示相关信息并返回。
  *如果没有表单提交,则查询数据库,获取所需的数据。代码第7行对数据进行查询,返回资源号给$query。第9行将此“资源”中的数据提出赋值给$hw_field,得到的$hw_field实际上是一个数组,有点类似ASP中的记录集,但是又有区别,因为是一个数组,所以没有游标的概念。本例中只有1条记录,如果返回的记录有很多个,则要用while()循环遍历:
  1. while($hw_field=$db->fetch_array($query)){
  2.   $var = $hw_field['fieldname'];
  3.   ......
  4. }
复制代码
而且还必须这么写,如果你写成while($hw_field){.....}是不行的。遍历完成后,$hw_field即失效,如果要再用,必须重新query()。不过听说PHP5支持存储过程的,特向诸位大牛请教^_^。
  *第13行是为模版中的表单生成哈希值,很简单,直接引用FORMHASH(注意全是大写)就可以了。这里做了一下传递,是因为:我发现模版文件中的代码好像要被处理过才执行,只认得$打头的变量。
  *因为是通过“后台调用(后台菜单)”的方式用admincp.php来执行,admmincp.php已经进行了权限验证,所以这里一般不用再对权限做检查了。

  2.6 编辑前台程序helloworld.inc.php文件,引用数据库中的数据传递给模版,代码如下:
  1. <?
  2. if(!defined('IN_DISCUZ')) {
  3.         exit('Access Denied');
  4. }

  5. if(!$discuz_uid) {//如果想未登陆的游客也能看到本插件,删除6~8行,谢谢q-tech指正^_^
  6.         showmessage('not_loggedin', null, 'NOPERM');
  7. }

  8. $query= $db->query("SELECT * FROM {$tablepre}plugin_helloworld;");

  9. $hw_field=$db->fetch_array($query);

  10. $say_string=$hw_field['say_string'];

  11. include template('hw_helloworld');
  12. ?>
复制代码

2.7保存所有程序,在后台->扩展->论坛插件->设置的hello world插件下就会多一项“Hello World!设置”,这个就是我们自己做的插件设定程序,快试试吧。
2009-04-26_004058.jpg 
  *前面有项“参数设置”是因为在本篇开头1.1中我们添加了一个配置变量,只要删除那个配置变量,这一项就没有了。

  总结:直到接触到了数据库,我才体会到了PHP的优势。虽然它不像ASP那样豪华,但高效,简洁。今天帖子的源代码中引用了一些DISCUZ自有的函数和类,如submitcheck()、cpmsg()、$db->query()、$db->fetch_array()等等。DISCUZ论坛的绝大多数函数分别在论坛根目录\admin\global.func.php和\include\global.func.php中定义,数据库的类在\include\db_mysql.class.php中定义。其实如果仔细研究DISCUZ论坛后缀名为.func.php和.class.php的文件能发现很多好东西^_^。只可惜里面什么注释都没有,函数型只能一点一点爬代码。真希望能尽快出一份DISCUZ函数手册。如果已经有了,请一定告诉我,急需!

 

海口论坛  http://www.souhaikou.com

海口同城微博 http://t.souhaikou.com

分享到:
评论

相关推荐

    DZ模板制作教程 DZ模板制作教程下载

    【DZ模板制作教程】 DZ模板制作教程主要针对Discuz!论坛系统,教你如何创建和自定义模板,以满足个性化需求。Discuz!是一款流行的社区论坛软件,其模板制作涉及网页设计、HTML、CSS等基础知识。以下是详细的制作...

    discuz论坛插件DZ插件 dzapp_jifen

    《Discuz论坛插件DZ插件 dzapp_jifen详解》 Discuz! 是一款广泛应用于互联网社区建设的开源论坛软件,以其强大的功能和灵活的扩展性受到众多网站管理员的青睐。DZ插件,全称dzapp_jifen,是Discuz! 平台上的一款...

    DZ插件 签到插件

    《DZ插件:签到插件的使用与解析》 DZ插件,全称为Discuz!插件,是针对Discuz!论坛系统的一种扩展功能。这些插件旨在增强论坛的功能性和用户体验,使得管理员能够根据自身需求定制论坛的各种特性。在众多DZ插件中,...

    discuz论坛插件DZ插件 dz2.5足彩插件

    DZ插件则是在这个基础上提供额外功能的模块,比如dz2.5足彩插件,专门针对足球彩票或竞彩爱好者设计。 dz2.5足彩插件的主要功能可能包括以下几点: 1. **赛事数据展示**:插件可能提供实时的足球比赛信息,包括...

    discuz论坛插件DZ插件 万能投票插件 通用版v2.81

    2. **功能特性** - **多种投票类型**:支持单选、多选、拖拽排序等多种投票方式,满足不同场景的需求。 - **自定义选项**:管理员可以自由设定投票题目和选项,同时支持插入图片、表情等富文本内容,使投票更生动...

    discuz论坛插件DZ插件 我的勋章

    discuz论坛插件DZ插件 我的勋章 .

    discuz论坛插件DZ插件 轮播幻灯片 图文版 1.2

    总的来说,"Discuz论坛插件DZ插件 轮播幻灯片 图文版 1.2"是一款能够增强论坛视觉吸引力和用户体验的工具,通过灵活配置,管理员可以定制出符合自己社区风格的轮播幻灯片,提升论坛的整体形象和用户互动性。...

    discuz论坛插件DZ插件 CMS_供求招商加盟 供求系统2.0

    《Discuz论坛插件:DZ插件CMS_供求招商加盟 供求系统2.0详解》 在互联网社区建设中,Discuz!是一款广受欢迎的开源论坛系统,它以其强大的功能和灵活的扩展性赢得了众多用户的青睐。今天我们将深入探讨一款专为...

    discuz论坛插件DZ插件 新浪微博v2接口插件 商业版2.1.5支持X3

    论坛插件DZ插件 新浪微博V2接口插件 商业版2.1.5支持X3”是一款为Discuz! 论坛量身打造的社交化插件,它充分利用了新浪微博的强大社交网络,为论坛用户带来了更加丰富的互动体验。同时,商业版的持续更新确保了插件...

    dz插件discuz插件-【超人】帖子预览dz插件

    【超人】帖子预览dz插件是一款专为Discuz! 论坛系统设计的增强型插件,它旨在提高论坛用户体验,特别是对于那些希望在查看帖子前获取内容概览的用户。Discuz! 是一个非常流行的开源社区建站软件,拥有强大的功能和...

    discuz论坛插件DZ插件 百度云网盘0.2用户组权限通用插件

    《Discuz论坛插件:DZ插件与百度云网盘0.2用户组权限通用插件详解》 在互联网社区构建中,Discuz!(简称DZ)是一款广泛使用的开源论坛软件,以其强大的功能和易用性深受广大站长喜爱。DZ插件则进一步丰富了论坛的...

    discuz论坛插件DZ插件 头像装饰

    本文将详细讲解“Discuz论坛插件DZ插件 头像装饰”这一主题,帮助您了解如何通过插件来个性化您的Discuz!论坛用户的头像,提升社区的互动性和趣味性。 一、Discuz!论坛插件概述 Discuz!论坛支持各种插件的安装,...

    discuz论坛插件DZ插件 添加至百度首页1.0

    《Discuz论坛插件DZ插件:将网站推向百度首页1.0详解》 Discuz! 是一款广泛使用的开源社区论坛系统,以其强大的功能和灵活性深受广大站长喜爱。DZ插件,全称为Discuz! 插件,是专门为Discuz! 平台设计的各种功能...

    Discuz!X插件开发过程 入门必学

    X插件开发过程入门必学 在深入探讨Discuz!X插件开发的过程中,本篇文章将详细介绍从创建插件到实现各种功能的关键步骤。通过学习这些知识点,即使是初学者也能快速掌握Discuz!X插件开发的基础。 #### 一、启用插件...

    discuz论坛插件DZ插件 微信智能回复 V1.0.4

    discuz论坛插件DZ插件 微信智能回复 V1.0.4 .

    discuz论坛插件DZ插件 仿真股市 v1.59 支持X3

    《Discuz论坛插件:仿真股市v1.59,为X3系统量身打造的互动体验》 在互联网社区建设中,Discuz!(简称DZ)是一款广泛应用的论坛软件,以其强大的功能和易用性深受广大站长喜爱。这款名为“仿真股市”的DZ插件,版本...

    dz 1.5插件 社区银行

    dz 1.5插件dz 1.5插件dz 1.5插件dz 1.5插件dz 1.5插件dz 1.5插件dz 1.5插件dz 1.5插件dz 1.5插件dz 1.5插件dz 1.5插件dz 1.5插件dz 1.5插件

    discuz论坛插件DZ插件 活动@历历在目 1.0.6

    discuz论坛插件DZ插件 活动@历历在目 1.0.6 .

    discuz论坛插件DZ插件 仿贴吧主题列表

    这个“DZ插件”就是为了扩展Discuz! 的核心功能而创建的第三方组件。 仿贴吧主题列表插件的主要特性可能包括以下几点: 1. **主题排序**:模拟贴吧的热门程度排序,根据主题的回复数量、最后回复时间等因素,展示...

    discuz论坛插件DZ插件 贴内导航 2.5加强版

    《Discuz论坛插件:DZ插件贴内导航2.5加强版详解》 Discuz! 是一款广泛使用的开源社区论坛系统,以其强大的功能和灵活性深受广大站长喜爱。DZ插件是针对Discuz! 平台开发的第三方插件,旨在进一步提升用户体验和...

Global site tag (gtag.js) - Google Analytics