让Discuz!发帖际遇不可编辑

标签:Discuz!, PHP

发帖际遇这个插件确实很有趣,但有个缺点,就是际遇是保存在帖子内容里的,因此会员可以随意编辑。
其实只要在posts表里增加一个event字段,然后显示该字段的内容即可。

修改方法如下:
  1. 由于修改的文件较多,并涉及到数据库操作,建议先关闭论坛,并备份数据库。
  2. 去网站后台给posts表(一般是cdb_posts)添加一个event字段,类型为varchar,长度255(如果你的际遇很短,也可以设小些),可为空(null)。
  3. 编辑include/event.inc.php文件,找到:eval("\$event = \"$event\";");,在下面加上:
    $db->query("UPDATE {$tablepre}posts SET event='{$event}' WHERE pid='{$pid}'");
    其实下面的代码还能压缩下,if ($final_show)那段代码也可删去。
  4. 编辑include/newthread.inc.php和include/newreply.inc.php,把require_once('event.inc.php');移动到这段代码下面:
    $pid = $db->insert_id();
  5. 编辑模板文件夹下的viewthread.htm和viewthread_special_post.htm文件,搜索$post[message],在下面加上这段代码:
    <!--{if $post['event']}-->
    	<div class="event">发帖际遇:$post[event]</div>
    <!--{/if}-->
    可以自己调整位置,不懂的话就乱改,然后刷新看位置。
  6. 编辑模板文件夹下的css_append.htm文件,在最下面加上
    .event { width: 500px; color: #999; border-top: 1px solid #ccc; margin-top: 8px; padding-top: 8px; }
  7. 如果你想让Archiver中也显示际遇,可以编辑archiver/include/thread.inc.php。搜索:
    $query = $db->query("SELECT p.author, p.dateline, p.subject, p.message, p.anonymous, p.status,
    在后面加上p.event,
    再搜索:
    echo "<p class=\"author\"><strong>$post[author]</strong> $lang[post_time] $post[dateline]</p>\n$post[message]";
    在下面加上:
    if ($post['event']) echo "<div class='event'>发帖际遇:$post[event]</div>";
  8. 去后台更新缓存,重新开启论坛。

最后说下不足之处:
  1. 特殊主题(如投票帖)的楼主不会显示际遇。因为暂时没找到修改之处。
  2. event字段和event表有数据冗余。不过修改太麻烦,需要改字段和显示方式,所以懒得弄了。

0条评论 你不来一发么↓

    想说点什么呢?