很早就想写一些自己二次开发dedecms过程中遇到的问题,但一直没抽出时间来写。今天就先一点吧,关于dedecms系统会员在更换头像或填写详细资料的时候不加积分的问题。系统后台本身是有这个功能,但在执行程序里却没有,这里简单说下吧,以后也免得找了。
找到member/edit_face.php这个文件,是编辑头像的,然后在更新头像的时候做下判断就行了,如果原来就有头像,只是更换,就不加积分,如果原来没有,是新加的头像就加积分,就这么简单,代码部分是这样:
$query = "UPDATE `dede_member` SET `face` = '$face' WHERE mid='{$cfg_ml->M_ID}' ";
$dsql->ExecuteNoneQuery($query);
下面加这样一个判断:
//2013年7月增加头像添加增加5积分。
if(empty($oldface))
{
$dsql->ExecuteNoneQuery("UPDATE `dede_member` set scores=scores+5 WHERE mid='".$cfg_ml->M_ID."' ; ");
}
如果原来的头像为空就加5个积分,当然这里可以调用后台设置的那个变量,我这里就直接加5了。这样一改还有一个bug,就是会员可以把自己的头像删除了再加,这样这段程序还是会判断为空的,所以也会加,为了避免这个麻烦,就直接删除了templets下的edit_face.htm文件中的删除头像功能,这个很简单就能找到。这个方法对小白用户可以管用,但对于熟悉dedecms的人来说还是照样可以删除,所以再做最一步,删除edit_face.php里的这段代码:
else if($dopost=='delold')
{
if(empty($oldface))
{
ShowMsg("没有可删除的头像!", "-1");
exit();
}
$userdir = $cfg_user_dir.'/'.$cfg_ml->M_ID;
if(!preg_match("#^".$userdir."#", $oldface) || preg_match('#\.\.#', $oldface))
{
$oldface = '';
}
if(preg_match("#\.(jpg|gif|png)$#i", $oldface) && file_exists($cfg_basedir.$oldface))
{
@unlink($cfg_basedir.$oldface);
}
$query = "UPDATE `dede_member` SET `face` = '' WHERE mid='{$cfg_ml->M_ID}' ";
$dsql->ExecuteNoneQuery($query);
// 清除缓存
$cfg_ml->DelCache($cfg_ml->M_ID);
ShowMsg('成功删除原来的头像!', $backurl);
exit();
}
或者注释掉也行,这样系统就无法执行删除头像功能了。
下面再谈谈如何在会员添加或完善详细资料的时候加积分,这个功能在后台也是显示的,但在执行文件里还是没找到相关代码,很忧伤,只能自己加了。我们首页是明白是如何区分更新资料和新添加资料,对于更新资料的不加积分,只有新添加的时候才加积分,明白这点就好办了。
在程序更新数据库表之前,也就是这句前加一句代码:
$query = "UPDATE `{$membermodel->table}`set {$inadd_f} WHERE mid='{$cfg_ml->M_ID}'";
这是更新资料的,新加的判断代码:
//2013年7月 增加 更新资料增加积分10
$Judge_fullinfo = $dsql->GetOne("SELECT * FROM dede_member_person where mid='".$cfg_ml->M_ID."' ; ");
if($Judge_fullinfo['tel']=='' && $Judge_fullinfo['qq']=='' && $Judge_fullinfo['mobile']=='' && $Judge_fullinfo['address']=='')
{ $dsql->ExecuteNoneQuery("UPDATE `dede_member` set scores=scores+10 WHERE mid='".$cfg_ml->M_ID."'; ");
}
在更新信息表之前先取出信息判断一些字段是否为空,看具体需要,当所有这些字段都为空的时候才可以加积分。
﹣-﹥>「丶丶 淡 写」 其他还有很多问题,现在才发现在dede要是做会员相关的真的很费劲,所以如果做和会员有关的网站,尤其是活跃度比较高的网站discuz和phpwind,个人比较热衷于DZ吧。用dedecms做二次开发相对比较耗时,而且有些功能也不好实现,bug也是一堆一堆的,做这个“樱桃商联”已经改过80%以上的文件了,包括系统模板和系统文件,话说自己现在也不知道到底是改的哪些文件。当初在做之前真的应该写 一个文档,把修改的东西记录,一来分享出来供大家学习,另外也可以在出问题后回溯。当初也想着用svn来着,但自己一个人开发,想着也用不着,还省得回来传东西麻烦,现在二次开发改的加的东西太多了,一时半会还想不起来是哪个文件,很忧伤的问题,这个问题以后得考虑下了。
发表评论