Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

[展示] DZ插件制作简易入门教程(自学手记)17楼更新第二篇

[复制链接]
tomcash 发表于 2009-4-19 15:47:00 | 显示全部楼层 |阅读模式
本帖最后由 tomcash 于 2009-4-26 08:45 编辑

看了Maple-x和泡哥写的那两篇插件制作教程,还是让我如云里雾里。后经仔细研究插件实例,总算有所收获,但弯路走了不少。为避免后来者重蹈覆辙,在此总结成文,算做个笔记好了。

就用最经典的项目名称Hello Word!来讲。
效果图:




第一步 建立相关文件及目录结构
1.1 随便在那里建立一个新文件夹。

1.2 在建立好的新文件夹里按下图结构和名称建立子目录和文件。

  *文件先用记事本建立空的文本文件然后改名就可以了,以后再编辑这些文件的内容。
  *改名的时候注意调整系统的文件夹选项不要隐藏文件扩展名。

第二步 在后台系统设置里添加插件的相关信息
2.1 进后台->扩展->论坛插件->管理,按图填写相关内容并提交。

  *唯一标识符不要有空格和标点符号。

2.2 勾上“可用”后再提交一次,然后点最后边的“详情”进入下一步。

2.3 设置插件详细信息,设置好后点击提交,然后点击本页头部的“模块”进入下一步。

  *版权信息填你自己想填的内容^_^,不一定要跟我的一样
  *插件目录的名字要与第一步里建立的文件夹中/plugins/下的文件夹名称一致,本例中为helloworld。
  *插件目录末尾要加“/”,参照上图。
  *因为暂时没有用到数据库,所以插件数据表为空。
  *插件描述随便填不填、填什么都可以。

2.4 设置模块信息,提交。

  *程序模块要与第一步里建立的文件夹中/plugins/helloworld/下的*.inc.php文件的名称一致。本例中为helloworld。
  *菜单名称就是将来在论坛页面上显示的标签的名字,一定要填,不然标签显示不出来。
  *模块类型有好几种,详细介绍请参见DZ论坛用户手册。本例中选“前台调用(前台菜单)”。
  *使用等级即该模块(或“页面”)的访问权限,自酌。

2.5 如果一切顺利,现在插件管理里面就出现设定好的插件了。

  *如果要调整什么参数,点“管理”->相应插件的“详细”。

第三步 编辑插件文件内容,实现插件功能
3.1 编辑模版文件hw_helloworld.htm的内容并保存,参考如下:
  1. {template header}

  2. <div id="nav"><a href="$indexname">$bbname</a></div>
  3. <div style="width:960px;  background-color:#FFF;">
  4. <div class="mainbox">

  5. <table align="center" cellpadding="5">
  6.   <tr>
  7.     <td bgcolor="#999999">打个招呼~</td>
  8.   </tr>
  9.   <tr>
  10.     <td height="265"><div align="center">$say_string</div></td>
  11.   </tr>
  12. </table>


  13. </div></div>

  14. {template footer}
复制代码
  *模版文件是插件全部的样子或界面,也就是你的插件将以什么样的面貌呈现在用户的浏览器中。
  *模版文件实际上是插件程序模块的一部分,通过在程序模块(*.inc.php)中include()发挥作用。单独把模版从程序模块中分离出来是为了方便应用论坛的样式。如果对编程比较熟悉的话,这个和C++中.form文件和.CPP文件的关系有点类似。
  *本例中,模版文件hw_helloworld.htm首行{template header}的和最后一行的{template footer},分别引用了论坛的header和footer模版,代码第3行加入了导航条,也就是说,插件将在论坛页面中间部分出现,好像“插”在论坛里一样^_^。如果删除{template header}和{template footer},则页面将以很独立的面貌呈现,好像跟论坛一点关系也没有一样。
  *本例的模版文件包含了最基本元素,替换里面表格的内容就可以做出想要的插件界面。
  *模版文件后缀名是.htm,所以可以像普通htm页面一样用javascript来实现一些页面元素的动态化。如果在里面用<? ... ?>是不能被解释执行的,因为前面说过,模版文件要发挥作用,要在程序模块文件中include(),在PHP程序段里再引用PHP能不出错吗?也正是因为这一点,在模版文件里可以不用加<?...?>标记直接引用PHP的变量值。这其实就够了,因为模版文件其实就是用来处理表单提交和数据反馈用的,这也是PHP程序强大的地方。
  *基于上一点,我们在第13行,引入一个$say_string,具体见下一步。

