公告:如果您的账号不能登录,可能是系统对您账号进行了保护,我们发现系统中存在着不安全密码,故对其重置,请您重新激活账号,对于给您造成的不便,敬请谅解!
论坛风格切换切换到宽版
  • 26727阅读
  • 27回复

Dedecms2007会员扣点数代码分析 [复制链接]

上一主题 下一主题
离线天涯
 

发帖
6046
贡献值
6225
威望值
3543
技术分
0
织梦币
5
只看楼主 倒序阅读 使用道具 0 发表于: 2007-12-18
— 本帖被 无法显示 设置为精华(2007-12-20) —
今天天涯在这里分析下dedecms2007是如何对所设置的内容扣点数,并且提出一些文章扣点修改方案,这里需要你对dedecms工作机制以及php有一定理解。
        dedecms2007如果内容设置浏览权限,被设置权限的文章都是以动态形式进行浏览,其浏览格式为/plus/view.php?aid={$aid},所以只要从这个文件进行分析。
        相关文章、会员权限设置在后台系统设置有,可以自己去点击了研究研究,这里我主要从代码入手,给一些具有一定php能力的dedecms fans带来帮助,文章适合对dedecms二次开发有一定兴趣的朋友,dedecms的简单用户就不必阅览本文了。
[sell=10]     

        扣点主要是/plus/view.php中PayMoney()这个函数,我们将其单独取出来做简单分析:
  1. function PayMoney($ml,$arc,$money){
  2.   global $aid;//当前文档的文档ID,即查看时传递的变量
  3.   $row = $arc->dsql->GetOne("Select aid,money From [url=mailto:#@__moneyrecord]#@__moneyrecord[/url] where aid='$aid' And uid='".$ml->M_ID."'");//查询数据库,用户在这篇文章中所消费的金币数,这是为了防止用户多次点击文档导致重复扣点
  4.   if(!is_array($row)){//如果没有消费记录
  5.     //金币消费记录
  6.     $inquery = "INSERT INTO [url=mailto:#@__moneyrecord(aid,uid,title,money,dtime]#@__moneyrecord(aid,uid,title,money,dtime[/url])
  7.               VALUES ('$aid','".$ml->M_ID."','{$arc->Fields['title']}','$money','".mytime()."');";//向消费记录中插入一条消费记录
  8.     if($arc->dsql->ExecuteNoneQuery($inquery)){
  9.       $inquery = "Update [url=mailto:#@__member]#@__member[/url] set money=money-$money where ID='".$ml->M_ID."'";//更新数据表,进行扣金币的操作
  10.         $arc->dsql->ExecuteNoneQuery($inquery);
  11.         $ml->FushCache();
  12.     }
  13.   }
  14. }

