热搜词
发表于 2010-5-18 09:29:08 | 显示全部楼层 |阅读模式
本帖最后由 灰儿 于 2010-5-18 10:57 编辑

就用最经典的项目名称Hello Word!来讲如何制作一个Discuz! 7.2的简单插件。
效果图:
01.jpg

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

1.2 在建立好的新文件夹里按下图结构和名称建立子目录和文件。
   02.jpg
  *文件先用记事本建立空的文本文件然后改名就可以了,以后再编辑这些文件的内容。
  *改名的时候注意调整系统的文件夹选项不要隐藏文件扩展名。

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

2.2 返回插件列表勾上“启用”后再提交一次,然后点最后边的“设计”进入下一步。

2.3 设置插件详细信息,点击本页头部的“设置”进入下一步。
   03.gif
  *插件目录的名字要与第一步里建立的文件夹中/plugins/下的文件夹名称一致,本例中为helloworld。
  *插件目录末尾要加“/”,参照上图。
  *因为暂时没有用到数据库,所以插件数据表为空。
  *插件描述随便填不填、填什么都可以。

2.4 设置模块信息,提交。
04.gif
  *程序模块要与第一步里建立的文件夹中/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 确保在后台 界面->界面设置->导航栏 启用了“插件”, 在 插件->论坛插件->插件列表 启用了对应插件,清除一下缓存,刷新论坛首页,就能看到结果了。
全部评论0
回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|Archiver|手机版|小黑屋|管理员之家 ( 苏ICP备2023053177号-2 )

GMT+8, 2024-12-23 05:27 , Processed in 0.175740 second(s), 25 queries .

Powered by Discuz! X3.5

Cpoyright © 2001-2024 Discuz! Team