纯静态网页限制vip普通会员浏览观看视频文章内容次数苹果cms为例

有的网站.只有vip会员才可无限制浏览内容,普通会员或游客则只允许浏览3个内容或几个.
对会员的限制,动态或伪静态的页面,通过php容易实现.只需要查询数据库,得到会员的级别即可判断.但对于生成的纯静态页面.则比较复杂,而且要尽量少用ajax的查询功能,以简化功能.我们可以把会员的浏览记录,通过txt日志文件的形式保存下来,通过通过ajax读取txt并配合cookie实现功能,在前台我们是根据会员的cookie中保存的groupid来给予不同的浏览权限.
不过cookie是保存在会员的电脑上的,如果这个会员的会员组级别被修改,怎么同步通知会员的cookie也同步修改呢.这里需要分情况实现.一,如果一个会员,他原来是普通会员,已经浏览了3条记录,groupid为1,后台设置他为vip即会员级别为3后,因为他cookie的会员级别依然为1,这时他会自动跳转到会员中心,要求他升级vip,因为会员中心为动态页面.所以.可以在这里做一个判断.如果cookie中的级别与数据库不对应,则要求会员重新登录,重新登录后,即可同步更新客户端上的cookie中的groupid为3了.二,如果他原来是vip,降级后,他前台可能一直还享有vip权限,除非他进会员中心一次,否则,会一直保留vip级别.这里的处理方式是通过ajax来动态查询数据库,实时知道他的级别是否是vip,即会员进入内容页面时,就ajax同步查询一次,如果他还是vip,则继续,如果发现他被降级,则转到会员中心,并自动登录,登录后,则自动更新他的真实会员级别.
对于每一个文章内容.需要在生成静态时,把每个会员级别拥有的权限写死在模板,方便js调用,所以.生成静态的控制函数上上需要为模板上的变量赋值.
本方法有几个知识点.一是怎么用js判断今天或昨天,三是,利用txt日志文件来代替数据库,并通过字符串转化多维数组来保存时间

后台生成静态功能,本插件动态版本也一样适用

1,\admin\tpl\module\make.php 

增加


$sql = 'select ug_xznum ,ug_type from {pre}user_group where ug_id=1 ';//普通会员
$dada=$db->getRow($sql);
		$putong_view_num = $dada['ug_xznum'];
		$putong_view_typeid = $dada['ug_type'];
		$sql = 'select ug_xznum,ug_type from {pre}user_group where ug_id=2 ';//游客会员
		$dada=$db->getRow($sql);
		$youke_view_num = $dada['ug_xznum'];
		$youke_view_typeid = $dada['ug_type'];
		
	
		
		
		
在
	if($v>1 && $v<5){
						if($similar=='ok' || empty($html2) || $newtid!=$oldtid){
						
						
}}

里面增加


//新增
		    				$tpl->H = str_replace('{maccms:youke_view_num}',$youke_view_num,$tpl->H);
							$tpl->H = str_replace('{maccms:putong_view_num}',$putong_view_num,$tpl->H);
						
								$tpl->H = str_replace('{maccms:youke_view_typeid}',$youke_view_typeid,$tpl->H);
							$tpl->H = str_replace('{maccms:putong_view_typeid}',$putong_view_typeid,$tpl->H);
							
							
//新增结束
$html2 = $tpl->H;


2,新建文件夹/cache/view_num/

3,,后台生成更新视频内容时,选择动作等电影,然后点击右侧的选择内容.或全部内部 才行

4,inc\module\user.php
增加,注意有多处
sCookie('groupid','');
sCookie('groupid',$u_group);


且
 chklogin()函数中需要增加一个判断
 
 
 
 	//增加groupid判断.并同步cookie
		if(intval(getCookie("groupid"))!=$user['u_group']){
			$_SESSION["userid"] = "";
			$_SESSION["username"] = "";
			$_SESSION["usergourp"] ="";
			$_SESSION["usercheck"] ="";
			sCookie('userid','');
			sCookie('groupid','');//如果会员组变化,则重新登录
			redirect('?m=user-login.html','top.');
		}
		
		

6, 修改播放控制器,代码在最下面,包含判断vip会员,写入日志功能
\inc\module\vod.php

elseif($method=='play')
{里面相关代码全部替换,代码在最后面}



7,播放模板上

\template\m808kp\html\vod_play.html

 


<script>
var putong_view_num='{maccms:putong_view_num}';//普通会员免费观看次数
var youke_view_num='{maccms:youke_view_num}';//游客次数
//alert(youke_view_num);
//可无限制浏览的栏目
var putong_view_typeid='{maccms:putong_view_typeid}';
var youke_view_typeid='{maccms:youke_view_typeid}';
var curvodtypeid='{maccms:curvodtypeid}';//当前栏目
var uid2 = getCookie('userid');
var groupid = getCookie('groupid');
var id=[vod:id];
var php_ip='{maccms:php_ip}';//游客ip
var myDates ='{maccms:myDates}';//今天的日期,格式为181212
host = window.location.host;
//alert(uid);
//groupid=1表示普通会员 3为vip
//如果是普通会员升级为vip,当然会员超过3次后,会自动跳转会员中心,这时会强制会员重新登录,登录后,自动得到vip权限,浏览不限制.

//如果是vip降级为普通会员,因为会员级别是保存在客户浏览器上的.后台降级.但客户的浏览器上保存的还是vip级别.除非他进会员中心,否则,会一直保持vip
//所以.如果一开始判断会员为vip 就应该动态数据库中读取他的vip级别.
//alert(groupid);
if(groupid==3){
$.ajax({
        async : false,  
        url:'http://'+host+'/index.php?m=vod-is_vip-id-'+id+'-src-1-num-1.html',
        type:'post',
        dataType:'json',
        data:{'uid':uid2},
        success:function(re){
           if(re==1){
		alert('会员级别已降为普通会员');
		window.location.href="/index.php?m=user-index.html";
		}
        },                                                    
    }); //新ajax
}
if(uid2&&groupid){//有会员登录
if(groupid==1){//普通会员,则判断是否超限
//先判断该会员可免费浏览的栏目
if(putong_view_typeid.indexOf(curvodtypeid)==-1){
//说明本栏目,是本会员组限制浏览的栏目

//查看今天浏览了几个视频

$(function(){
    $.ajax({
        url: '/cache/view_num/'+uid2+'.txt',
        dataType: 'text',
		async : false,
		cache:false,  
        success: function(data) {
		
		
		
		//alert('测试');
			  //19772,1517650486|197,1517650
			var arr = data.split('|');
			var newstr='';
			var newi=0;
			var has_view=0;//1表示本视频已经今天浏览过
  $.each(arr,function(index,value){
    var itemobj= value.split(',');
	//alert(itemobj[1]);
                    if(isToday(itemobj[1])){//日期是否今天
					
					//如果是今天的浏览记录,则保留,
					if(id==itemobj[0]){//并对比是否重复浏览的视频	
					has_view=1;
					//	alert('看过了,请继续观赏');
					return;//如果浏览 过.则直接跳出循环,直接允许浏览
					}
					//	alert('今天的浏览记录');
				newstr+=itemobj+'|';//只保留今天的记录,昨天的忽略掉
					newi++;
					}
					
             
});
 
if(has_view==0){//本视频今天还没浏览过
//如果缓存中,已经有3条记录,而该会员正被 限制浏览3条,则提示升级vip
if(newi>=putong_view_num){

window.location.href="/index.php?m=user-index.html";
//alert('请升级vip会员');
}else{//可浏览本视频,并更新日志缓存
//追加一个记录
	//alert('可正常浏览');
newstr+=id+','+myDates+'|';
//alert(newstr);
$.ajax({
        async : false,  
        url:'http://'+host+'/index.php?m=vod-ajax_write-id-'+id+'-src-1-num-1.html',
        type:'post',
        dataType:'json',
        data:{'newstr':newstr},
        success:function(re){
           if(re==3){
		alert('写入浏览次数错误');
		}
        },                                                    
    }); //新ajax	
}
}

		
		
        }
    });//ajax结束
	
	
});


     
  }

}
}else{//如果是游客



//先判断游客可免费浏览的栏目
if(youke_view_typeid.indexOf(curvodtypeid)==-1){
//说明本栏目,是本会员组限制浏览的栏目

$(function(){
    $.ajax({
        url: '/cache/view_num/'+php_ip+'.txt',
        dataType: 'text',
		async : false,
		cache:false,  
        success: function(data) {
		
		if(data){
	
			  //19772,1517650486|197,1517650
			var arr = data.split('|');
			var newstr='';
			var newi=0;
			var has_view=0;//1表示本视频已经今天浏览过
  $.each(arr,function(index,value){
    var itemobj= value.split(',');
	//alert(itemobj);
                    if(isToday(itemobj[1])){//日期是否今天
					//如果是今天的浏览记录,则保留,
					if(id==itemobj[0]){//并对比是否重复浏览的视频	
					has_view=1;
						//alert('看过了,请继续观赏');
					return;//如果浏览 过.则直接跳出循环,直接允许浏览
					}
					//	alert('今天的浏览记录');
				newstr+=itemobj+'|';//只保留今天的记录,昨天的忽略掉
					newi++;
					}
					
             
});
 
if(has_view==0){//本视频今天还没浏览过
//如果缓存中,已经有3条记录,而该会员正被 限制浏览3条,则提示升级vip
if(newi>=youke_view_num){

window.location.href="/index.php?m=user-reg.html";
//alert('请注册会员');
}else{//可浏览本视频,并更新日志缓存
//追加一个记录
	//alert('可正常浏览');
newstr+=id+','+myDates+'|';
alert(newstr);
$.ajax({
        async : false,  
        url:'http://'+host+'/index.php?m=vod-ajax_write-id-'+id+'-src-1-num-1.html',
        type:'post',
        dataType:'json',
        data:{'newstr':newstr,'php_ip':php_ip},
        success:function(re){
         if(re==3){
		alert('写入浏览次数错误');
		}
        },                                                    
    }); //新ajax	
}
}
}
		
		
		
        }
    });//ajax结束
	
	
});

     
  }


}
function getCookie(cname)
{
  var name = cname + "=";
  var ca = document.cookie.split(';');
  for(var i=0; i<ca.length; i++) 
  {
    var c = ca[i].trim();
    if (c.indexOf(name)==0) return c.substring(name.length,c.length);
  }
  return "";
}
function isToday(str){
   var d_now =myDates;
    if(str == d_now ){
        return true;
    } else {
        return false;
    }
}


