纯静态网页限制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






数据库相关字段参考
--
-- 表的结构 `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]', ''. "\n" ,$tpl->H);
    $tpl->H = str_replace('[vod:player]', ''. "\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'];


}

请打赏谢谢大佬

你可能感兴趣的:(css及js相关)