PHPCMS自己提供了移动版模块,但是调用不是很方便,静态功能同样需要单独实现。这里介绍一种比较简单的方法,实现动态+静态的移动端分离。
1. 在html文件夹下新建wap目录。
2. 将移动版域名解析到服务器。
3. 配置vhost,移动域名和PC域名均指向phpcms根目录。
4. 配置Rewrite规则。apache和nginx的rewrite规则请自主查询。
.htaccess可参考:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^m.deadnine.com$ [NC]
RewriteCond %{REQUEST_URI} !^/html/wap/
RewriteRule ^(.*)$ /html/wap/$1?Rewrite [L,QSA]
nginx other.conf可参考(熟悉nginx的可以使用other.conf,不熟悉的建议直接在nginx里vhost里修改移动域名的配置文件):
location /html/wap
{
}
location= /
{
rewrite (.*)$ /index.php;
}
location /
{
rewrite (.*)html$ /html/wap$1html;
}
注意:这里不要将移动域名配置到wap目录下,这样动态路径会无法访问。
5. 接下来就是重头戏,来到phpcms/modules/content/classes目录下的html.class.php。修改该类模块主要为同步移动版的静态生成。
注意:请准备好移动版模版。本例中将移动版模版放置于 /phpcms/templates/mobile目录下
(1) show()函数中找到
$pagefile = PHPCMS_PATH.$pagefile;
ob_start();
include template('content', $template);
$this->createhtml($pagefile);
对应修改为
$pagefile = PHPCMS_PATH.$pagefile;
$mobilepagefile = PHPCMS_PATH.'html/wap'.str_replace(PHPCMS_PATH,'',$pagefile);
ob_start();
include template('mobile', $template);
$this->createhtml($mobilepagefile);
include template('content', $template);
$this->createhtml($pagefile);
(2) show()函数最后找到
$file = PHPCMS_PATH.$file;
include template('content', $template);
return $this->createhtml($file);
修改为
$file = PHPCMS_PATH.$file;
$mobilefile = PHPCMS_PATH.'html/wap'.str_replace(PHPCMS_PATH,'',$file);
ob_start();
include template('mobile', $template);
$this->createhtml($mobilefile);
include template('content', $template);
return $this->createhtml($file);
(3) category()最后找到
ob_start();
include template('content',$template);
return $this->createhtml($file, $copyjs);
修改为
$mobilefile = PHPCMS_PATH.'html/wap'.$base_file;
ob_start();
include template('mobile',$template);
$this->createhtml($mobilefile, $copyjs);
include template('content',$template);
return $this->createhtml($file, $copyjs);
(4) 找到index()下的
include template('content','index',$style);
return $this->createhtml($file, 1);
修改为
$mobilefile = PHPCMS_PATH.'html/wap/index.html';
include template('mobile','index',$style);
$this->createhtml($mobilefile, 1);
include template('content','index',$style);
return $this->createhtml($file, 1);
注意:该方法只支持静态的模板分离,动态路径下,移动与PC版是公用模板的。如果需要区分,可以在index.php或mca模型中调整路由进行识别。
本模块初始思路和大部分源码来源于生活铺站长。
鸣谢:Lulu,Zac.Joe