简体   繁体   English

从移动版切换到完整网站(台式机版)

[英]Switch From Mobile Version to Full Website (Desktop Version)

I'm using this code to direct the users from desktop version to my mobile site. 我正在使用此代码将用户从台式机版本定向到我的移动网站。

 <?php
$useragent=$_SERVER['HTTP_USER_AGENT'];
if(preg_match('/android.+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i',$useragent)||preg_match('/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(di|rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i',substr($useragent,0,4)))
header('Location: http://mywebsite.com/mobile');
?>

i would like to give the users the option to switch back to desktop version from the mobile website but this code will redirect them back to mobile site. 我想为用户提供从移动网站切换回桌面版本的选项,但是此代码会将他们重定向回移动网站。 I was wondering if i can create an if statement to force the browser to stay on that page. 我想知道我是否可以创建一个if语句来强制浏览器停留在该页面上。 for example if i can link back from mobile website using www.mywebsite.com?device=desktop and modify the code to recognize the url. 例如,如果我可以使用www.mywebsite.com?device=desktop从移动网站链接回去,并修改代码以识别网址。 my knowledge of PHP is limited so any help would be greatly appreciated. 我对PHP的了解有限,因此不胜感激。

SOLUTION: 解:

** I tried to use session function as it was suggested in comments but i had issue with mobile devices. **我尝试使用评论中建议的会话功能,但移动设备出现问题。 it seemed that some mobile browsers doesn't handle session very well. 似乎某些移动浏览器不能很好地处理会话。

** I used cookie instead and with the help of this post was able to solve the issue. **我改用cookie,在这篇文章的帮助下可以解决此问题。 Below is the code i'm using. 下面是我正在使用的代码。

** NOTE: you can modify the detection code and time for setcookie to suit your needs **注意:您可以修改setcookie的检测代码和时间以适合您的需求

    <?php

    if (isset($_COOKIE['nomobile'])) {
      $version = "desktop";
    } else {

    if (preg_match('/iPhone|(...etc...)/', $_SERVER['HTTP_USER_AGENT'])) {
       $version = "mobile";
    } 

if ($version == "mobile") {
header('Location: http://yourwebsite.com/mobile');
}

    ?>

And you can use this code to create the cookie 您可以使用此代码创建Cookie

<?php 
setcookie('nomobile', 'true');
   header('Location: http://yourwebsite.com');
?>

When the user clicks the 'Full Site' link, you can pass a variable to PHP by appending it to the URL. 当用户单击“完整站点”链接时,可以通过将变量附加到URL来将其传递给PHP。 Here's an example of what the HTML link would look like on the mobile site: 这是HTML链接在移动网站上的外观示例:

<a href="http://mywebsite.com/?v=desktop">Full Site</a>

In PHP, the variable you passed in will be stored in $_GET['v'] ('v' is for version, but the naming is arbitrary). 在PHP中,您传入的变量将存储在$_GET['v'] ('v'用于版本,但命名是任意的)。 In your PHP code, you will first need to check whether $_GET['v'] is even set at all. 在您的PHP代码中,您首先需要检查$_GET['v']是否设置了。 If it is set, then you need to check whether or not it is set to 'desktop'. 如果设置,则需要检查是否将其设置为“桌面”。 If both are true, then you should set a session variable so that if the user refreshes the page they won't be redirected to the mobile site again. 如果两者都正确,则应设置一个会话变量,这样,如果用户刷新页面,就不会将其再次重定向到移动网站。

Now you need to check the session variable to see whether or not you should redirect the user. 现在,您需要检查会话变量以查看是否应重定向用户。 Again, you will need to first check that $_SESSION['v'] is set at all. 同样,您将需要首先检查$_SESSION['v']是否已设置。 If it is not set, then you should redirect the user. 如果设置,则应重定向用户。 If it is set, then you need to check whether or not it is set to 'desktop'. 如果设置,则需要检查是否将其设置为“桌面”。 If it is not set to 'desktop', then you should redirect the user. 如果将其设置为“桌面”,则应重定向用户。 Here's what the code would look like: 代码如下所示:

// Set a session variable if the user prefers the desktop version
if (isset($_GET['v']) && $_GET['v'] == 'desktop') {
    $_SESSION['v'] == 'desktop';
}

// Detect browser and redirect mobile users unless they've already opted out
if (!isset($_SESSION['v']) || (isset($_SESSION['v']) && $_SESSION['v'] != 'desktop')) {
    // Place browser detection and redirection code here
}

One of the nice things about PHP is that it will handle sessions for you, but you must explicitly tell PHP to do so. PHP的优点之一是它将为您处理会话,但是您必须明确地告诉PHP这样做。 You do this by using the session_start() function at the top of each page that needs to be part of the session. 您可以通过使用做到这一点session_start()函数在需要是会话的一部分的每个页面的顶部。 In this case, you would need a session_start() statement at the top of both the desktop site's page as well as the mobile site's page. 在这种情况下,您需要在台式机网站页面和移动网站页面的顶部都需要一个session_start()语句。

<?php 
    $useragent = $_SERVER['HTTP_USER_AGENT']; 
    if(preg_match('ultralongregex', substr($useragent,0,4)) && (!isset($_GET['device']) || $_GET['device'] != 'desktop'))
    header('Location: http://mywebsite.com/mobile'); 
?> 

with $_GET you can get the variables in your query_string (the ?hello=foo&bar=world with urls). 使用$ _GET,您可以在query_string(带有URL的?hello = foo&bar = world)中获取变量。 With $_GET['device'] you can explicitly use the ?device=desktop. 使用$ _GET ['device'],您可以显式使用?device = desktop。

We ask: if the variable is not set or the variable is not desktop(when it's set) we redirect to mobile page. 我们问:如果未设置变量或变量不是桌面变量(设置时),我们将重定向到移动页面。

EDIT: To improve this, you can store the GET in a SESSION variable (sessions will be started when you open a page and will only deleted when you close the browser): 编辑:为了改善这一点,您可以将GET存储在SESSION变量中(会话将在打开页面时启动,并且仅在关闭浏览器时才会删除):

Just add some part and modify the code: 只需添加一些部分并修改代码即可:

<?php 
    //Check if GET['device'] is set AND the session variable is not set. If true, set the session variable
    if(isset($_GET['device']) && !isset($_SESSION['device'])) $_SESSION['device'] = $_GET['device'];
    //code from top
    $useragent = $_SERVER['HTTP_USER_AGENT']; 
    //Modify here: $_SESSION instead of $_GET
    if(preg_match('ultralongregex',substr($useragent,0,4)) && (!isset($_SESSION['device']) || $_SESSION['device'] != 'desktop'))
    header('Location: http://mywebsite.com/mobile'); 
?> 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM