refactor: ipd平台访问重定向为mobile view改为可配置
This commit is contained in:
20
.env.local
20
.env.local
@@ -34,4 +34,22 @@ MAX_ATTACHMENT_SIZE = 100mb; # 附件上传最大限制
|
|||||||
# 开放API
|
# 开放API
|
||||||
[OPENAPI]
|
[OPENAPI]
|
||||||
RESOURCE_IMAGES_DOMAIN = http://local.orico.com; # 图片资源服务器地址
|
RESOURCE_IMAGES_DOMAIN = http://local.orico.com; # 图片资源服务器地址
|
||||||
RESOURCE_VIDEOS_DOMAIN = http://local.orico.com; # 视频资源服务器地址
|
RESOURCE_VIDEOS_DOMAIN = http://local.orico.com; # 视频资源服务器地址
|
||||||
|
|
||||||
|
# 视图模板规则配置
|
||||||
|
[VIEW_TPL]
|
||||||
|
# 视图目录
|
||||||
|
# query 规则:URL参数 mtpl=1 表示移动端访问
|
||||||
|
# 例如:http://xxxx.com?mtpl=1
|
||||||
|
# domain 规则:根据特定域名,判断是否移动端访问
|
||||||
|
# 例如:http://mobile.orico.cn
|
||||||
|
RULE = query
|
||||||
|
# query 规则参数名
|
||||||
|
RULE_QUERY_NAME = mtpl
|
||||||
|
# query 规则参数值
|
||||||
|
RULE_QUERY_VALUE = 1
|
||||||
|
# domain 规则协议
|
||||||
|
RULE_DOMAIN_SCHEME[] = http
|
||||||
|
RULE_DOMAIN_SCHEME[] = https
|
||||||
|
# domain 规则域名
|
||||||
|
RULE_DOMAIN_HOST = mobile.orico.cn
|
||||||
@@ -178,3 +178,47 @@ if (!function_exists('date_format_i18n')) {
|
|||||||
return date($fmt, $timestamp);
|
return date($fmt, $timestamp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!function_exists('get_platform')) {
|
||||||
|
/**
|
||||||
|
* 获取平台
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
function get_platform(): string
|
||||||
|
{
|
||||||
|
$detect = new \Detection\MobileDetect();
|
||||||
|
$platform = 'pc';
|
||||||
|
|
||||||
|
if ($detect->isMobile() || $detect->isTablet()) {
|
||||||
|
$platform = 'mobile';
|
||||||
|
} else {
|
||||||
|
// 在非移动端环境,根据配置规则判断是否要显示移动端
|
||||||
|
$view_cfg = $view_cfg = [
|
||||||
|
'rule' => env('VIEW_TPL.RULE', 'query'),
|
||||||
|
'query' => [
|
||||||
|
'name' => env('VIEW_TPL.RULE_QUERY_NAME', 'mtpl'),
|
||||||
|
'value' => env('VIEW_TPL.RULE_QUERY_VALUE', '1'),
|
||||||
|
],
|
||||||
|
'domain' => [
|
||||||
|
'scheme' => env('VIEW_TPL.RULE_DOMAIN_SCHEME', ['http']),
|
||||||
|
'host' => env('VIEW_TPL.RULE_DOMAIN_HOST'),
|
||||||
|
],
|
||||||
|
];
|
||||||
|
if ($view_cfg['rule'] == 'query') {
|
||||||
|
$name = $view_cfg['query']['name'];
|
||||||
|
$value = $view_cfg['query']['value'];
|
||||||
|
if (request()->get($name) == $value) {
|
||||||
|
$platform = 'mobile';
|
||||||
|
}
|
||||||
|
} elseif ($view_cfg['rule'] == 'domain') {
|
||||||
|
$scheme = $view_cfg['domain']['scheme'];
|
||||||
|
$host = $view_cfg['domain']['host'];
|
||||||
|
if (in_array(request()->scheme(), $scheme) && $host == request()->host()) {
|
||||||
|
$platform = 'mobile';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $platform;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -3,13 +3,7 @@
|
|||||||
// | 模板设置
|
// | 模板设置
|
||||||
// +----------------------------------------------------------------------
|
// +----------------------------------------------------------------------
|
||||||
|
|
||||||
use Detection\MobileDetect;
|
$view_device_name = get_platform();
|
||||||
|
|
||||||
$detect = new MobileDetect();
|
|
||||||
$view_device_name = 'pc';
|
|
||||||
if ($detect->isMobile() || $detect->isTablet() || request()->get('mtpl') == 1) {
|
|
||||||
$view_device_name = 'mobile';
|
|
||||||
}
|
|
||||||
|
|
||||||
return [
|
return [
|
||||||
// 模板引擎类型使用Think
|
// 模板引擎类型使用Think
|
||||||
|
|||||||
@@ -15,10 +15,7 @@ class ConfirmRequestFrom
|
|||||||
public function handle($request, \Closure $next)
|
public function handle($request, \Closure $next)
|
||||||
{
|
{
|
||||||
// 确认请求来源
|
// 确认请求来源
|
||||||
$request->from = 'pc';
|
$request->from = get_platform();
|
||||||
if ($request->isMobile() || $request->get('mtpl') == 1) {
|
|
||||||
$request->from = 'mobile';
|
|
||||||
}
|
|
||||||
|
|
||||||
return $next($request);
|
return $next($request);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -28,5 +28,31 @@
|
|||||||
{include file="public/footer"/}
|
{include file="public/footer"/}
|
||||||
{/block}
|
{/block}
|
||||||
{block name="script"}{/block}
|
{block name="script"}{/block}
|
||||||
|
<script>
|
||||||
|
$(window).ready(function () {
|
||||||
|
// 为所有站内链接,添加标识
|
||||||
|
// 使用mtpl=1参数标识解决ipad访问站点时,从pc重定向到mobile每次页面都会pc - mobile闪现问题
|
||||||
|
var LURL = new URL(window.location.href);
|
||||||
|
if (LURL.searchParams.get('mtpl') == 1) {
|
||||||
|
$('a').each(function () {
|
||||||
|
var href = $(this).attr('href');
|
||||||
|
if (href) {
|
||||||
|
var origin = LURL.origin;
|
||||||
|
if (href.indexOf('http') == -1) {
|
||||||
|
href = new URL(href, origin);
|
||||||
|
href.searchParams.set('mtpl', '1');
|
||||||
|
$(this).attr('href', href);
|
||||||
|
} else {
|
||||||
|
href = new URL(href);
|
||||||
|
if (href.origin == origin) {
|
||||||
|
href.searchParams.set('mtpl', '1');
|
||||||
|
$(this).attr('href', href);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
})
|
||||||
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
Reference in New Issue
Block a user