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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

在主题列表那里实现版主已回的功能

[复制链接]
myc508 发表于 2010-1-18 20:24:22 | 显示全部楼层 |阅读模式
本帖最后由 myc508 于 2010-01-19 08:29 编辑

要我实现一个版主已回的功能,实际就是看是“客服小组”的成员回复帖子就在主题那里显示一下消息,如图。
Discuz 后台没有设计这个功能,只好自力更生了。



准备一张图片,我安排在 /images/other/hf.gif (other 目录得自己建)

数据库准备:
threads 表新建 adminreply 字段,在数据库里执行下句 SQL 即可。

alter table `cdb_threads` add column `adminreply` tinyint (1) DEFAULT '0' NOT NULL  after `supe_pushstatus`


[newreply.inc.php]
文件存放路径:/include/newreply.inc.php

我打算在回复的时候判断并做处理,幸好 Discuz 代码回复操作的几个地方都是调用这一个文件,所以好改很多。
大约 353 行的位置,在“ updatepostcredits('+', $discuz_uid, $replycredits); ”那行代码之前,“ } else { ”代码之后,插入

  1. $groupid = $db->result_first("SELECT groupid FROM cdb_members WHERE username='$author' LIMIT 1");
  2. if(20 == $groupid){
  3.         $adminreply = "adminreply=adminreply+1,";
  4. }
  5. $db->query("UPDATE {$tablepre}threads SET $adminreply lastposter='$author', lastpost='$timestamp', replies=replies+1 ".($attachment ? ", attachment='$attachment'" : '').", subscribed='".($subscribed || $newsubscribed ? 1 : 0)."' WHERE tid='$tid'", 'UNBUFFERED');
复制代码
[forumdisplay.htm]
文件存放路径:/templates/default/forumdisplay.htm

大约 247 行,在“ <!--{if $thread['attachment'] == 2}--> ”那行代码之前,“ <!--{/if}--> ”代码之后,插入

<!--{if $thread['adminreply'] > 0}-->
[<span><font color="#FF0000"><b>{lang my_reward_reply}</b></font>:<!--{$thread['adminreply']}-->{lang my_reward_unit}</span>]<img src="images/other/hf.gif" style="vertical-align:middle;margin:0 8px;" />
<!--{/if}-->


[templates.lang.php]
文件存放路径:/templates/default/templates.lang.php

找个地方插入 'my_reward_reply' => '解答', 即可

我放的位置是这样的:

  1. 'my_reward_unsolved' => '未解决',
  2. 'my_reward_reply' => '解答',
  3. 'my_reward_questioner' => '提问者',
复制代码
[topicadmin.php]
文件存放路径:/

删除的时候也要注意一下,可能客服把自己回复的帖子删了呢,所以回复次数的数据也要同时更新。
在“ $action == 'delpost' ”的逻辑里,大约 154 行的位置,在“ if($thread['special']) { ”代码之前,“ $db->query("DELETE FROM {$tablepre}posts WHERE pid IN ($pids)"); ” 代码之后,插入

  1. $adminreply = 0;
  2. $query = $db->query("SELECT groupid FROM {$tablepre}members WHERE uid IN (SELECT authorid FROM {$tablepre}posts WHERE tid='$tid')");
  3. while($row = $db->fetch_array($query)) {
  4.         if(20 == $row['groupid']){
  5.                 $adminreply++;
  6.         }
  7. }
  8. $db->query("UPDATE {$tablepre}threads SET adminreply='$adminreply' WHERE tid='$tid'");
复制代码
注意:
1、非 PHP 程序员还是不建议修改。
2、此修改仅限 7.0.0 版本,其他版本不保证同理。
3、你可能注意到了“ 20 == $groupid ”和“ 20 == $row['groupid'] ”这两句,我这里的 “客服小组” 是 20,但不意味着你的数据也是 20,
   具体到 cdb_usergroups 数据表里查你想要的 groupid 值。
4、此文仅供参考,我不是 Discuz 的内部人员,所以不对代码的正确性负责,我只能说我尽力了,如果你发现有什么错,也可以向我指出。

不好意思,该文应该放在 “Discuz!-插件Hack” 版块,放错位置了,版主移一下?
雨宫白 发表于 2010-4-9 19:30:38 | 显示全部楼层
谢谢楼主.收藏了 呵呵
回复

使用道具 举报

laeis 发表于 2011-8-9 12:02:09 | 显示全部楼层
LZ 7.2里面试了没反映,有其它朋友7.2版本装过吗
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-14 15:31 , Processed in 0.023908 second(s), 3 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

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