功能描述:每个会员都可以写下自己的心情,游客不可以留言。按时间倒序显示最新的留言。
我们的宗旨是
尽量不要去修改或过多依懒默认模板或程序,否则,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 = simplepage(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));
复制代码
注:这里没有写删除功能,有兴趣的话自己加一个试试^0^
|