广告位联系
返回顶部
分享到

织梦dede实现会员限制用户单日下载软件资源次数的教程

网站程序 来源:互联网搜集 作者:秩名 发布时间:2019-02-20 22:32:35 人浏览
摘要

本篇文章介绍织梦dede实现会员限制用户单日下载软件资源次数的教程。 具体方法如下: 1,首先在数据表dede_member增加一个字段记录日期和当日下载的软件的ID组成的一个字串,例如:20170407|1##2##3,这个样子我用的是varchar类型长度255,默认值就是20170407

本篇文章介绍织梦dede实现会员限制用户单日下载软件资源次数的教程。

具体方法如下:


 1,首先在数据表dede_member增加一个字段记录日期和当日下载的软件的ID组成的一个字串,例如:“20170407|1##2##3”,这个样子我用的是varchar类型长度255,默认值就是“20170407|1##2##3”

 2,在后台-系统-系统基本参数-增加一个系统参数,我选择分类是站点设置,这里主要是设置下载的上限值,类型数字型,说明“单用户单日下载次数上限”,名称是“cfg_dlimit”,测试期间我设置的是3

 3,在plus目录下找到download.php在如下位置增加下面一段代码(大约190行之下,会员级别判断之下):


//判断下载次数是否达到当日上限
        if($cfg_ml->M_Rank > $needRank && $needMoney > 0){
            if(isset($GLOBALS['cfg_dlimit']) && $GLOBALS['cfg_dlimit'] > 0 ){
                $dtSql = "SELECT `dtime` FROM `dede_member` WHERE `mid`='{$cfg_ml->M_ID}'";
                $dt = $dsql->GetOne($dtSql);
                if($dt['dtime'] == ''){
                    #没有对应记录,构建并记录更新用户记录
                    $dtStr = date('Ymd')."|".$id;
                    $updtsql = "UPDATE `dede_member` SET `dtime`='{$dtStr}' WHERE `mid`='{$cfg_ml->M_ID}'";
                    $dsql->ExecuteNoneQuery($updtsql);
                }else{
                    #有记录,开始拆分判断并且进行计算处理
                    $tmp = explode('|', $dt['dtime']);
                    #判断记录日期是否是今天,是则返回剩余次数,不是则返回系统限制上限
                    $today = date('Ymd');
                    if($today == $tmp[0]){
                        $arr = explode('##',$tmp[1]);
                        #判断当前id是否包含在内
                        if(!in_array($id, $arr)){
                            #判断总下载次数
                            if(count($arr) >=  $GLOBALS['cfg_dlimit']){
                                #超限,不予下载
                                $msgtitle = "你不能下载软件:{$arctitle}!";
                                $moremsg = "你今日的下载上限 <font color='red'>".$GLOBALS['cfg_dlimit']." 次</font> 已满!";
                                include_once(DEDETEMPLATE.'/plus/view_msg.htm');
                                exit(0);
                            }else{
                                $newArr = array_merge($arr,[$id]);
                                // echo $id;
                                // print_r($arr);
                                // print_r($newArr);
                                // //echo $a = implode(',', $newArr);
                                $dtNew = date('Ymd')."|".implode('##', $newArr);
                                #未超限,更新下载id记录
                                $dtInsert = "UPDATE `dede_member` SET `dtime`='{$dtNew}' WHERE `mid`='{$cfg_ml->M_ID}'";
                                $dsql->ExecNoneQuery($dtInsert);
                            }
                        }
                    }else{
                        //echo 7;
                        #不是今天,那么构建
                        $dtStr = date('Ymd')."|".$id;
                        $updtsql = "UPDATE `dede_member` SET `dtime`='{$dtStr}' WHERE `mid`='{$cfg_ml->M_ID}'";
                        $dsql->ExecuteNoneQuery($updtsql);
                    }
                }
            }//-----
        }

逻辑是,指定下载权限以上的用户受限,小于或者等于权限的用户不受限,免费资源不受限,重复下载不计次数。

4,如果亲想在后台显示用户当日剩余的下载次数,那么修改如下两个文件,dede/member_main.php和dede/templets/member_main.htm

dede/member_main.php 文件最下面增加:


//
function GetDtime($dt){
    if($dt == ''){
        return $GLOBALS['cfg_dlimit'];
    }else{
        $tmp = explode('|', $dt);
        #判断记录日期是否是今天,是则返回剩余次数,不是则返回系统限制上限
        $today = date('Ymd');
        if($today == $tmp[0]){
            $arr = explode('##',$tmp[1]);
            return is_array($arr) ? $GLOBALS['cfg_dlimit'] - count($arr) : $GLOBALS['cfg_dlimit'];
        }else{
            return $GLOBALS['cfg_dlimit'];
        }
    }
}

dede/templets/member_main.htm 文件修改第130行:

金币:{dede:field.money /} 积分:{dede:field.scores /}

为:

金币:{dede:field.money /} 积分:{dede:field.scores /} 剩下:{dede:field.dtime function="GetDtime(@me)" /}

后台在注册会员别变即可查看到需要的值

5,如果想在用户中心显示当前登录会员的当日下载剩余次数,那么修改 include/memberlogin.class.php,在第390行之下(重置用户信息之下),增加如下代码:


/**
        获取当前用户当然下载限制剩余量
    */
    function GetDtime($dsql){
        $mid = $this->M_ID;
        $dt = $dsql->GetOne("Select `dtime` from `dede_member` where mid='$mid' ");
        if($dt['dtime'] == ''){
            return $GLOBALS['cfg_dlimit'];
        }else{
            $tmp = explode('|', $dt['dtime']);
            #判断记录日期是否是今天,是则返回剩余次数,不是则返回系统限制上限
            $today = date('Ymd');
            if($today == $tmp[0]){
                $arr = explode('##',$tmp[1]);
                return is_array($arr) ? $GLOBALS['cfg_dlimit'] - count($arr) : $GLOBALS['cfg_dlimit'];
            }else{
                return $GLOBALS['cfg_dlimit'];
            }
        }
    }

然后在用户中心使用 <?php echo $cfg_ml->GetDtime($dsql); ?> 即可显示剩余的次数。


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计