本帖最后由 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 { ”代码之后,插入
- $groupid = $db->result_first("SELECT groupid FROM cdb_members WHERE username='$author' LIMIT 1");
- if(20 == $groupid){
- $adminreply = "adminreply=adminreply+1,";
- }
- $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' => '解答', 即可
我放的位置是这样的:
- 'my_reward_unsolved' => '未解决',
- 'my_reward_reply' => '解答',
- 'my_reward_questioner' => '提问者',
复制代码 [topicadmin.php]
文件存放路径:/
删除的时候也要注意一下,可能客服把自己回复的帖子删了呢,所以回复次数的数据也要同时更新。
在“ $action == 'delpost' ”的逻辑里,大约 154 行的位置,在“ if($thread['special']) { ”代码之前,“ $db->query("DELETE FROM {$tablepre}posts WHERE pid IN ($pids)"); ” 代码之后,插入
- $adminreply = 0;
- $query = $db->query("SELECT groupid FROM {$tablepre}members WHERE uid IN (SELECT authorid FROM {$tablepre}posts WHERE tid='$tid')");
- while($row = $db->fetch_array($query)) {
- if(20 == $row['groupid']){
- $adminreply++;
- }
- }
- $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” 版块,放错位置了,版主移一下? |