首先声明。该教程为2010年本人写的一篇关于插件制作的教程。该教程仅为简单的利用discuz插件机制来实现一个静态页面的插件。discuz插件机制不会根据版本而发生质变。所以该教程在后期版本中仍可实现。只不过需注意展示方式(css)是否发生变化,如有略微变化仅需要对样式进行调整即可。 接下来.我们就已 "扩展中心"插件为例 制作一个简易,却很实用的论坛扩展插件. 首先.打开论坛后台: 插件 -> 插件 -> 设计新插件 ![](/uploads/attachment/1/202209/02/d8fb3c2d4bb870b66b6d3edc93a2ed8b.png) 注:唯一标识符提交后.将不能再次修改.提交后,会切换到插件的设置页面.如果不涉及到其他编码.可以不选用"插件语言包" 接下来.我们就可以开始添加插件的模块文件了. 打开程序目录:/source/plugin/ 建立新文件包 dst_Expand (这里的文件包名要与唯一标识符一致) 第一步.我们先做一个admincp.inc.php 在/source/plugin/唯一标识符/下 新建一个文件 admincp.inc.php 因为扩展中心不需要后台设置 所以该文件不需要编写内容 只需复制一下内容即可 ```php <?php if(!defined('IN_DISCUZ')) { exit('Access Denied'); } ?> ``` 文件写好后.返回后台的模块设置.按下图样式填写: ![](/uploads/attachment/1/202209/02/cb05896f84c4b80c38d4ff29c2836012.png) 写好之后点击提交.返回到插件列表页.点击开启.后台部分便完成了. 之后开始编写其他模块文件 返回 设计 -> 模块 按下图添加新模块 ![](/uploads/attachment/1/202209/02/49e2e8a6d957ec1171b8e159bab341ee.png) 添加完毕后 界面 -> 导航栏 -> 选择"扩展" 可用 在/source/plugin/唯一标识符/下 新建一个文件 Expand.inc.php 在里面编写 ```php <?php /** * [New.DST] (C)2010-2011 New PHP Support Forum * This is NOT a freeware, use is subject to license terms * * $Id: Expand.inc.php 2010-07-31Z [DST]ZannYount $ */ if(!defined('IN_DISCUZ')) { exit('Access Denied'); } include template("dst_Expand:Expand"); ?> ``` 其中 > include template("dst_Expand:Expand"); 1. template:表示dst_Expand插件文件包目录下的模板文件 2. dst_Expand:表示该插件的唯一标识符 3. Expand:表示template下的模板文件名 接下来 在dst_Expand插件文件包目录下新建新文件包 template 在 template 文件包下新建文件 Expand.htm 在 Expand.htm 文件里 编写 ```html {template common/header} <div id="wp" class="wp"> <div id="pt" class="wp"><a href="index.php" class="nvhm">$_G[setting][bbname]</a>扩展中心</div> 这里是内页所显示的内容 </div> {template common/footer} ``` 其中 1. {template common/header} 表示调用页头文件 2. `<div id="pt" class="wp"><a href="index.php" class="nvhm">$_G[setting][bbname]</a> › 扩展中心</div>` 表示: ![](/uploads/attachment/1/202209/02/7dbfa1b6441bfa993146e8b13321548c.png) 3. {template common/footer} 表示调用页底文件 这样, 一个内页就算完成了. 接下来,我们就根据上面的教程制作一个扩展中心的内页 template 文件包下的 Expand.htm 可以做任何的形式,只要你熟悉CSS和DIV 下面,贴出扩展中心的代码 把上面教程中 "这里是内页所显示的内容" 替换成 ```html <link rel="stylesheet" type="text/css" href="source/plugin/dst_Expand/template/Expand.css"> <div id="ct" class="wp cl"> <div class="mn mw"> <div class="bm bml"> <div class="bm_c cl"> <div id="forum_rules"> <div class="pbm xg2"> <ul class="tb cl"> <li id="Id_About_Us"> <a href="plugin.php?id=dst_Expand:Expand&to=Id_About_Us">关于我们</a></li> <li id="Id_Team_News"> <a href="plugin.php?id=dst_Expand:Expand&to=Id_Team_News">团队动态</a></li> <li id="Id_License_Agreement"> <a href="plugin.php?id=dst_Expand:Expand&to=Id_License_Agreement">授权协议</a></li> <li id="Id_Team_Rules"> <a href="plugin.php?id=dst_Expand:Expand&to=Id_Team_Rules">团队规章</a></li> <li id="Id_Business_Support"> <a href="plugin.php?id=dst_Expand:Expand&to=Id_Business_Support">商业支持</a></li> <li id="Id_Partners"> <a href="plugin.php?id=dst_Expand:Expand&to=Id_Partners">合作伙伴</a></li> <li id="Id_Team_Concept"> <a href="plugin.php?id=dst_Expand:Expand&to=Id_Team_Concept">团队理念</a></li> <li id="Id_Contact_us"> <a href="plugin.php?id=dst_Expand:Expand&to=Id_Contact_us">联系我们</a></li> <li id="Id_Site_Map"> <a href="plugin.php?id=dst_Expand:Expand&to=Id_Site_Map">网站地图</a></li> <li id="Id_Advertising"> <a href="plugin.php?id=dst_Expand:Expand&to=Id_Advertising">广告服务</a></li> <li id="Id_Site_Help"> <a href="plugin.php?id=dst_Expand:Expand&to=Id_Site_Help">网站帮助</a></li> </ul> <br /> <!--{if $_G['gp_to'] == 'Id_Team_News'}--> {template dst_Expand:Id_Team_News} <!--{elseif $_G['gp_to'] == 'Id_License_Agreement'}--> {template dst_Expand:Id_License_Agreement} <!--{elseif $_G['gp_to'] == 'Id_Team_Rules'}--> {template dst_Expand:Id_Team_Rules} <!--{elseif $_G['gp_to'] == 'Id_Business_Support'}--> {template dst_Expand:Id_Business_Support} <!--{elseif $_G['gp_to'] == 'Id_Partners'}--> {template dst_Expand:Id_Partners} <!--{elseif $_G['gp_to'] == 'Id_Team_Concept'}--> {template dst_Expand:Id_Team_Concept} <!--{elseif $_G['gp_to'] == 'Id_Contact_us'}--> {template dst_Expand:Id_Contact_us} <!--{elseif $_G['gp_to'] == 'Id_Site_Map'}--> {template dst_Expand:Id_Site_Map} <!--{elseif $_G['gp_to'] == 'Id_Advertising'}--> {template dst_Expand:Id_Advertising} <!--{elseif $_G['gp_to'] == 'Id_Site_Help'}--> {template dst_Expand:Id_Site_Help} <!--{else}--> {template dst_Expand:Id_About_Us} <!--{/if}--> </div> </div> </div> </div> </div> </div> <script type="text/javascript"> <!-- var ishave=true; var isset=false; querystring=document.location.search; lo=querystring.indexOf('to='); if (lo>0) { var result=querystring.substr(lo+3); if (result=="") ishave=false; } else { ishave=false; } divob=document.getElementById('forum_rules'); lis=divob.getElementsByTagName('li'); if (ishave) { for (var i=0; i<lis.length; i++) { if (lis[i].id==result) { lis[i].className="a"; isset=true; break; } } } else { lis[0].className="a"; } if (!isset) lis[0].className="a"; //--> </script> ``` 下面 我来详细的解剖一下上面的导航栏的写法 在上面的导航栏效果中: `<li id="Id_About_Us"> <a href="plugin.php?id=dst_Expand:Expand&to=Id_About_Us">关于我们</a></li>` href="" 中的路径 表示的是各个分类的路径 关于我们 则表示的导航栏的文字 而下面 `<!--{if $_G['gp_to'] == 'Id_Team_News'}-->{template dst_Expand:Id_Team_News}` 等等中的 `{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 这个是"关于我们"的文件 新建好以后 我们在文件中任意输入任何文字内容 ![](/uploads/attachment/1/202209/02/b3e5ab8d6c611e4835bfb2d454b4d304.png) ![](/uploads/attachment/1/202209/02/b2c69d7cde461ae4fec7510738a439d0.png) 以上,我们就可以根据上述的教程,制作出一个简单的"扩展中心"插件了 当然,如果你可以熟练的运用CSS+Div 的话.还可以做出更精美的效果.