我这里说的帖子管理,是指包括批量管理和单帖管理在内的。例如像置顶、精华等等~或者有人很想制作一个自己的帖子管理。我以前曾经做过沉底和批量修改阅读权限售价的功能。不过我感觉这个功能制作教程很有必要公开下~各位想做自己的帖子管理的人,都来看下。
这个教程的适合对象为中等DZ用户~初等新手或许要对DZ的文件还要熟悉下。
一、首先先修改语言包~比较简单的东西。
打开templates.lang.php,随便找一行加上例如:
'admin_rope' => '修改权限',
'admin_ropes' => '修改帖子阅读权限及售卖积分',
语言包的内容可以根据你的需要多加几行,前面的例如admin_rope是语言标示符,这个一定要记住,后面的中文可以自己改。
然后再打开 modactions.lang.php,随便找行加上,如下面:
ROP是管理名称代号,长度为3个字符,一定要记住,后面的程序都看这个的,后面是该类管理项目的名称,最好简短些。
保存~修改完语言包了。
二、然后先从PHP程序下手,毕竟修改少些。
PHP文件改来改去都只会有一个文件topicadmin.php,所以请打开它,开始进行修改。
首先确定你的这个管理的英文名称代号,如code,number等等。决定好后(这里用rope做例子)
找到:
- if(($action == 'moderate' && $fid) || in_array($action, array('delete', 'move', 'highlight', 'close', 'stick', 'digest'))) {
复制代码
在'delete',后面加上'rope',
rope是你的管理动作代号~
也就是把上面那句替换成:
- if(($action == 'moderate' && $fid) || in_array($action, array('delete', 'rope', 'move', 'highlight', 'close', 'stick', 'digest'))) {
复制代码
然后再找到:
- if(empty($moderate) || !is_array($moderate) || !in_array($operation, array('delete', 'move', 'highlight', 'type', 'close', 'stick', 'digest')) || (!$allowdelpost && $operation == 'delete') || (!$allowstickthread && $operation == 'stick')) {
复制代码
修改方法同上,假如是我(rope),就替换成:
- if(empty($moderate) || !is_array($moderate) || !in_array($operation, array('delete', 'rope', 'move', 'highlight', 'type', 'close', 'stick', 'digest')) || (!$allowdelpost && $operation == 'delete') || (!$allowstickthread && $operation == 'stick')) {
复制代码
接着开始加单个帖子的管理,就是浏览帖子最下面的管理选项那种:
找到:
- elseif($action == 'bump') {
- if(!submitcheck('bumpsubmit')) {
复制代码
在上面加你的程序,程序的大致外壳是:
elseif($action == 'rope') { //管理名称,例如我写rope,所以替换成rope
if(!submitcheck('ropesubmit')) { //等下做模板用,里面的ropesubmit可以自定义,先记住
include template('topicadmin_rope'); //等下做模板用(模板名称),里面的topicadmin_rope可以自定义,先记住
} else {
$modaction = 'ROP'; //还记得修改modactions.lang.php那步吗,写你的管理名称代号
$modpostsnum ++; //无须修改,计算管理帖子数用
//.............................这段是你执行帖子管理的操作,一般是数据库操作,但是一定要过滤tid,这里可以尽情发挥
$query = $db->query("SELECT tid, subject, lastposter, lastpost FROM {$tablepre}threads WHERE tid='$tid' LIMIT 1");
$thread = $db->fetch_array($query);
$thread['subject'] = addslashes($thread['subject']);
$thread['lastposter'] = addslashes($thread['lastposter']);
$db->query("UPDATE {$tablepre}threads SET lastpost='1000000000', moderated='1' WHERE tid='$tid'");
$db->query("UPDATE {$tablepre}forums SET lastpost='$thread[tid]\t$thread[subject]\t$timestamp\t$thread[lastposter]' WHERE fid='$fid'");
//.............................
$resultarray = array(
'redirect' => "forumdisplay.php?fid=$fid",
'reasonpm' => array(),
'modtids' => $thread['tid'],
'modlog' => $thread //无须修改~
);
}
}
如果你懂数据库操作的话,应该不是很难的,基本是套来的程序。写好后继续下面的步骤~
下面的是批量管理中的程序~
先找到:
- elseif($operation == 'close') {
复制代码
前面加上下面类似的程序,基本也是套壳的,把里面注释的内容按照你的需要去修改就成了:
elseif($operation == 'rope') { //管理的英文名称代号,记得吗?我是用rope
//……………帖子操作的代码,一般是数据库操作,可自己发挥,数据库操作记得过滤tid
if($ubp == 'bump'){
$bump = $timestamp;
}
if($ubp == 'unbump'){
$bump = 1;
}
$db->query("UPDATE {$tablepre}threads SET lastpost='$bump', moderated='1' WHERE tid IN ($moderatetids)");
//……………
$db->query("UPDATE {$tablepre}threads SET moderated='1' WHERE tid IN ($moderatetids)"); //一定要有,否则无法显示管理记录,无须修改
$modaction = 'ROP'; //很熟悉吧,记得了modactions.lang.php?替换你的管理代号
}
现在程序写完了,开始写模板了~
三、模板修改
模板修改比较麻烦,记住有下面的文件:
viewthread.htm(单帖管理用)
forumdisplay.htm(批量管理选项用)
topicadmin_moderate.htm(管理选项用)
还要单独加个模板文件,第四步教如何写
先修改viewthread.htm,找到:
- <option value="bump">{lang admin_bump}</option>
复制代码
在下面加上:
<option value="rope">{lang admin_rope}</option>
rope是修改PHP那步的管理英文代号
admin_bump是语言包那个,修改为
其中有
'admin_rope' => '修改权限',类似的一句,前面是admin_rope就把admin_rope用上去,实际浏览网页显示为:修改权限
然后再打开forumdisplay.htm
找到:
- <!--{if $allowdelpost}--><input type="radio" name="operation" value="delete"> {lang admin_delthread} <!--{/if}-->
复制代码
在下面加类似的:
<input type="radio" name="operation" value="rope"> {lang admin_rope}
rope是修改PHP那步的管理英文代号
别忘了语言包的~修改方法跟上面的一样
'admin_rope' => '修改权限',
现在帖子列表已经能看见这个批量管理选项了~
接着是下面的~
打开topicadmin_moderate.htm
找到:(一共有两个,别忘了修改都是一样的)
在下面加:
<!--{elseif $operation == 'rope'}-->
{lang admin_rope}
老规矩,rope是管理英文代号,下面的admin_rope是语言显示,具体看语言包。
然后再找到:
- <!--{elseif $operation == 'close'}-->
- <tr>
- <td class="altbg1">{lang action}:</td>
- <td class="altbg2">
- <input type="radio" name="close" value="0" $closecheck[0]> {lang admin_open}
- <input type="radio" name="close" value="1" $closecheck[1]> {lang admin_close}
- </tr>
复制代码
下面加这样的程序,套壳去替换相关内容即可,注意:
<!--{elseif $operation == 'rope'}--> //管理英文代号
<tr>
<td class="altbg1">{lang action}:</td>
<td class="altbg2">
<input type="radio" name="ubp" value="bump"> {lang admin_bump} //这两行就要联系你的程序了~具体不再说明
<input type="radio" name="ubp" value="unbump"> {lang admin_unbump}
</tr>
行了,现在已经能使用批量管理选项来管理帖子了。
四、单帖管理需要新添加模板文件(把文件保存在templates\default目录),文件大概的壳是这样的,但是很多内容需要根据实际情况而异
请注意你的文件名,记得PHP修改的某步有
if(!submitcheck('ropesubmit')) { //等下做模板用,里面的ropesubmit可以自定义,先记住
include template('topicadmin_rope'); //等下做模板用(模板名称),里面的topicadmin_rope可以自定义,先记住
现在有用了,文件名必须跟topicadmin_rope中定义的一致,例如topicadmin_rope.htm
其中模板里面的提交按钮的name属性必须要跟ropesubmit中的一致,这点相信懂HTML的人不难理解。
按照上面的基本要求,文件壳是这样的,中间的位置按照你的情况去加:
{template header}
<table cellspacing="0" cellpadding="0" border="0" width="{TABLEWIDTH}" align="center" style="table-layout: fixed">
<tr><td class="nav" width="90%" align="left" nowrap> <a href="index.php">$bbname</a> $navigation » {lang admin_unbump}</td>
<td align="right" width="10%"> <a href="#bottom"><img src="{IMGDIR}/arrow_dw.gif" border="0" align="absmiddle"></a></td>
</tr></table><br>
你的执行代码~
{template footer}
五、最后,你自己制作的帖子管理功能完成了,不仅可以正常显示管理记录,同时系统统计会自动加上这个类别的管理操作次数。如果你去统计——版主管理统计看下,会发现系统自动为你加了一行你自己设计的帖子管理统计,很方便吧~ |