您现在的位置是:首页 > cms教程 > Discuz教程Discuz教程
discuz主题插件开发步骤及误区
千萍2025-07-02Discuz教程已有人查阅
导读discuz作为国内流行的论坛系统,可谓造福了不少趣味相投的网友们。它让天南地北、国内外有着共同兴趣爱好的人们聚集在一起,分享彼此的喜怒哀乐、心得体会。然而作为discuz的使用者之一
discuz作为国内流行的论坛系统,可谓造福了不少趣味相投的网友们。它让天南地北、国内外有着共同兴趣爱好的人们聚集在一起,分享彼此的喜怒哀乐、心得体会。然而作为discuz的使用者之一,还是个码农,然而对discuz的系统架构和二次开发了解得并不多。前段时间有个朋友找到我说能不能帮忙开发一个特殊主题插件,虽然自己没开发过discuz的插件,但就discuz的流行程度而言,相信开发资料和开发群体应该不少,于是就答应了。
开发之前网上搜索了一通资料,找到discuz官方二次开发文档看了看,然后又找来一些其它插件参考了下,于是就开干了。由于开发的是一个特殊主题的插件,并利用discuz官方提供的开发工具生成了个简单的插件
我们看看怎么开发一个特殊主题的插件吧,要是想直接看我犯了哪样的愚蠢错误,你可以直接拉到文章的末尾。
一、插件开发步骤:
1、下载插件开发工具并创建插件:
插件开发工具下载并解压至web根目录。然后通过http://你的域名/develop.php访问插件开发工具,我的是http://127.0.0.1:8080/develop.php。点击“创建新插件”,然后一步步根据提示填写即可。
此处,你还可以检测插件前缀是否被占用,方便后续发布到插件市场。编辑脚本这一步填写自身的特殊脚本名称即可。
创建完成以后可以通过设计脚本,导出插件包。
这样就已经将一个插件的原型都生成了,将它拷贝到/source/plugin/目录并解压。
2、开启开发者模式并设置特殊主题
开启开发者模式,在config/config_global.php 后边填一行$_config['plugindeveloper'] = 1;值为1表示开启开发者模式,为2则表示同时开启潜入点提示。填写完成之后刷新后台管理界面,依次找到应用-->插件-->找到刚刚创建的插件并点击设计,即可编辑刚刚创建的插件脚本了。这里仍然需要设置一下特殊主题。
程序模块名称为前面插件创建时填写的名称。我们可以看看gfpaimai.class.php的具体代码
3、设置板块权限
论坛-->板块管理,找到对应的板块-->编辑-->帖子选项、权限相关
4、设置用户组和管理组权限
用户-->用户组(管理组)-->选择需要编辑的用户组-->批量编辑-->勾选可以发布特殊主题的用户组
至此,没什么意外的话,就可以发帖了;相信大部分开发者到这一步也可以发帖了。可是偷懒的我,必然要为这个偷懒付出代价的。
二、我范的愚蠢错误?还是discuz本身的bug呢?
上诉步骤完成以后,为了快速地看看效果。直接从别的插件里面复制了一个模板newthread.htm到template目录下,然后修改了gfpaimai.class.php的newthread函数,让其加载自定义模板。
去掉自定义模板查看是否可以获取message的内容,也就是去掉newthread函数的
好了,既然知道是自定义模板的问题。那么接下来看看是模板什么地方导致无法获取message吧。于是一段段代码去掉,之后的之后。你们也想到了的,它出现了。你可以想象下我当时的表情,欲哭无泪以外便是千万个 在奔腾。之后居然是一个hidden名称导致的,代码如下。
三、问题的反思
问题解决了,好吧,接下来反思下为什么会这样呢?
1、万恶的习惯,复制的代码,偷懒不得呀!越是想偷懒,越是花更多的时间来调试。
2、难道不同插件相同的name会导致其中一个用不了?如果是这样,为什么其他的相同又没事,偏偏就这个name为tradeflag的hidden值就如此呢?搞不懂,tell me why?不知道有没有哪位碰到过这样的问题,如果知道是什么原因不妨告诉我(又在偷懒了。)
开发之前网上搜索了一通资料,找到discuz官方二次开发文档看了看,然后又找来一些其它插件参考了下,于是就开干了。由于开发的是一个特殊主题的插件,并利用discuz官方提供的开发工具生成了个简单的插件
我们看看怎么开发一个特殊主题的插件吧,要是想直接看我犯了哪样的愚蠢错误,你可以直接拉到文章的末尾。
一、插件开发步骤:
1、下载插件开发工具并创建插件:
插件开发工具下载并解压至web根目录。然后通过http://你的域名/develop.php访问插件开发工具,我的是http://127.0.0.1:8080/develop.php。点击“创建新插件”,然后一步步根据提示填写即可。
此处,你还可以检测插件前缀是否被占用,方便后续发布到插件市场。编辑脚本这一步填写自身的特殊脚本名称即可。
创建完成以后可以通过设计脚本,导出插件包。
这样就已经将一个插件的原型都生成了,将它拷贝到/source/plugin/目录并解压。
2、开启开发者模式并设置特殊主题
开启开发者模式,在config/config_global.php 后边填一行$_config['plugindeveloper'] = 1;值为1表示开启开发者模式,为2则表示同时开启潜入点提示。填写完成之后刷新后台管理界面,依次找到应用-->插件-->找到刚刚创建的插件并点击设计,即可编辑刚刚创建的插件脚本了。这里仍然需要设置一下特殊主题。
程序模块名称为前面插件创建时填写的名称。我们可以看看gfpaimai.class.php的具体代码
<?php
/**
* [gfpaimai(gfpaimai.{modulename})] (C)2015-2099 Powered by 版权所有.
* Version: 1.0.0
* Date: 2015-7-11 10:05
*/
if(!defined('IN_DISCUZ')) {
exit('Access Denied');
}
class plugin_gfpaimai {
//TODO - Insert your code here
}
class threadplugin_gfpaimai {
public $name = 'XX主题'; //主题类型名称
public $iconfile = 'icon.gif'; //发布主题链接中的前缀图标
public $buttontext = '发布xx主题'; //发帖时按钮文字
/**
* 发主题时页面新增的表单项目
* @param Integer $fid: 版块ID
* @return string 通过 return 返回即可输出到发帖页面中
*/
public function newthread($fid) {
//TODO - Insert your code here
return 'TODO:newthread';
}
/**
* 主题发布前的数据判断
* @param Integer $fid: 版块ID
*/
public function newthread_submit($fid) {
//TODO - Insert your code here
}
/**
* 主题发布后的数据处理
* @param Integer $fid: 版块ID
* @param Integer $tid: 当前帖子ID
*/
public function newthread_submit_end($fid, $tid) {
//TODO - Insert your code here
}
/**
* 编辑主题时页面新增的表单项目
* @param Integer $fid: 版块ID
* @param Integer $tid: 当前帖子ID
* @return string 通过 return 返回即可输出到编辑主题页面中
*/
public function editpost($fid, $tid) {
//TODO - Insert your code here
return 'TODO:editpost';
}
/**
* 主题编辑前的数据判断
* @param Integer $fid: 版块ID
* @param Integer $tid: 当前帖子ID
*/
public function editpost_submit($fid, $tid) {
//TODO - Insert your code here
}
/**
* 主题编辑后的数据处理
* @param Integer $fid: 版块ID
* @param Integer $tid: 当前帖子ID
*/
public function editpost_submit_end($fid, $tid) {
//TODO - Insert your code here
}
/**
* 回帖后的数据处理
* @param Integer $fid: 版块ID
* @param Integer $tid: 当前帖子ID
*/
public function newreply_submit_end($fid, $tid) {
//TODO - Insert your code here
}
/**
* 查看主题时页面新增的内容
* @param Integer $tid: 当前帖子ID
* @return string 通过 return 返回即可输出到主题首贴页面中
*/
public function viewthread($tid) {
//TODO - Insert your code here
return 'TODO:viewthread';
}
}
?>
这样可以清晰地看到哪个函数是干什么用的,我们只需要将业务逻辑处理好即可。然而现实总是残酷的,对于discuz不熟悉的同学这将是一个巨大的坑。至此特殊主题的骨架可以说已经搭建好了,那么怎样才可以发帖呢?这个地方找了很久才知道是什么原因,之后发现是权限的问题。3、设置板块权限
论坛-->板块管理,找到对应的板块-->编辑-->帖子选项、权限相关
4、设置用户组和管理组权限
用户-->用户组(管理组)-->选择需要编辑的用户组-->批量编辑-->勾选可以发布特殊主题的用户组
至此,没什么意外的话,就可以发帖了;相信大部分开发者到这一步也可以发帖了。可是偷懒的我,必然要为这个偷懒付出代价的。
二、我范的愚蠢错误?还是discuz本身的bug呢?
上诉步骤完成以后,为了快速地看看效果。直接从别的插件里面复制了一个模板newthread.htm到template目录下,然后修改了gfpaimai.class.php的newthread函数,让其加载自定义模板。
public function newthread($fid) {
//TODO - Insert your code here
include template("gfpaimai:newthread");
//return 'TODO:newthread';
return $return;
}
修改验证函数
public function newthread_submit($fid) {
//TODO - Insert your code here
$message=getgpc('message');
//对内容判断
if( empty($message) || strlen($message)<15 ) {
showmessage("对不起,请填写交易内容和具体要求,不少于15字!");
}
}
此时,无论我编辑框里面输入多少个字符都显示,"对不起,请填写交易内容和具体要求,不少于15字!"。用var_dump($message)查看,message确实为空,$_GET的结果也为空。无论我怎么测试都是如此,对比了下其它插件,发现他们也都是这么写的。我就郁闷了,怎么会有这样的问题出来呢?难道又是权限问题?可是检查了一遍又一遍,没发现哪里有问题。这么来回不知道折腾了多少回,实在没辙,加几个Q群请教请教这方面的老大吧。加了几个群,大多都没人回。后来一个discuz插件开发群的老大“风子”的指点下找到了问题所在。去掉自定义模板查看是否可以获取message的内容,也就是去掉newthread函数的
include template("gfpaimai:newthread");
测试发现可以获取到message的内容,瞬间千万个 在奔腾。好了,既然知道是自定义模板的问题。那么接下来看看是模板什么地方导致无法获取message吧。于是一段段代码去掉,之后的之后。你们也想到了的,它出现了。你可以想象下我当时的表情,欲哭无泪以外便是千万个 在奔腾。之后居然是一个hidden名称导致的,代码如下。
<input type="hidden" name="tradeflag" id="tradeflag" value="1"/>
于是删掉,再次测试。尼玛的,果然出来了。于是改个名字再次测试,尼玛的,还是出来了。看到这,你有什么感受?反正我是欲哭无泪了,看来解决bug和产生新的bug是程序猿的宿命。三、问题的反思
问题解决了,好吧,接下来反思下为什么会这样呢?
1、万恶的习惯,复制的代码,偷懒不得呀!越是想偷懒,越是花更多的时间来调试。
2、难道不同插件相同的name会导致其中一个用不了?如果是这样,为什么其他的相同又没事,偏偏就这个name为tradeflag的hidden值就如此呢?搞不懂,tell me why?不知道有没有哪位碰到过这样的问题,如果知道是什么原因不妨告诉我(又在偷懒了。)
本文标签:
很赞哦! ()
下一篇:discuz的C::t方法实例
相关教程
图文教程
discuz3.2去掉forum.php
discuz3.2去掉forum.php的方法:首先依次点击“界面->导航设置->主导航”;然后建立个新导航;最后在域名设置中设置好自己的域名即可。
Discuz!NT分析Config实现方法介绍
其实很早的时候就想琢磨下Discuz!NT的一些东西,今天着重吧Discuz的有关于配置的信息研究了下,拿出来与大家共同分享下Discuz!NT在web.config自定义了httpModule
Windows7&IIS7.5部署Discuz步骤教程
组长说在内网部署一个论坛,这可难不倒我,装个Discuz嘛。部署环境就一台普通的PC,四核i3,Windows7。这就开搞了。
Discuz的NT与asp.net整合的方法
由于项目需要一个论坛,本来有CS的,在.net下很出名的国外开源论坛。但为了适应国内的风气,之后选用在国内如日中天的Discuz!NT。
相关源码
-
(自适应)电梯扶梯升降梯行业pbootcms企业网站模板(自适应手机版)响应式电梯扶梯类pbootcms模板 电梯生产企业绿色企业网站源码下载PbootCMS内核开发的网站模板,该模板适用于电梯、扶梯类等企业,查看源码 -
(自适应)帝国CMS7.5模板淘宝客导购博客文章源码本模板基于帝国CMS7.5内核深度开发,为电商导购类网站设计。采用响应式布局技术,确保在手机、平板及电脑端均能获得优质浏览体验。模板内置商品推荐模块与优惠信息展示区,可快速搭建专业导购平台。查看源码 -
(自适应)WordPress二次元博客主题SakurairoSakurairo主题为二次元内容创作者设计,提供丰富的动漫风格元素和个性化的展示效果。该主题在原有Sakura主题基础上进行了功能增强,支持多种自定义设置,满足动漫爱好者建立个人博客的需求。查看源码 -
(自适应)中英双语配线器材扎带线卡网站pbootcms模板免费下载为线缆管理、电气配线领域打造的响应式网站模板,采用PbootCMS内核开发,可快速搭建企业级产品展示平台,数据实时同步管理。查看源码 -
(PC+WAP)餐饮奶茶美食小吃招商加盟pbootcms模板源码下载为茶饮烘焙、小吃快餐等餐饮品牌打造的招商加盟系统,助力品牌快速拓展市场;双端pc+wap设计呈现加盟政策对比表。支持后台实时更新菜品图片、加盟费用等关键信息。查看源码 -
(自适应)蓝色五金制品配件管件pbootcms网站源码下载基于PbootCMS内核开发的五金行业专用模板,采用响应式设计架构,确保产品展示在各类移动设备上的呈现。通过模块化布局与工业风视觉设计,帮助五金企业高效展示产品规格、应用场景及技术支持,建立专业可靠的行业形象。查看源码
| 分享笔记 (共有 篇笔记) |