这是函数涉及到三个参数:$ml,$arc,$money,$ml是一个类,从下面代码中可以看出,
$ml = new MemberLogin();
$ml在这里存放着当前用户登录的大部分信息,例如当前登录用户的ID、用户名称、这些信息在数据库的#@__member表中可以看到,常用调用信息如下:
$ml->M_ID; 用户名
$ml->M_Type; 用户类别
$ml->M_Money; 用户金币数
$ml->M_UserName; 用户昵称
$ml->M_LoginTime; 用户登录时间
$ml->M_UserPwd; 用户密码
$ml->M_HasDay;会员有效期
函数首先查询该文档需要花费多少金币,然后插入一条用户金币消费记录到#@__moneyrecord表中,最后执行扣点操作,在数据库层次上就是更新一次数据库,将当前money减去一定数量的金币。
接下来就是关键的检查内容权限部分了
官方原来代码中是这样说明的:
//设置了权限限制的文章
//会员权限说明:
//1、对于设定了包时的中高级会员,浏览任何权限内的文档都不需要使用金币
//2、对于权限不足,又有金币的用户,可以花1个金币浏览权限外的文档,或花设定的金币浏览某文档
//arctitle msgtitle moremsg
//------------------------------------
第一部分判断是判断如果会员是中高级会员,代码中体现是
if( ($ml->M_Type > 10) && ($ml->M_Type >= $needRank ) )
这里有个不足之处,如果你对中高级会员重新设定权限值,不修改代码的话,程序会发生一点小小的错误,这里如果对用户级别判断值做了修改,应该在$ml->M_Type > 10,也做相应修改,否则程序无效
第二部分是这样设置的,如果用户不是高级别,需要花费相应金币数可以观看,代码是这样体现的
//无足够金币
if( $ml->M_Money < $needMoney ),如果我们不想这样,即用户不在该级别类型,金币数再多也无法查看,只需要做个小小的调整,把代码做这样修改
代码97~108
  1.   //没有相关权限
  2.   if( $ml->M_Type < $needRank )
  3.   {
  4.       $msgtitle = "阅读:{$arcTitle} 权限不足!";//提示权限不足的标题信息,可在/plus/view_msg.htm中查看,并且可以进行修改
  5.       $moremsg = "这篇文档需要 [<font color='red'>".$memberTypes[$needRank]."</font>] ";
  6.       $moremsg .= "你目前的会员身份为".$memberTypes[$ml->M_Type].",拥有金币 {$ml->M_Money} 个!";
  7.       include_once($cfg_basedir.$cfg_templets_dir."/plus/view_msg.htm");//引用模板文件
  8.       exit();
  9.   }else{
  10.       PayMoney($ml,$arc,$needMoney);//进行扣点
  11.   }

进行权限判断之后,如果正常,预览文档,通过$arc->Display();实现。

[/sell]
离线七匹狼

发帖
146
贡献值
7
威望值
143
技术分
0
织梦币
0
只看该作者 1 发表于: 2007-12-18
不想要
 
离线天涯

发帖
6046
贡献值
6225
威望值
3543
技术分
0
织梦币
5
只看该作者 2 发表于: 2007-12-18
观望中...
 
离线免费求助
发帖
591
贡献值
-2
威望值
163
技术分
0
织梦币
0
只看该作者 3 发表于: 2007-12-18
我要要啊。


Vista分区详解
预装vista 的很多品牌机仍然和以往一样,只有一个C盘可以供大家使用,目前我们常用的第三方磁盘管理工具都无法针对vista系统的机器磁盘进行管理,很多用户由于使用其他软件分区导致磁盘分区表破坏,甚至隐藏分区损坏,造成系统崩溃的问题。
用移动硬盘安装Vista
没有DVD刻录机的朋友,又想安装单系统的 Vista ,就可以将安装文件放在移动 硬盘 上,从移动硬盘启动计算机来安装 Vista 了!这样安装的效果和从光盘引导安装是一样的。 1.在 XP 下将一个空间足够的移动硬盘分区激活(在计算机管理的磁盘管理中,右键单击需要的分区,选...
离线hongyanmin

发帖
27
贡献值
0
威望值
23
技术分
0
织梦币
0
只看该作者 4 发表于: 2007-12-18
落伍发布了!这边···
离线smileke
发帖
38
贡献值
1
威望值
37
技术分
0
织梦币
0
只看该作者 5 发表于: 2007-12-18
留记号
离线defans

发帖
534
贡献值
15
威望值
366
技术分
0
织梦币
0
只看该作者 6 发表于: 2007-12-18
不错...

不知道能不能解决会员发布文章,图片等,通过审核后可以加一定分数?
发生 发生的
离线hefa

发帖
921
贡献值
19
威望值
557
技术分
0
织梦币
0
只看该作者 7 发表于: 2007-12-18
留记号,正有,谢谢,但投稿能不能扣点?
离线tg8866
发帖
129
贡献值
0
威望值
124
技术分
0
织梦币
0
只看该作者 8 发表于: 2007-12-19
看一下。不错。
离线天涯

发帖
6046
贡献值
6225
威望值
3543
技术分
0
织梦币
5
只看该作者 9 发表于: 2007-12-20