您现在的位置是:首页 > cms教程 > Discuz教程Discuz教程
Discuz添加自定义模块
吴越潇2025-07-13Discuz教程已有人查阅
导读功能描述:每个会员都可以写下自己的心情,游客不可以留言。按时间倒序显示较新的留言。我们的宗旨是尽量不要去修改或过多依懒默认模板或程序,否则,Discuz!升级时会给你带来无尽的痛苦...
功能描述:每个会员都可以写下自己的心情,游客不可以留言。按时间倒序显示较新的留言。
我们的宗旨是尽量不要去修改或过多依懒默认模板或程序,否则,Discuz!升级时会给你带来无尽的痛苦...
目录
[隐藏]
1 设计表结构:
2 创建的文件:(./表示站点根目录)
3 moop.php
4 list.php
5 list.htm
6 publish.php
7 publish.htm
8 关于语言包的提取
设计表结构:
moop.php
语言包目录:./source/language
首先给我们的功能建一个专用目录:./source/language/mood
在专用目录下创建文件:
lang_template.php 名称是固定的 lang()函数会自动加载这个文件
我们的宗旨是尽量不要去修改或过多依懒默认模板或程序,否则,Discuz!升级时会给你带来无尽的痛苦...
目录
[隐藏]
1 设计表结构:
2 创建的文件:(./表示站点根目录)
3 moop.php
4 list.php
5 list.htm
6 publish.php
7 publish.htm
8 关于语言包的提取
设计表结构:
CREATE TABLE pre_mood_wall (
mid mediumint(8) unsigned NOT NULL auto_increment COMMENT '心情id',
uid mediumint(8) unsigned NOT NULL default '0' COMMENT '用户id',
username varchar(15) NOT NULL default '' COMMENT '用户名称',
dateline int(10) unsigned NOT NULL default '0' COMMENT '发布时间',
message text NOT NULL COMMENT '内容',
PRIMARY KEY(mid),
KEY dateline (dateline)
) ENGINE=MyISAM COMMENT='心情墙';
创建的文件:(./表示站点根目录)
./mood.php //入口文件
./source/module/mood/list.php //查看心情
./source/module/mood/publish.php //发布心情
./template/default/mood/list.htm //查看心情列表模板
./template/default/mood/publish.htm //发布心情模板
功能简单,所以没有涉及到专用函数和类的文件 (source/class目录和source/function目录)moop.php
<?php
// 定义应用 ID 全局记录当前用户所在位置,不需要可定义为0 不要省略
define('APPTYPEID', 0);
define('CURSCRIPT', 'mood');
//====================================
// 基础文件引入
//====================================
require './source/class/class_core.php';
$discuz = & discuz_core::instance();
//====================================
//模块定义以及模块缓存定义
//====================================
$modarray = array('list', 'publish');
// 判断 $mod 的合法性
$mod = !in_array($discuz->var['mod'], $modarray) ? 'list' : $discuz->var['mod'];
//定义当前模块常量
define('CURMODULE', $mod);
//====================================
// 加载核心处理,各程序入口文件代码相同
//====================================
$discuz->init();
//====================================
// 以下内容由各个模块根据需要自行撰写程序运行环境
// 位于核心处理与mod加载之前,可以处理一些各mod共用的一些数据,或入口权限判断等...
// 由于本功能只需要游客做发布的限制,所以判断就要放到module/mood/publish.php中去了。
//====================================
//===================================
//加载 mod
//===================================
require DISCUZ_ROOT.'./source/module/mood/'.$mod.'.php';
?>
list.php
<?php
// mod文件只能被入口文件引用,不能直接访问
if(!defined('IN_DISCUZ')) {
exit('Access Denied');
}
//初始化当前页码
$page = empty($_GET['page'])?1:intval($_GET['page']);
if($page<1) $page=1;
//分页
$perpage = 20;
$start = ($page-1)*$perpage;
//获取当前页的留言数据
$list = array();
$query = DB::query("SELECT * FROM ".DB::table('mood_wall')." WHERE 1 ORDER BY dateline DESC LIMIT $start, $perpage");
while($mood = DB::fetch($query)) {
$mood['dateline'] = dgmdate($mood['dateline'], 'u');
$list[] = $mood;
}
//获得一个简单的分页,只有上一页和下一页,这个不需要count()数据表中的所有记录
$multi =page(count($list), $perpage, $page, 'mood.php?mod=list');
//数据准备完毕,引入相应的模板,准备输出
include_once template("mood/list");
?>
list.htm
<!--//说明: 显示公共头部模板-->
<!--{template common/header}-->
<!--//说明: 开始显示留言-->
<div id="ct" class="wp cl">
<h1 class="mt">心情墙 - <!--{if $_G[uid]}--><a href="mood.php?mod=publish">发表心情</a><!--{/if}--></h1>
<div class="bm">
<!--{if $list}-->
<!--//说明: loop 循环一个数组 相当于foreach(){}-->
<!--{loop $list $mood}-->
<a href="home.php?mod=space&uid=$mood[uid]" target="_blank"><!--{avatar($value[authorid],small)}--></a><br>
<a href="home.php?mod=space&uid=$mood[uid]" title="$mood[username]" target="_blank" class="xi2">$mood[username]</a> 发表于: $mood[dateline]
<br>
心情: $mood[message]
<hr>
<!--{/loop}-->
<!--//说明: 显示准备好的分页链接-->
$multi
<!--{else}-->
<p class="emp">暂时没有记录...</p>
<!--{/if}-->
</div>
</div>
<!--//说明: 显示公共尾部模板-->
<!--{template common/footer}-->
publish.php
<?php
// mod文件只能被入口文件引用,不能直接访问
if(!defined('IN_DISCUZ')) {
exit('Access Denied');
}
// 游客不能发表心情的判断
if(!$_G['uid']) {
showmessage('抱歉,您尚未登录,无法进行此操作', '', array(), array('login' => 1));
}
if(submitcheck('submit')) {
$message = cutstr(dhtmlspecialchars(stripslashes($_POST['message'])), 150, ''); //截取150个字节的内容
DB::query("INSERT INTO ".DB::table('mood_wall')." (uid, username, dateline, message) VALUES ('$_G[uid]', '$_G[username]', '".TIMESTAMP."', '".daddslashes($message)."')");
showmessage('发表成功。', 'mood.php?mod=list');
}
//显示发布表单
include_once template("mood/publish");
?>
publish.htm
<!--//说明: 显示公共头部模板-->
<!--{template common/header}-->
<!--//说明: 开始显示表单-->
<div id="ct" class="wp cl">
<h1 class="mt"><a href="mood.php?mod=list">心情墙</a> - 发表心情</h1>
<div class="bm">
<form method="post" action="mood.php?mod=publish" class="pns">
<input type="hidden" name="formhash" id="formhash" value="{FORMHASH}" />
<!--FORMHASH 自动产生,submitcheck()函数要判断这个值-->
<textarea name="message"></textarea><br><br>
<input type="submit" class="pn vm" name="submit" value="发表" />
</form>
</div>
</div>
<!--//说明: 显示公共尾部模板-->
<!--{template common/footer}-->
关于语言包的提取以上示例中的汉字都是写到模板和程序代码里的。如果你想支持多种汉字编码,那么提取到统一的语言包中,与代码分离会方便很多。语言包目录:./source/language
首先给我们的功能建一个专用目录:./source/language/mood
在专用目录下创建文件:
lang_template.php 名称是固定的 lang()函数会自动加载这个文件
<?php
$lang = array (
'mood_name' => '心情墙',
'mood_publish' => '发表心情',
'mood_publish_succeed' => '发表成功。',
'not_loggedin' => '抱歉,您尚未登录,无法进行此操作',
);
?>
//注:'not_loggedin' 这个在公共的lang_message.php里已经存面
//理论上是可以直接使用showmessage('not_loggedin'...),但还是用自己的踏实。showmessage(lang('mood/template', 'not_loggedin')...)
//模板中的汉字替换成语言包
<h1 class="mt"><a href="mood.php?mod=list">心情墙</a> - 发表心情</h1>
变成
<h1 class="mt"><a href="mood.php?mod=list">{lang mood_name}</a> - {lang mood_publish}</h1>
//程序中使用语言包
showmessage('抱歉,您尚未登录,无法进行此操作', '', array(), array('login' => 1));
变成
showmessage(lang('mood/template', 'not_loggedin'), '', array(), array('login' => 1));
本文标签:
很赞哦! ()
相关教程
图文教程
discuz设置二次开发的方法
要设置Discuz二次开发,请执行以下操作:在 config/config_global.php 中启用二次开发 (ALLOW_MODULES = true)在 adminCP 中启用“允许二次开发”创建扩展目录和文件在
Linux怎么搭建Discuz论坛
首先确保服务器防火墙、selinux处于关闭状态此状态即为关闭将selinux=enforcing 改为 selinux=disabled注:改完保存退出,退出后getenforce查看依然是enforcing,重启系统即可)
Discuz!NT各个模块功能说明
Discuz中有24个Project,每个项目各自作为项目架构中的不同的功能。下面我们来各自的分析一下这些项目。(1)DNT中包含的项目(1)Discuz.Web该项目是DNT最终生成网站的项目。
Discuz!NT控件左侧导航控件分析
其实这个控件的核心基本都在JS上,而相关的数据绑定和显示却非常简单。而需要说明的是在Discuz!NT的1.0和2.0正式版,这个控件做过一些调整,当然改动也基本上是在JS上
相关源码
-
(自适应响应式)HTML5甲醛环境检测网站模板带在线留言和资料下载本模板为甲醛检测与环保科技企业开发,采用PbootCMS内核构建。首页集成空气质量数据可视化模块,服务流程采用时间轴展示设计,检测报告板块支持PDF在线预览功能查看源码 -
(PC+WAP)茶叶茶艺茶道茶文化pbootcms模网站源码下载本模板基于PbootCMS系统开发,为茶叶企业、茶艺培训机构设计,特别适合展示茶产品、茶道文化等内容。采用响应式技术,确保在不同设备上都能呈现优雅的茶文化氛围。查看源码 -
(自适应响应式)HTML5简繁双语电子元器件设备制造Pbootcms模板下载本模板为电子科技设备制造、电子元件生产等高科技企业设计,采用PbootCMS内核开发,具备简繁双语切换功能。模板设计充分考虑了电子科技行业的技术展示需求,能够专业呈现各类电子元器件、电路板、智能设备的参数规格和应用方案。查看源码 -
自适应手机版五金机械阀门设备通用行业网站模板该PbootCMS内核开发的网站模板适用于阀门设备、五金机械类企业,通过更换文字图片也可快速适配其他工业领域。采用响应式设计,确保PC端与手机端数据同步,操作便捷,并附带测试数据。查看源码 -
(自适应响应式)动力刀座五金机械设备pbootcms网站源码下载为动力刀座及五金机械企业定制的响应式网站框架,基于PbootCMS系统深度开发,助力传统制造企业实现数字化转型升级。采用手工编写的DIV+CSS前端架构,代码执行效率提升40%。查看源码 -
帝国cms题库问答学习平台模板知识付费网站源码+数据采集为教育机构、培训平台及在线学习场景设计,提供完整的题库管理与问答服务解决方案。支持多种题型展示与答案查询,满足不同层次的学习需求。查看源码
| 分享笔记 (共有 篇笔记) |