phpcms 识别 url 实现电脑手机双模板

phpcms 是一个比较容易二次开发而且模板功能强大的 cms。随着智能手机日益发展,人们上网不再追求电脑上网,手机浏览网页超过电脑必成大势,故移动站制作已非常重要。目前phpcms附带着手机门户功能,功能很单一,无法深度定制模板,而二次开发太耗时,还要修改内核,不利于日后对 cms 的升级。

不过 phpcms 还可以使用识别 url 地址来采用不同的模板,PC站与移动站共用一个数据库,做到内容发布同步,比如:http: //www.uefeng.com对http: //m.uefeng.com,只是网址头部不同,并且通过判断用手机浏览网站时自动跳动到移动站网址及模板,每个网址一一对应跳转。

首先我们要添加的就是自适配的代码,找到/modules/content/index.php文件,在里面找到如下代码,共三处:

include template('content',$template);

将修改为:

if(substr($_SERVER['SERVER_NAME'], 0,1) == 'm'){ include template('moblie',$template); }else{ include template('content',$template); }

上面的代码表示当url中出现的第一个字符出现了m的时候,那么会自动调用到手机模板(moblie),www 则选择 content。还需要注意的一个问题就是,phpcms的链接都是写入到数据库中的所以我们在调用标签的时候不要再次使用{$r[url]},而是需要这样的改动{str_replace(‘http: //www.’,’http: //m.’,$r[url])},就这样就可以搞定了手机版本与电脑版本的设置了,那么这个这个时候我们需要加入一个js代码来实现自动的跳转,代码如下:

function uaredirect(f) {
    try {
        if (document.getElementById("bdmark") != null) {
            return
        }
        var b = false;
        if (arguments[1]) {
            var e = window.location.host;
            var a = window.location.href;
            if (isSubdomain(arguments[1], e) == 1) {
                f = f + "/#m/" + a;
                b = true
            } else {
                if (isSubdomain(arguments[1], e) == 2) {
                    f = f + "/#m/" + a;
                    b = true
                } else {
                    f = a;
                    b = false
                }
            }
        } else {
            b = true
        }
        if (b) {
            var c = window.location.hash;
            if (!c.match("fromapp")) {
                if ((navigator.userAgent.match(/(iPhone|iPod|Android|ios)/i))) {
                    location.replace(f)
                }
            }
        }
    } catch (d) {}
}
function isSubdomain(c, d) {
    this.getdomain = function(f) {
        var e = f.indexOf("://");
        if (e > 0) {
            var h = f.substr(e + 3)
        } else {
            var h = f
        }
        var g = /^www\./;
        if (g.test(h)) {
            h = h.substr(4)
        }
        return h
    };
    if (c == d) {
        return 1
    } else {
        var c = this.getdomain(c);
        var b = this.getdomain(d);
        if (c == b) {
            return 1
        } else {
            c = c.replace(".", "\\.");
            var a = new RegExp("\\." + c + "$");
            if (b.match(a)) {
                return 2
            } else {
                return 0
            }
        }
    }
};

然后再通过识别链接地址来跳转,静态化和动态地址可以根据下面的代码来更改一下:

{if !$catid}<script type="text/javascript">uaredirect("http://m.uefeng.com/");</script>

{elseif $catname}<script type="text/javascript">uaredirect("http://m.uefeng.com/list-{$catid}-{$page}.html");</script>

{elseif $id}<script type="text/javascript">uaredirect("http://m.uefeng.com/show-{$catid}-{$id}-{$page}.html");</script>{/if}

个人建议脚本尽量放在靠前位置比较好,因为加载网页时尽早触发脚本,跳转到移动网页。

发表新评论