使用織夢(mèng)做過(guò)下載站點(diǎn)的朋友可能知道,織夢(mèng)的下載站會(huì)員是可以如果滿(mǎn)足條件一日內(nèi)是可以無(wú)限制下載的,這個(gè)對(duì)于某些“不太地道的”用戶(hù)可 能會(huì)給服務(wù)器早成非常大的壓力,這個(gè)時(shí)候我們一般是希望通過(guò)二次開(kāi)發(fā)實(shí)現(xiàn)這樣一種功能,對(duì)單用戶(hù)會(huì)員實(shí)現(xiàn)單日下載次數(shù)的限制。說(shuō)得直白一點(diǎn)就是限制會(huì)員每天的下載次數(shù)。說(shuō)干就干,下面是361源碼給大家分享的實(shí)現(xiàn)辦法,如果對(duì)您有幫助請(qǐng)給個(gè)贊或者給我們技術(shù)一些狗糧打賞,如果您覺(jué)得沒(méi)什么實(shí)際的意義也感謝您的訪問(wèn):

1、首先在數(shù)據(jù)表dede_member增加一個(gè)字段記錄日期和當(dāng)日下載的軟件的ID組成的一個(gè)字串,例如:“201701113|1##2##3”,這個(gè)樣子我用的是varchar類(lèi)型長(zhǎng)度255,默認(rèn)值就是“201701113|1##2##3”
2、在后臺(tái)-系統(tǒng)-系統(tǒng)基本參數(shù)-增加一個(gè)系統(tǒng)參數(shù),我選擇分類(lèi)是站點(diǎn)設(shè)置,這里主要是設(shè)置下載的上限值,類(lèi)型數(shù)字型,說(shuō)明“單用戶(hù)單日下載次數(shù)上限”,名稱(chēng)是“cfg_dlimit”,測(cè)試期間我設(shè)置的是3
3、在plus目錄下找到download.php在如下位置增加下面一段代碼(大約190行之下,會(huì)員級(jí)別判斷之下):
//判斷下載次數(shù)是否達(dá)到當(dāng)日上限 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'] == ''){ #沒(méi)有對(duì)應(yīng)記錄,構(gòu)建并記錄更新用戶(hù)記錄 $dtStr = date('Ymd')."|".$id; $updtsql = "UPDATE `dede_member` SET `dtime`='{$dtStr}' WHERE `mid`='{$cfg_ml->M_ID}'"; $dsql->ExecuteNoneQuery($updtsql); }else{ #有記錄,開(kāi)始拆分判斷并且進(jìn)行計(jì)算處理 $tmp = explode('|', $dt['dtime']); #判斷記錄日期是否是今天,是則返回剩余次數(shù),不是則返回系統(tǒng)限制上限 $today = date('Ymd'); if($today == $tmp[0]){ $arr = explode('##',$tmp[1]); #判斷當(dāng)前id是否包含在內(nèi) if(!in_array($id, $arr)){ #判斷總下載次數(shù) if(count($arr) >= $GLOBALS['cfg_dlimit']){ #超限,不予下載 $msgtitle = "你不能下載軟件:{$arctitle}!"; $moremsg = "你今日的下載上限 <font color='red'>".$GLOBALS['cfg_dlimit']." 次</font> 已滿(mǎn)!"; 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; #不是今天,那么構(gòu)建 $dtStr = date('Ymd')."|".$id; $updtsql = "UPDATE `dede_member` SET `dtime`='{$dtStr}' WHERE `mid`='{$cfg_ml->M_ID}'"; $dsql->ExecuteNoneQuery($updtsql); } } }//----- }邏輯是,指定下載權(quán)限以上的用戶(hù)受限,小于或者等于權(quán)限的用戶(hù)不受限,免費(fèi)資源不受限,重復(fù)下載不計(jì)次數(shù)。
4、如果親想在后臺(tái)顯示用戶(hù)當(dāng)日剩余的下載次數(shù),那么修改如下兩個(gè)文件,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); #判斷記錄日期是否是今天,是則返回剩余次數(shù),不是則返回系統(tǒng)限制上限 $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)" /}后臺(tái)在注冊(cè)會(huì)員別變即可查看到需要的值
5、如果想在用戶(hù)中心顯示當(dāng)前登錄會(huì)員的當(dāng)日下載剩余次數(shù),那么修改 include/memberlogin.class.php,在第390行之下(重置用戶(hù)信息之下),增加如下代碼:
/** 獲取當(dāng)前用戶(hù)當(dāng)然下載限制剩余量 */ 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']); #判斷記錄日期是否是今天,是則返回剩余次數(shù),不是則返回系統(tǒng)限制上限 $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']; } } }然后在用戶(hù)中心使用 <?php echo $cfg_ml->GetDtime($dsql); ?> 即可顯示剩余的次數(shù)。
到這里就完成了改造,有需求的朋友可以自己嘗試一下,處理前注意備份文件和數(shù)據(jù)庫(kù),防止出錯(cuò)!
以上就是織夢(mèng)實(shí)現(xiàn)會(huì)員限制用戶(hù)單日下載軟件資源的上限方法的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)和解決疑問(wèn)有所幫助,也希望大家多多支持武林網(wǎng)。新聞熱點(diǎn)
疑難解答
圖片精選