悬赏帖第二版动工
预计1月28日正式发布
建议还没有安装本插件的朋友暂时不要再安装第一版!
所有已发现的问题已经全部解决,所有操作都整理到一张帖子里了,后面那些跟帖就不用看了,我已经把它们都删掉了。
发现好象只有有问题的人才回帖来问,成功安装的也出来说一句哦。
附件里是所有改动过的文件,如果你以前没有装过任何插件,那么直接上传,1-14步都可以省了。
如果要手工改的话,就只上传images下面的文件吧。
注意,我用的论坛是UTF-8,请大家下载后把所有lang文件转化为GBK格式,否则可能出现乱码。
测试区1
插件演示:www.jiandanma.com
测试帐号:test 密码: test
测试帐号2:tryit 密码: 123456
请只在新手区测试,谢谢合作。
测试区2
插件演示:http://car.10000j.com/bbs
测试帐号:test 密码: test
测试帐号2:test1 密码: test1
测试帐号3:test2 密码: test2
功能说明:https://discuz.dismall.com/viewthread.php?tid=208803
有什么问题、BUG或是建议的话,请跟帖不要另开一帖,免得我漏过没看到,谢谢。
过年前比较忙,只能小修小补,寒假的时候,会做个第二版上来,有什么建议要及时提哦。 05.12.25 改动文件pms.lang.php,修正短消息显示错误,附件已重新上传
05.12.25 帖子末尾显示错误是我整理时的手误,如果您是之前直接复制viewthread.thm的,请重新下载附件并上传 感谢iceberg
05.12.25 改动文件post_editpost.htm 修正编辑帖子时显示不正常问题 附件已重新上传
05.12.23 改动文件misc.php 修正quote代码不能正常显示问题 附件已重新上传 感谢eor测试 第二版功能预订(近期较忙,预计一月底发布)
每增加一个功能都至少是在理论上会影响网速,所以最后会由大家投票决定是否需要:
1、功能:只能在特定论坛版块发布悬赏帖
影响网速:发帖
数据库改动:无
2、功能:悬赏帖发布、采纳、得分情况记录
影响网速:发帖、采纳
数据库改动:新增数据表,不改动原数据表架构
3、功能:防止作者修改“X楼作者XXX意见被采纳”信息
方案一:影响网速:查看帖子
数据库改动:posts数据表新增字段
方案二:强行关闭帖子
影响网速:几乎没有
数据数据库改动:无
4、功能:任意读者对所采纳意见有不同看法时“揪错”
功能三采用方案二时适用,不影响双方悬赏积分,可选短消息积分
影响网速:几乎没有
数据库改动:无
5、功能:版主强行“揪错”,可选扣罚双方积分,短消息通知
影响网速:几乎没有
数据库改动:无
6、重写:现在一共改了13个源文件,很多朋友都在叫累,仔细理了一下思路,发现很多文件其实可以单独拿出来写的,这样我的工作量大一点,但大家需要改动的地方就少很多。不过这样一来,第二版就不能和现在保持兼容了,我到时再想想办法
PS:最近单位的事情一大堆,可是还是老忍不住来这里看插件,我这几天再来的话,大家要记得骂我呀。
现在,我们开始吧:
1、修改POST.PHP
找到
- $price = isset($price) ? intval($price) : 0;
复制代码
在它后面插入
- //plugin question start
- $prize = isset($prize) ? intval($prize) : 0;
- $query = $db->query("SELECT extcredits$creditstrans FROM `cdb_members` where
- uid=".$discuz_uid);
- $row = $db->fetch_array($query);
- $maxprize=floor(($row['extcredits'.$creditstrans]-10)/2);
- $maxprize=($maxprize<$maxprice)?$maxprize:$maxprice;
- $maxprize2=$maxprize*2;
- //plugin question end
复制代码
2、修改include/newthread.inc.php
找到
在后面插入
找到
- include template('post_newthread');
复制代码
在前面插入
- plugin question end*/
-
- //plugin question start
- if(is_array($_DCACHE['icons'])) {
- $key = 1;
- foreach($_DCACHE['icons'] as $id => $icon) {
- if($icon=="iconq.gif"){
- $iconq= ' <input type="radio" name="iconid" id="iconqid"
- value="'.$id.'" '.'><img src="'.SMDIR.'/'.$icon.'">';
- }elseif($icon!="icona.gif"){
- $icons .= ' <input type="radio" name="iconid" value="'.$id.'"><img
- src="'.SMDIR.'/'.$icon.'">';
- $icons .= !(++$key % 10) ? '<br>' : '';
- }
- }
- }
- //plugin question end
复制代码
找到
- if(isset($poll) && $allowpostpoll && trim($polloptions)) {
复制代码
在前面插入
- //plugin question start
- $prize = $maxprize ? ($prize <= $maxprize ? $prize : $maxprize) : 0;
- if($prize > 0 && floor($prize * (1 - $creditstax)) == 0) {
- showmessage('post_net_price_iszero');
- }
- if($price==0 && $prize>0){
- $price=0-$prize;
- }
- $iconid=$prize>0 ? $iconqid : $_DCACHE['icons'][$iconid]=='iconq.gif' ? 0 : $iconid;
- //plugin question end
复制代码
找到
在后面插入
- //plugin question start
- if($price<-1){
- $db->query("UPDATE {$tablepre}members SET
- extcredits$creditstrans=extcredits$creditstrans+$price*2 WHERE uid='$discuz_uid'");
- }
- //plugin question end
复制代码
3、修改include/editpost.inc.php
找到
在后面插入
找到
- $query = $db->query("SELECT * FROM {$tablepre}posts WHERE pid='$pid' AND tid='$tid' AND
- fid='$fid'");
复制代码
在前面插入
- plugin question end*/
-
- //plugin question start
- $thread['prizedisplay'] = $thread['price'] == -1 ? 0 : 0-$thread['price'];
- $iconq = '';
- if(is_array($_DCACHE['icons']) && $isfirstpost) {
- $key = 1;
- $thread_icon=$_DCACHE['icons'][$thread['iconid']];
- if($thread_icon=="iconq.gif"||$thread_icon=="icona.gif"){
- $icons='<input type="radio" name="iconid" value="'.$thread
- ['iconid'].'"checked><img src="'.SMDIR.'/'.$thread_icon.'">';
- $show_none=1;
- }else{
- foreach($_DCACHE['icons'] as $id => $icon) {
- if($icon=="iconq.gif"){
- $iconq= ' <input type="radio" name="iconid" value="'.$id.'" '.
- ($thread['iconid'] == $id ? 'checked' : '').'><img src="'.SMDIR.'/'.$icon.'">';
- }elseif($icon!="icona.gif"){
- $icons .= ' <input type="radio" name="iconid" value="'.$id.'" '.
- ($thread['iconid'] == $id ? 'checked' : '').'><img src="'.SMDIR.'/'.$icon.'">';
- $icons .= !(++$key % 10) ? '<br>' : '';
- }
- }
- }
-
- }
- //plugin question end
复制代码
找到
在前面插入
- //plugin question start
- $prize =($maxprize ? ($prize <= $maxprize ? ($prize > 0-$thread
- ['price'] ? $prize : 0-$thread['price']) : $maxprize) : 0);
- if($prize > 0 && floor($prize * (1 - $creditstax)) == 0) {
- showmessage('post_net_price_iszero');
- }
- $price=$prize>0?0-$prize:$price;
- $iconid=$prize<=0 && ($_DCACHE['icons'][$iconid]=='iconq.gif'?
- 0:$iconid);
- //plugin question end
复制代码
4、修改templates/default/post_newthread.htm
在第一行插入:
- <!--plugin question start-->
- <style type="text/css">
- <!--
- #normalicon {
- position:absolute;
- z-index:0;
- }
- #questionicon{
- position:absolute;
- z-index:0;
- visibility: hidden;
- }
- -->
- </style>
- <script type="text/JavaScript">
- <!--
- function MM_findObj(n, d) { //v4.01
- var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
- d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
- if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
- for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
- if(!x && d.getElementById) x=d.getElementById(n); return x;
- }
- function MM_showHideLayers() { //v6.0
- var i,p,v,obj,args=MM_showHideLayers.arguments;
- for (i=0; i<(args.length-2); i+=3) if ((obj=MM_findObj(args[i]))!=null) { v=args[i+2];
- if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v=='hide')?'hidden':v; }
- obj.visibility=v; }
- }
- function question_layers(){
- if(document.input.prize.value<=0){
- MM_showHideLayers('normalicon','','show');MM_showHideLayers('questionicon','','hide');
- document.input.iconid[0].checked=true;
- document.input.price.contentEditable=true;
- MM_showHideLayers('prize1','','show');MM_showHideLayers('prize2','','hide');
- document.input.prize.value=0;
- }else{
- MM_showHideLayers('normalicon','','hide');MM_showHideLayers
- ('questionicon','','show');
- document.input.iconqid.checked=true;
- document.input.price.value=0;
- document.input.price.contentEditable=false;
- }
-
- }
- //-->
- </script>
- <!--plugin question end-->
复制代码
找到:
- <!--{if $maxprice}-->
- <tr>
- <td class="altbg1">{lang price}({$extcredits[$creditstrans][title]}):</td>
- <td class="altbg2"><input name="price" type="text" value="$price" size="6"> <span
- class="smalltxt">{$extcredits[$creditstrans][unit]} ({lang post_price_comment}<!--{if
- $maxincperthread}-->{lang post_price_income_comment}<!--{/if}--><!--{if $maxchargespan}-->
- {lang post_price_charge_comment}<!--{/if}-->
- )</span></td>
- </tr>
- <!--{/if}-->
复制代码
在后面插入
- <!--plugin question start-->
- <!--{if $maxprize>0}-->
- <tr>
- <td class="altbg1">{lang prize}({$extcredits[$creditstrans][title]}):</td>
- <td valign="bottom" class="altbg2"><input name="prize" value="$prize" type="text"
- onchange="question_layers()" size="6"><span class="smalltxt">{$extcredits[$creditstrans]
- [unit]}({lang post_prize_comment_zg}$maxprize{$extcredits[$creditstrans][unit]}{lang
- post_prize_comment_sb}$maxprize2{$extcredits[$creditstrans][unit]}{lang
- post_prize_comment_jt})</span></td>
- </tr>
- <!--{/if}-->
- <!--plugin question end-->
复制代码
找到
- <td class="altbg2"><input type="radio" name="iconid" value="0" checked> {lang none}
- $icons
复制代码
在前面(TO:kt600 这个确实是在前面而不能是在上面了^_^)
插入
- <!--plugin question start
复制代码
在后面插入
- plugin question end--><td class="altbg2" valign="top" height="30">
- <!--plugin question start-->
- <div id="normalicon" position: relative><input type="radio" name="iconid" value="0"
- checked>{lang none} $icons</div><div id="questionicon" position: relative>$iconq</div>
- <!--plugin question end-->
复制代码
5、修改post_editpost.htm
找到
把这句删掉
在后面插入
- <!--plugin question change "$maxprice" to "$maxprice && $thread['price']>=-1--">
- <!--{if $maxprice && $thread['price']>=-1}-->
复制代码
就是同一段:
- <!--{if $maxprice && $thread['price']>=-1}-->
- <tr>
- <td class="altbg1">{lang price}({$extcredits[$creditstrans][title]}):</td>
- <td class="altbg2">
- <!--{if $thread['price'] == -1 || $thread['freecharge']}-->
- <input type="text" name="price" size="6" value="$thread[pricedisplay]"
- disabled> <span class="smalltxt">{$extcredits[$creditstrans][unit]}
- <!--{if $thread['price'] == -1}-->({lang post_price_refunded})<!--{else}-->
- ({lang post_price_free})<!--{/if}-->
- </span></td>
- <!--{else}-->
- <input type="text" name="price" size="6" value="$thread[pricedisplay]"> <span
- class="smalltxt">{$extcredits[$creditstrans][unit]} ({lang post_price_comment}<!--{if
- $maxincperthread}-->{lang post_price_income_comment}<!--{/if}--><!--{if $maxchargespan}-->
- {lang post_price_charge_comment}<!--{/if}-->)</span></td>
- <!--{/if}-->
- </tr>
- <!--{/if}-->
复制代码
在后面插入:
- <!--plugin question start-->
- <!--{if $maxprice && $thread['price']<-1 && $_DCACHE['icons'][$thread['iconid']]
- =='iconq.gif'}-->
- <tr>
- <td class="altbg1">{lang prize}({$extcredits[$creditstrans][title]}):</td>
- <td class="altbg2">
- <input type="text" name="prize" size="6" value="$thread[prizedisplay]"> <span
- class="smalltxt">{$extcredits[$creditstrans][unit]} ({lang post_price_comment}<!--{if
- $maxincperthread}-->{lang post_price_income_comment}<!--{/if}--><!--{if $maxchargespan}-->
- {lang post_price_charge_comment}<!--{/if}-->)</span></td>
- </tr>
- <!--{/if}-->
- <!--plugin question end-->
复制代码
6、修改templates.lang.php
找到- 'price_thread' => '浏览需支付',
复制代码
在后面插入
- //plugin question start
- 'prize' => '悬赏',
- 'post_prize_comment_zg' => '最高',
- 'post_prize_comment_sb'=>',双倍预扣',
- 'post_prize_comment_jt'=>',结帖返还',
- 'prize_thread'=>'解答可获得',
- 'true_post'=>'采纳',
- 'prize_end'=>'悬赏问题已解决',
- //plugin question end
复制代码
7.修改template/default/misc.lang.php
找到
- 'post_hidden' => '**** 本内容被作者隐藏 *****',
复制代码
在前面插入
- //plugin question start
- 'plugin_question_misc_ok'=>' [quote]第$number 楼作者 $uname 的意见被采纳[/quote]',
- //plugin question end
复制代码
8.修改template/default/pms.lang.php
拉到最底下,找到
在上面那句最后加逗号。
在前面插入
- //plugin question start
- 'reason_question_subject' => '[Discuz!] 您的悬赏帖答案被认可了',
- 'reason_question_message' => '这是由论坛系统自动发送的通知短消息。
- [b]以下您所发表的答案被 [url={$boardurl}viewpro.php?uid={$discuz_uid}][i]{$discuz_user}[/i]
- [/url] 主题作者认可。[/b]
- [b]主题:[/b] [url={$boardurl}viewthread.php?tid={$thread[tid]}]{$thread[subject]}[/url]
- [b]所在论坛:[/b] [url={$boardurl}forumdisplay.php?fid={$fid}]$forum[name][/url]
- [b]加分:[/b] {$price}
- [b]留言:[/b] {$reason}
- 如果您对本次操作有异议,请与我取得联系。',
- 'reason_question_subject1' => '[Discuz!] 您的悬赏帖被强制结帖了',
- 'reason_question_message1' => '这是由论坛系统自动发送的通知短消息。
- [b]以下您所发表的悬赏被 [url={$boardurl}viewpro.php?uid={$discuz_uid}][i]{$discuz_user}[/i]
- [/url] 由于发布时间过久,且早已有了合适的答案,被强制结帖了。[/b]
- [b]主题:[/b] [url={$boardurl}viewthread.php?tid={$thread[tid]}]{$thread[subject]}[/url]
- [b]所在论坛:[/b] [url={$boardurl}forumdisplay.php?fid={$fid}]$forum[name][/url]
- [b]加分:[/b] {$price}
- [b]留言:[/b] {$reason}
- 如果您对本次操作有异议,请与我取得联系。',
- //plugin question end
复制代码
9.修改messages.lang.php
最前面:
找到
在后面插入
- //plugin question start
- 'hack_message'=>'您的非法操作已经被系统记录',
- 'plugin_question_misc_ok'=>'您已经采纳了 $number 楼作者 $uname 的意见',
- //plugin question end
复制代码
10修改template/default/viewthread.htm
找到- <!--{if $thread['price'] > 0}--> <a href="misc.php?
- action=viewpayments&tid=$tid">{lang price_thread} {$extcredits[$creditstrans][title]} <span
- class="bold">$thread[price]</span> {$extcredits[$creditstrans][unit]}</a> <!--{/if}-->
复制代码
在后面插入
- <!--plugin question start-->
- <!--{if $_DCACHE[icons][$thread['iconid']]=='iconq.gif' && $thread['price']< 0}-->
- {lang prize_thread} {$extcredits[$creditstrans][title]} <span class="bold">$thread[price]-
- </span> {$extcredits[$creditstrans][unit]}</a> <!--{/if}-->
- <!--{if $_DCACHE[icons][$thread['iconid']]=='icona.gif' && $thread['price']< 0}-->
- {lang prize_end} <!--{/if}-->
- <!--plugin question end-->
复制代码
找到- <!--{if $thread['modaction'] || $thread['blog'] || $thread['readperm'] || $thread
- ['price'] > 0}-->
复制代码
改成
- <!--{if $thread['modaction'] || $thread['blog'] || $thread['readperm'] || $thread
- ['price'] <> 0}-->
复制代码
找到- <!--{if $forum['ismoderator'] || $post['authorid'] == $discuz_uid}-->
复制代码
在前面插入
- <!--plugin question start-->
- <!--{if $_DCACHE[icons][$thread['iconid']]=='iconq.gif' && $thread['price']<0 &&
- $post['uid']<>$thread['authorid'] && $post['uid']<>$discuz_uid && ($forum['ismoderator'] ||
- $thread['authorid'] == $discuz_uid)}--><a href="misc.php?action=accept&tid=$tid&pid=$post
- ['pid']&uid=$post['uid']&number=$post['number']&uname=$post[author]"><img
- src="{IMGDIR}/true.gif" border="0" align="absmiddle" alt="{lang true_post}" /><!--{/if}-->
- <!--plugin question end-->
复制代码
11修改template/default/forumdisplay.htm
找到
- <!--{if $thread['price'] > 0}--> - [{lang price} {$extcredits[$creditstrans]
- [title]} <span class="bold">$thread[price]</span> {$extcredits[$creditstrans][unit]}]<!--
- {/if}-->
复制代码
在后面插入
- <!--plugin question start-->
- <!--{if $_DCACHE[icons][$thread['iconid']]=='iconq.gif' && $thread['price'] <
- 0}--> - [{lang prize} {$extcredits[$creditstrans][title]} <span class="bold">$thread[price]-
- </span> {$extcredits[$creditstrans][unit]}]<!--{/if}-->
- <!--{if $_DCACHE[icons][$thread['iconid']]=='icona.gif' && $thread['price'] <
- 0}--> - [{lang prize_end}]<!--{/if}-->
- <!--plugin question end-->
复制代码
12修改/misc.php
拉到最后
找到
- showmessage('undefined_action', NULL, 'HALTED');
复制代码
在前面插入
- //plugin question start
- if($action=="accept"){
- @require_once
- DISCUZ_ROOT.'./forumdata/cache/cache_forumdisplay.php';
- if($_DCACHE[icons][$thread['iconid']]=='iconq.gif' && ($discuz_uid==$thread
- ['authorid'] || $forum['ismoderator']) && $thread['price']<0 && $discuz_uid!=$uid){
- foreach($_DCACHE[icons] as $iconid=>$iconname){
- $icona = $iconname=='icona.gif' ? $iconid:$icona;
- }
- $message='plugin_question_misc_ok';
- $price=0-$thread['price'];
- $prize=floor($price*0.95);
- $db->query("UPDATE {$tablepre}members SET
- extcredits$creditstrans=extcredits$creditstrans+$price WHERE uid='$thread[authorid]'");
- $db->query("UPDATE {$tablepre}members SET
- extcredits$creditstrans=extcredits$creditstrans+$price WHERE uid='$uid'");
- $query=$db->query("SELECT message FROM {$tablepre}posts where tid='$tid' &&
- first=1");
- $result=$db->fetch_array($query);
- $post_message=$result['message'];
- @include_once language('misc');
- eval("\$post_message.= "$language[plugin_question_misc_ok]";");
- $db->query("UPDATE {$tablepre}posts SET message='$post_message',bbcodeoff=0 where
- tid='$tid' && first=1");
- $db->query("UPDATE {$tablepre}threads SET iconid=$icona WHERE tid='$tid'");
- sendpm($uid, 'reason_question_subject','reason_question_message');
- if($discuz_uid!=$thread['authorid']){
- sendpm($thread['authorid'],
- 'reason_question_subject1','reason_question_message1');
- }
-
- }else{
- $message="hack_message";
- }
- showmessage($message, "viewthread.php?tid=$tid");
- }else{
- //plugin question end
复制代码
在后面加上
- //plugin question start
- }
- //plugin question end
复制代码
13修改viewthread.php
最前面
找到
- require_once DISCUZ_ROOT.'./include/discuzcode.func.php';
复制代码
在后面插入
- //plugin question start
- @require_once DISCUZ_ROOT.'./forumdata/cache/cache_forumdisplay.php';
- //plugin question end
复制代码
14上传两个图标文件到/images/smilies
15用管理员帐号登录,进入系统设置,单击“帖子相关”中的“Smilies 编辑”,主题图标编辑,输入
iconq.gif,提交,再输入icona.gif,提交
16上传文件按钮图片true.gif到/images/default
17开启积分交易功能并给用户组添加交易权限,本程序是紧紧依付在买卖帖功能之上的,如果如果用户没有
帖子出售权限,则本功能也会无效
17给测试帐号输入足够的积分
18更新缓存
全部工作完成,现在可以使用这个插件了。
注意,为减少编程的工作量,如下设定不可更改:
1、10点以上积分才可以进行交易;
2、悬赏权限与买卖帖权限绑定;
3、只有管理员和作者本人可以采纳非本人发布的回帖。
[ 本帖最后由 slime 于 2006-1-19 19:13 编辑 ] |