ThinkPHP 静态缓存 实现商品详情页PC版、手机版静态+SEO优化(未完待续。。。)

使用ThinkPHP有一段时间了,没注意tp有静态缓存的功能,一直是自己手写的静态生成代码,但是有诸多问题,比如推荐商品的更新、商品库存变动、商品描述改动、模板文件改动等。。。

后来尝试过使用ajax加载需要经常更新和变动的内容,但是这样页面源代码里面没有异步加载的内容,都优化很不利,搜索引擎不会执行js代码和ajax请求。

ThinkPH内置了静态缓存的功能,但是需要对其进行一些改装
要使用静态缓存功能,需要开启HTML_CACHE_ON 参数,并且使用HTML_CACHE_RULES配置参数设置静态缓存规则文件 。
ThinkPHP中静态规则的定义方式如下:

'HTML_CACHE_ON'=>true,
'HTML_CACHE_RULES'=> array(
    'ActionName'            => array('静态规则', '静态缓存有效期', '附加规则'), 
    'ModuleName(小写)'            => array('静态规则', '静态缓存有效期', '附加规则'), 
    'ModuleName(小写):ActionName' => array('静态规则', '静态缓存有效期', '附加规则'),
    '*'                     => array('静态规则', '静态缓存有效期', '附加规则'),
    //…更多操作的静态规则
)

我的系统里商品详情页的访问URL如下(假设商品id是1,域名是abc.com):

http://www.abc.com/Goods/show/id/1.html (PC动态)
http://m.abc.com/Goods/show/id/1.html(手机动态)
http://www.abc.com/item/1.html (PC静态)
http://m.abc.com/item/1.html(手机静态)

首先在GoodsAction继承的CommonAction的初始化函数_initialize()中加入域名访问控制策略函数checkRedirect(),如下:

function checkRedirect(){
    if(file_exists(TMPL_PATH.MODULE_NAME."/".ACTION_NAME.".html")){
        //手机上打开pc域名且m页面存在,跳转手机m域名
        if(isMobile() && !isMDomain() && file_exists(TMPL_PATH.MODULE_NAME."/".ACTION_NAME."_m.html")){
            header("Location: ".C('SITE_URL_MOBILE').$_SERVER['PHP_SELF']);
        }
        //访问m域名且m页面不存在,跳转pc域名
        if(isMDomain() && !file_exists(TMPL_PATH.MODULE_NAME."/".ACTION_NAME."_m.html")){
            header("Location: ".C('SITE_URL').$_SERVER['PHP_SELF']);
        }
    }
}

function isMDomain(){
    return ($_SERVER['HTTP_HOST']==substr(C('SITE_URL_MOBILE'),7));
}

pc端模板页面文件跟ACTION_NAME保持一致,手机端模板页面文件在ACTION_NAME后面加_m。
此函数将判断用户使用的域名和系统是否存在相应的模板文件。
注意以下两种情况:
1、当用户使用手机访问PC页面,但是系统存在对应的手机版页面时,系统会自动跳转到对应的手机版页面
2、当用户访问的是手机页面(无论何种设备),但是当前手机版页面不存在时,系统自动跳转到对应PC版页面

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值