discuz X1.5实现勋章购买
用过discuzx1.5的同志们应该知道,在后台的扩展-》勋章中心 中
所有的勋章的授予方式都是权限授予,如果选择用户申请自动颁发的模式的话,只要用户的权限达到了,就可以申请到所有的符合这一权限的勋章。
但是怎么样才能达到如同原先7.2那样的购买勋章的效果呢,即能设置勋章的价格又能实现购买勋章。
安装插件是个好方法,但是插件安装多了严重影响论坛的执行效率,所以就看了一段时间的discuz源码,自己做了一个
(ps:这个功能是自己改的discuz的源代码,网上没有相关的资料考证。但是在我管理的网站上运行没出现什么问题。所以发上来了。如果有什么不足的地方,欢迎指出 actionbi2010@gmail.com)
步骤:
1,
数据库的discuz_home_medal表中增加“price”(不能修改)字段
在数据库中的pre_forum_medal表中添加一个price字段,这样你的程序就能运行了,这是用来保存你的勋章价钱的地方。
2.设置勋章管理页面,实现设置勋章价格
网站根目录 source/admincp/admincp_medals.php
<textarea name="formulapermnew" id="formulapermnew" style="width: 80%" rows="3"><?=dhtmlspecialchars($medal['permission'])?></textarea>
<br/>
<span style="color:#0099CC; font-weight:bold;">设置勋章价钱</span><input type="text" name="price" value="<?=$medal['price']?>" size=10/><span style="color:red">*只需填入数字即可</span> //这里是新加入的代码<br /><span class="smalltxt"><?=$lang['medals_permformula']?></span><br />
这代码的意思就是说在权限输入框的下面显示一个 设置勋章价钱的 input 大家都懂的
接下来还是这个文件里面
DB::update('forum_medal', array(
'name' => $_G['gp_namenew'] ? dhtmlspecialchars($_G['gp_namenew']) : 'name',
'type' => $_G['gp_typenew'],
'description' => dhtmlspecialchars($_G['gp_descriptionnew']),
'expiration' => intval($_G['gp_expirationnew']),
'permission' => $formulapermnew,
'price' => intval($_G['gp_price']),
'image' => $_G['gp_imagenew'],
), "medalid='$medalid'");
红色部分的代码是自己加入的,这里的意思就是把你设置的price保存到数据库中。
好了,保存,这样我们在后台操作某个勋章的程序定义好了
3.处理用户端的勋章显示问题
(1)我们需要让用户看到的是,在勋章列表中每个勋章对应的应该是“购买”而不是“申请” 也就是xxxx.com/home?mod=medal的显示问题
打开
data/templete/*_*_home_space_medal.tpl.php
修改代码:
<? if($medal['expiration']) { ?>
有效期 <?=$medal['expiration']?> 天,
<? } if($medal['permission']) { ?>
<?=$medal['permission']?>
<? } else { if($medal['type'] == 0) { ?>
人工授予
<? } elseif($medal['type'] == 1) { ?>
自主申请
<? } elseif($medal['type'] == 2) { ?>
人工审核
<? } } ?>
</span>
<? if($medal['type'] && $_G['uid']) { ?>
<button type="button" class="pn">
<em><? if(!$medal['permission']) { ?>申请<? } else { ?>领取<? } ?></em>
</button>
<? } ?>
</li>
红色部分是需要代码中的修改的,这样用户看到的勋章列表显示的就是“自主购买”和“购买”了
(2)用户中心的勋章中心管理页面显示勋章价格:
还是上面这段代码中修改这段代码中,在自主购买后面加上价格<?=$medal['price']?>论坛币
3.设置好了表现的部分,那么就是修改购买过程中执行的程序了,因为我们需要用户花去相应的积分来实现购买行为
打开
/source/module/home/home_medal.php
修改代码:
if($medalpermission[0]) {
include libfile('function/forum');
medalformulaperm(serialize(array('medal' => $medalpermission)), 1);
if($_G['forum_formulamessage']) {
showmessage('medal_permforum_nopermission', 'home.php?mod=medal', array('formulamessage' => $_G['forum_formulamessage'], 'usermsg' => $_G['forum_usermsg']));
} else {
$applysucceed = TRUE;
DB::query("UPDATE ".DB::table('common_member_count')." SET extcredits8=extcredits8-".$medal['price']." WHERE uid='$_G[uid]'"); }
} else {
$applysucceed = TRUE;
DB::query("UPDATE ".DB::table('common_member_count')." SET extcredits8=extcredits8-".$medal['price']." WHERE uid='$_G[uid]'"); }
红色部分的代码依旧是添加上去的
意思就是 当用户点击了“购买”的时候运行的程序,如果你的权限不够的话,那么不能申请,如果条件够,那么把你的extcredits8积分减去你设定的价钱的值。
好了,更新缓存,运行成功
演示效果:http://home.ecjtu.net/home-medal.html

浙公网安备 33010602011771号