Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

[教程]制作你的帖子管理功能 For 4.1

[复制链接]
sw08 发表于 2006-6-15 21:06:26 | 显示全部楼层 |阅读模式
我这里说的帖子管理,是指包括批量管理和单帖管理在内的。例如像置顶、精华等等~或者有人很想制作一个自己的帖子管理。我以前曾经做过沉底和批量修改阅读权限售价的功能。不过我感觉这个功能制作教程很有必要公开下~各位想做自己的帖子管理的人,都来看下。

这个教程的适合对象为中等DZ用户~初等新手或许要对DZ的文件还要熟悉下。


、首先先修改语言包~比较简单的东西。
打开templates.lang.php,随便找一行加上例如:
'admin_rope' => '修改权限',
'admin_ropes' => '修改帖子阅读权限及售卖积分',


语言包的内容可以根据你的需要多加几行,前面的例如admin_rope是语言标示符,这个一定要记住,后面的中文可以自己改。

然后再打开 modactions.lang.php,随便找行加上,如下面:
'ROP' => '修改权限',


ROP是管理名称代号,长度为3个字符,一定要记住,后面的程序都看这个的,后面是该类管理项目的名称,最好简短些。

保存~修改完语言包了


、然后先从PHP程序下手,毕竟修改少些。
PHP文件改来改去都只会有一个文件topicadmin.php,所以请打开它,开始进行修改。

首先确定你的这个管理的英文名称代号,如code,number等等。决定好后(这里用rope做例子)
找到:
  1. if(($action == 'moderate' && $fid) || in_array($action, array('delete', 'move', 'highlight', 'close', 'stick', 'digest'))) {
复制代码


在'delete',后面加上'rope',
rope是你的管理动作代号~
也就是把上面那句替换成:

  1. if(($action == 'moderate' && $fid) || in_array($action, array('delete', 'rope', 'move', 'highlight', 'close', 'stick', 'digest'))) {
复制代码


然后再找到:
  1. if(empty($moderate) || !is_array($moderate) || !in_array($operation, array('delete', 'move', 'highlight', 'type', 'close', 'stick', 'digest')) || (!$allowdelpost && $operation == 'delete') || (!$allowstickthread && $operation == 'stick')) {
复制代码


修改方法同上,假如是我(rope),就替换成:
  1. if(empty($moderate) || !is_array($moderate) || !in_array($operation, array('delete', 'rope', 'move', 'highlight', 'type', 'close', 'stick', 'digest')) || (!$allowdelpost && $operation == 'delete') || (!$allowstickthread && $operation == 'stick')) {
复制代码


接着开始加单个帖子的管理,就是浏览帖子最下面的管理选项那种:
找到:
  1. elseif($action == 'bump') {
  2. 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     //无须修改~
                );
        }

}


如果你懂数据库操作的话,应该不是很难的,基本是套来的程序。写好后继续下面的步骤~
下面的是批量管理中的程序~
先找到:

  1. 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,找到:
  1. <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
找到:

  1. <!--{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
找到:(一共有两个,别忘了修改都是一样的)

  1. {lang admin_delthread}
复制代码


在下面加:
<!--{elseif $operation == 'rope'}-->
{lang admin_rope}


老规矩,rope是管理英文代号,下面的admin_rope是语言显示,具体看语言包。

然后再找到:

  1. <!--{elseif $operation == 'close'}-->
  2.         <tr>
  3.         <td class="altbg1">{lang action}:</td>
  4.         <td class="altbg2">
  5.                 <input type="radio" name="close" value="0" $closecheck[0]> {lang admin_open}     
  6.                 <input type="radio" name="close" value="1" $closecheck[1]> {lang admin_close}
  7.         </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 &raquo; {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}


、最后,你自己制作的帖子管理功能完成了,不仅可以正常显示管理记录,同时系统统计会自动加上这个类别的管理操作次数。如果你去统计——版主管理统计看下,会发现系统自动为你加了一行你自己设计的帖子管理统计,很方便吧~

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
Liuxff 发表于 2006-6-15 21:08:01 | 显示全部楼层
safa
回复

使用道具 举报

reeding 发表于 2006-6-15 21:17:28 | 显示全部楼层
厉害啊
回复

使用道具 举报

TaRot! 发表于 2006-6-15 21:22:57 | 显示全部楼层
那就亲下,哇哈哈。
回复

使用道具 举报

全球通 发表于 2006-6-15 22:02:49 | 显示全部楼层
楼主有心了
回复

使用道具 举报

肯得基 发表于 2006-6-15 22:13:32 | 显示全部楼层
好文章啊。
回复

使用道具 举报

lele521 发表于 2006-6-15 22:20:05 | 显示全部楼层
老龙大哥能不能帮写一个简单的HTM代码啊
回复

使用道具 举报

一杯苦咖啡 发表于 2006-6-15 22:37:58 | 显示全部楼层
第四步是什么意思!不懂!
回复

使用道具 举报

hydeist 发表于 2006-6-15 22:44:54 | 显示全部楼层
有意思哦!老龙,每天写一些基本的PHP,我肯定看,也是一种人性化的学习了
回复

使用道具 举报

0315 发表于 2006-6-15 22:59:31 | 显示全部楼层
这个不错
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-11-25 18:53 , Processed in 0.031837 second(s), 4 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表