</script>


数据库相关字段参考
--
-- 表的结构 `mac_user_group`
--

CREATE TABLE IF NOT EXISTS `mac_user_group` (
  `ug_id` smallint(6) NOT NULL AUTO_INCREMENT,
  `ug_name` varchar(32) NOT NULL DEFAULT '',
  `ug_type` varchar(255) NOT NULL DEFAULT '',
  `ug_popedom` varchar(32) NOT NULL DEFAULT '',
  `ug_upgrade` smallint(6) NOT NULL DEFAULT '0',
  `ug_popvalue` smallint(6) NOT NULL DEFAULT '0',
  `ug_xznum` int(11) NOT NULL COMMENT '限制观看次数',
  PRIMARY KEY (`ug_id`),
  KEY `ug_upgrade` (`ug_upgrade`) USING BTREE,
  KEY `ug_popvalue` (`ug_popvalue`) USING BTREE
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC AUTO_INCREMENT=4 ;

--
-- 转存表中的数据 `mac_user_group`
--

INSERT INTO `mac_user_group` (`ug_id`, `ug_name`, `ug_type`, `ug_popedom`, `ug_upgrade`, `ug_popvalue`, `ug_xznum`) VALUES
(1, '普通会员', '', '', 0, 1, 2),
(2, '游客', '', '', 0, 0, 3),
(3, 'VIP会员', '', '', 5, 2, 1);

补充第6条所述代码

elseif($method=='play')
{
		  /*获取用户IP地址*/

function getClientIP(){
	if(!empty($_SERVER["HTTP_CLIENT_IP"])){
		 print_r($_SERVER["HTTP_CLIENT_IP"]);exit;
		 $cip = $_SERVER["HTTP_CLIENT_IP"];
	}elseif(!empty($_SERVER["HTTP_X_FORWARDED_FOR"])){
		 $cip = $_SERVER["HTTP_X_FORWARDED_FOR"];
	 }elseif(!empty($_SERVER["REMOTE_ADDR"])){
		$cip = $_SERVER["REMOTE_ADDR"];  
	}else{
		$cip = "unknown";  
	}
	str_replace(" ","",$cip);
	if(strstr($cip,",")){
		$roomid_arr = explode(',', $cip); 
		$cip=$roomid_arr[0];
	}
	return $cip;
}
$uid = intval($_SESSION['userid']);
	$tpl->C["siteaid"] = 17;
    $tpl->P['cp'] = 'vodplay';
	$tpl->P['cn'] = $tpl->P['id'].'-'.$tpl->P['src'].'-'.$tpl->P['num'];
	echoPageCache($tpl->P['cp'],$tpl->P['cn']);
	getDbConnect();
	$sql = "SELECT * FROM {pre}vod WHERE d_hide=0 AND d_id=" . $tpl->P['id'];
	$row = $db->getRow($sql);
	if(!$row){ showMsg("获取数据失败,请勿非法传递参数",MAC_PATH); }
	if(!getUserPopedom($row["d_type"],"play")){ 
		showMsg ("您没有权限浏览播放页",MAC_PATH."index.php?m=user-index.html"); 
	}
	
	
	
	$tpl->T = $MAC_CACHE['vodtype'][$row['d_type']];
	$tpl->D = $row;
	unset($row);
	$tpl->loadvod('play');
	$tpl->replaceVod();
	$tpl->playdownlist('play');
	$tpl->H = str_replace('[vod:playnum]',$tpl->P['num'],$tpl->H);
	$tpl->H = str_replace('[vod:playsrc]',$tpl->P['src'],$tpl->H);
$myip=getClientIP();//模板上的ip地址统一用php的文件生成,以防止ip在手机上不一致
	$myDates=date('ymd');//时间格式也要用php生成并在模板上替换,因为js处理时间,苹果与安卓会出现格式不同的情况
	$newstr=$tpl->P['id'].'#'.$myDates.'|';
	
	if($uid>0){
		$cache='cache/view_num/'.$uid.'.txt';
	$sql = 'select u_group from {pre}user where u_id='.$uid;//实时查会员级别
$dada22=$db->getRow($sql);
	$groupid = $dada22['u_group'];	
	$tpl->H = str_replace("getCookie('userid')",$uid,$tpl->H);//模板上替换会员id及级别
		$tpl->H = str_replace("getCookie('groupid')",$groupid,$tpl->H);
		
		if(!is_file($cache)){
		file_put_contents($cache,$newstr);//先用php生成缓存.
	}
	
	
	}else{
		$cache='cache/view_num/'.$myip.'.txt';

	if(!is_file($cache)){
		file_put_contents($cache,$newstr);
	}
	}
		$tpl->H = str_replace('{maccms:php_ip}',$myip,$tpl->H);
	$tpl->H = str_replace('{maccms:myDates}',$myDates,$tpl->H);//模板上替换变量

	
	//新增
	$usergourp= intval($_session['usergourp']);
	$sql = 'select ug_xznum ,ug_type from {pre}user_group where ug_id=1 ';//普通会员
$dada33=$db->getRow($sql);
		$putong_view_num = $dada33['ug_xznum'];
		$putong_view_typeid = $dada33['ug_type'];
		$sql = 'select ug_xznum,ug_type from {pre}user_group where ug_id=2 ';//游客会员
		$dada44=$db->getRow($sql);
		$youke_view_num = $dada44['ug_xznum'];
		$youke_view_typeid = $dada44['ug_type'];
		
		
		
		    				$tpl->H = str_replace('{maccms:youke_view_num}',$youke_view_num,$tpl->H);
							$tpl->H = str_replace('{maccms:putong_view_num}',$putong_view_num,$tpl->H);
						
								$tpl->H = str_replace('{maccms:youke_view_typeid}',$youke_view_typeid,$tpl->H);
							$tpl->H = str_replace('{maccms:putong_view_typeid}',$putong_view_typeid,$tpl->H);
							
	//新增结束
	
	$tpl->getUrlName('play');
	$tpl->H = str_replace('[vod:playerinfo]', '<script>' .$tpl->getUrlInfo('play'). ' </script>'. "\n" ,$tpl->H);
	$tpl->H = str_replace('[vod:player]', '<script src="'.$MAC['site']['installdir'].'js/playerconfig.js"></script><script src="'.$MAC['site']['installdir'].'js/player.js"></script>'. "\n" ,$tpl->H);
	$tpl->playdownlist ("down");
	
}
elseif($method=='ajax_write')
{
	//print_r($tpl->P['id']);exit;
	$newstr=$_POST['newstr'];
	$myip=$_POST['php_ip'];
	if($myip){
		file_put_contents('cache/view_num/'.$myip.'.txt',$newstr);
		echo 1;
	}elseif($_SESSION['userid']){
		file_put_contents('cache/view_num/'.$_SESSION['userid'].'.txt',$newstr);
		echo 2;
	}else{
		echo 3;
	}
	
}
elseif($method=='is_vip')
{
	getDbConnect();
	$uid=$_POST['uid'];
$sql = 'select u_group from {pre}user where u_id='.$uid;//普通会员
$dada=$db->getrow($sql);
		echo $dada['u_group'];

	
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值