Bootstrap:如何在PHP代码中检测NavBar(移动或桌面)的状态?

时间:2015-10-08 12:57:08

标签: php mobile

我已经看到很多方法来检测用户是在移动设备上还是在桌面上。这与我的问题有关,但并非完全如此。

为了制作移动UI或桌面设备,我想要实现的目标是将我的逻辑基于Navbar元素。 这将使UI更加一致。

  

Navbars是用作导航的响应式元组件   您的应用程序或站点的标头。他们开始崩溃(并且是   在移动视图中可切换)并在可用时变为水平   视口宽度增加。

我的意思是这个应该显示我的桌面用户界面(主要用于HTML表格) enter image description here

虽然这个会触发移动UI:

enter image description here

您知道在PHP中是否有一种简单的方法可以实现这一目标吗? 根据结果​​,我将更改我的HTML表格。

非常感谢。

1 个答案:

答案 0 :(得分:1)

您可以尝试使用类似javascript的内容来查询浏览器,然后将导航栏ID或类设置为“mobile”(使用类可能有助于整个页面中出现的样式差异而不是单个ID),并且默认到“桌面”。

如果您严格要使用PHP,则需要$ _SERVER超全局,其中包含有关服务器对自身和客户端了解的信息。在这种情况下,$ _SERVER ['HTTP_USER_AGENT']将报告浏览器特定的构建,您可以根据超级全局的内容,为您支持的浏览器使用带有str_pos()函数的if / elseif / else块。 “x86”和“x86_64”之类的东西是桌面架构,而“ARMvX”则是移动处理器(有人请在移动和32位架构上验证我的假设是否正确)。

您应该使用以下内容使用browser-check.php在服务器上使用实际的移动设备:

<?php
    echo '<html><head></head><body>' . $_SERVER['HTTP_USER_AGENT'] . </body></html>';
?>

在不同的操作系统和设备上使用不同的浏览器进行测试,并按类别和子类别编译每个浏览器的详细信息列表,如下所示:

<?php
    $arch = null;
    $browser = $_SERVER['HTTP_USER_AGENT'];
    if (strpos("Firefox", $browser) === 1) {
        if (strpos("x86;", $browser) === 1) {$arch = "desktop-32";}
        if (strpos("x86_64;", $browser) === 1) {$arch = "desktop-64";}
        if (strpos("ARM", $browser) === 1) {$arch = "mobile";}
    }
    if (strpos("Chrome", $browser) === 1) {
    ...
    }
?>

希望这有助于您在浏览器支持列表中启动算法。请注意,我实际上只使用$ _SERVER ['HTTP_USER_AGENT']检查了我的浏览器,即:

Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:41.0) Gecko/20100101 Firefox/41.0

32位主要假设'x86;'是在那里,我真的不能告诉你什么是移动firefox报告的内容,因为我现在不想用网页访问我的网络服务器(它现在正在使用它的包来解决一些问题)。再次尝试一些较旧和较新的设备(是的,甚至是iPhone),看看它们产生了什么。如果您愿意,可以通过让页面脚本将$ _SERVER ['HTTP_USER_AGENT']的整个输出存储到数据库或flatfile中来匿名收集此数据,然后将客户端重定向到他们要查找的页面,直到您准备好做出改变。通过这种方式,您可以使用信息执行操作,并且客户端不会特别注意这个小的浏览器代理数据集(它是匿名的,所以它不应该是一个问题)。

此外,不要担心欺骗浏览器用户代理的人,因为如果他们不愿意正确报告其浏览器的架构(与其平台一致),则不一定会将其视为您网站的合法用户

:: EDIT ::

我忘了,你的主要问题是通过使用navbar元素聚焦你的逻辑来检测客户端是移动还是桌面。我会特别反对。

由于过去几年的移动浏览器有能力请求桌面版本,尽管它们的屏幕尺寸太小而无法处理它。决定导航栏状态(这将需要类似jQuery / Ajax,如果没有像js报告的客户端脚本,php将无法工作)将无法产生预期的结果,特别是如果设备是一个大型平板电脑,因为屏幕大小将报告高清分辨率,导航栏就像是在大型高清显示器上,只是更精细。您真的不希望您的平板电脑客户端只是因为它适合他们的屏幕而获得桌面导航栏,您希望为他们提供大多数应用程序和网站上存在的熟悉的三线按钮。

因此,在将HTML发送到客户端之前,我再次坚持我的PHP和/或jQuery信息收集的想法。