3.2 编辑插件程序模块文件helloworld.inc.php并保存,参考内容:
  1. <?
  2. if(!defined('IN_DISCUZ')) {
  3.         exit('Access Denied');
  4. }

  5. if(!$discuz_uid) {
  6.         showmessage('not_loggedin', null, 'NOPERM');
  7. }

  8. include DISCUZ_ROOT.'./forumdata/cache/plugin_'.$identifier.'.php';

  9. $say_string = 'Hello World!' ;

  10. include template('hw_helloworld');

  11. ?>
复制代码
  *第1行到第8行是与论坛安全相关的语句,一定要写!DZ论坛的插件没有不写这几句的。
  *第10行是载入插件页面缓存,提高执行效率。
  *第12行,定义一个$say_string字符串变量,赋值“Hello World!”,插件运行以后,这个值就通过模版文件显示出来了。
  *第14行,将模版文件包含进来,让程序模块这个灵魂能有一个躯壳^_^。为了防止一些莫名其妙的错误,习惯性的将模版的include()放在最后。
  *程序模块文件helloworld.inc.php是插件程序的起点,调用它的是论坛的plugin.php。打个比方,plugin.php是传送带,只要论坛在运行,这个传送带就在转。我们只是把我们的插件放到了这个传送带上一起运转。

3.3 保存好所有文件,将plugins和templates用FTP上传,或直接Copy到论坛文件根目录下。

3.4 确保在后台 界面->界面设置->导航栏 启用了“插件”, 在 扩展->论坛插件->管理 启用了对应插件,清除一下缓存,刷新论坛首页,就能看到结果了。


最后,总结一下我理解的DZ论坛插件的运行机理与文件间逻辑关系图:




模版文件我用了前缀hw_是为了以后扩展模版,因为可以通过程序模块根据条件装载不同的模版,这个以后再说吧。

今天就先写到这里。

评分

8

查看全部评分

潇湘雪 发表于 2009-4-19 15:49:46 | 显示全部楼层
坐个沙发,学习了楼主!
回复

使用道具 举报

q-tech 发表于 2009-4-19 15:52:54 | 显示全部楼层
  1. if(!$discuz_uid) {
  2.         showmessage('not_loggedin', null, 'NOPERM');
  3. }
复制代码
并非必要的,这是登陆判断,如果插件允许游客访问,这句应该去掉
回复

使用道具 举报

 楼主| tomcash 发表于 2009-4-19 15:58:19 | 显示全部楼层
楼上补充的好
回复

使用道具 举报

11107207 发表于 2009-4-19 16:02:12 | 显示全部楼层
收藏再说
回复

使用道具 举报

选峰工作室 发表于 2009-4-19 16:02:36 | 显示全部楼层
支持一下。
回复

使用道具 举报

西湖河柳 发表于 2009-4-19 16:22:02 | 显示全部楼层
站位等作者更新教程
回复

使用道具 举报

feidaomail 发表于 2009-4-19 17:23:55 | 显示全部楼层
学习,期待便多的文章
回复

使用道具 举报

ydxiao 发表于 2009-4-19 20:01:30 | 显示全部楼层
回复

使用道具 举报

炼狱重生 发表于 2009-4-19 20:07:55 | 显示全部楼层
好贴,收藏了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-11-15 18:44 , Processed in 0.040975 second(s), 3 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

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