Discuz! X 多模板共存(手机触屏版+APP模板)的解决方案(2020/01/13更新)
分类 网站技术/村民张先生 发布于 2018-12-20 22:04
应用场景:保留原有手机触屏模板的同时,新增一套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模板,并设置为手机触屏版。
欢迎谈谈你的看法(无须登录) *正文中请勿包含"http://"否则将被拦截