老张小站

  1. 欢迎光临

    感谢访问老张的博客!

  • 1
1,987

Discuz! X 多模板共存(手机触屏版+APP模板)的解决方案(2020/01/13更新)

分类 网站技术/村民张先生 发布于 2018-12-20 22:04
0

应用场景:保留原有手机触屏模板的同时,新增一套HTML5 APP模板并封装成APP供用户使用,两者互不影响(通过浏览器访问时使用原有手机触屏模板,通过APP访问时使用APP模板)。

解决方案:

1、通过 function_core.php 中的 checkmobile() 函数可知,原“手机标准版”(mobile=1)仅供Windows Phone使用,而目前使用Windows Phone的用户已经非常稀少,可不再针对其应用单独的模板(改为使用现有触屏版或wml版)。这样“手机标准版”(mobile=1)是空缺的,我们将原有手机触屏版改为标准版,新的APP模板作为触屏版。

打开 source/function/function_core.php ,

查找:

	static $touchbrowser_list =array('iphone', 'android', 'phone', 'mobile', 'wap', 'netfront', 'java', 'opera mobi', 'opera mini',
				'ucweb', 'windows ce', 'symbian', 'series', 'webos', 'sony', 'blackberry', 'dopod', 'nokia', 'samsung',
				'palmsource', 'xda', 'pieplus', 'meizu', 'midp', 'cldc', 'motorola', 'foma', 'docomo', 'up.browser',
				'up.link', 'blazer', 'helio', 'hosin', 'huawei', 'novarra', 'coolpad', 'webos', 'techfaith', 'palmsource',
				'alcatel', 'amoi', 'ktouch', 'nexian', 'ericsson', 'philips', 'sagem', 'wellcom', 'bunjalloo', 'maui', 'smartphone',
				'iemobile', 'spice', 'bird', 'zte-', 'longcos', 'pantech', 'gionee', 'portalmmm', 'jig browser', 'hiptop',
				'benq', 'haier', '^lct', '320x320', '240x320', '176x220');
	static $mobilebrowser_list =array('windows phone');

替换为:

	static $touchbrowser_list =array('html5plus', '你其它的APP UA');
	static $mobilebrowser_list =array('iphone', 'android', 'phone', 'mobile', 'wap', 'netfront', 'java', 'opera mobi', 'opera mini',
				'ucweb', 'windows ce', 'symbian', 'series', 'webos', 'sony', 'blackberry', 'dopod', 'nokia', 'samsung',
				'palmsource', 'xda', 'pieplus', 'meizu', 'midp', 'cldc', 'motorola', 'foma', 'docomo', 'up.browser',
				'up.link', 'blazer', 'helio', 'hosin', 'huawei', 'novarra', 'coolpad', 'webos', 'techfaith', 'palmsource',
				'alcatel', 'amoi', 'ktouch', 'nexian', 'ericsson', 'philips', 'sagem', 'wellcom', 'bunjalloo', 'maui', 'smartphone',
				'iemobile', 'spice', 'bird', 'zte-', 'longcos', 'pantech', 'gionee', 'portalmmm', 'jig browser', 'hiptop',
				'benq', 'haier', '^lct', '320x320', '240x320', '176x220', 'windows phone');

交换一下以下两端代码的顺序(否则APP访问时会因UA含有$mobilebrowser_list中的内容而无法进入APP版):

	if(($v = dstrpos($useragent, $mobilebrowser_list, true))){
		$_G['mobile'] = $v;
		return '1';
	}
	if(($v = dstrpos($useragent, $touchbrowser_list, true))){
		$_G['mobile'] = $v;
		return '2';
	}

即替换为:

	if(($v = dstrpos($useragent, $touchbrowser_list, true))){
		$_G['mobile'] = $v;
		return '2';
	}
	if(($v = dstrpos($useragent, $mobilebrowser_list, true))){
		$_G['mobile'] = $v;
		return '1';
	}

查找:

IN_MOBILE == 2

替换为(否则AJAX弹窗会存在问题):

IN_MOBILE == 2 || IN_MOBILE == 1

打开 source/class/model/ 下的 model_forum_post.php 和 model_forum_thread.php 文件,

查找:

IN_MOBILE == 2

替换为:

(IN_MOBILE == 2 || IN_MOBILE == 1)

2、将原手机触屏模板目录下的 touch 文件夹重命名为 mobile ,并在后台-界面-风格管理中将“手机标准版”设置为该模板,更新缓存。

2020/01/13 补充:
请注意将 mobile 模板中的所有 mobile=2 替换为 mobile=1 ,否则回帖和进行管理操作时可能出现“您的请求来路不正确”“您无权进行管理操作”等各种报错。

3、上传安装新的APP模板,并设置为手机触屏版。

欢迎转载分享,转载请注明 来源:大张小站 https://www.zhang.cq.cn/20182093.html
若您喜欢这篇文章,欢迎订阅老张小站以获得最新内容。 / 欢迎交流探讨,请发电子邮件至 mail[at]vdazhang.com 。


欢迎谈谈你的看法(无须登录) *正文中请勿包含"http://"否则将被拦截