是否可以仅在移动设备中提供顶级导航?

问题描述

| 使用移动检测(js或PHP),是否可以显示仅用于移动设备的顶级导航? 我也看到很多在PHP中的移动检测-应该放在哪里?
{PHP}
function isMobilebrowser($user_agent = \'\') {
  foreach (array(\'iPhone\',\'Android\',\'Windows CE\',\'PPC\',\'Smartphone\',\'IEMobile\',\'Opera Mini\') as $mobile_browser_ua_snippet) {
    if (stristr($user_agent,$mobile_browser_ua_snippet)) {
      return true;
    }
  }
  return false;
}
{/PHP}

{if isMobilebrowser($_SERVER[\'HTTP_USER_AGENT\'])} 
{include file=\"templates/layouts/zones/mobileMenu.html\"}
{/if}
现在我得到了错误:语法错误:if语句中括号不平衡=>我不确定

解决方法

您的选择是: 1)在所服务的每个PHP脚本/页面中执行PHP移动检测(和/或将结果存储在会话变量中,因此检测每次访问只需运行一次)。使用结果来打开/关闭您渲染的标记的一部分(即,如果访问者正在使用移动设备,则将
$isMobile
设置为
true
,并且在创建HTML时,将\“ top navi \”部分包装在PHP的条件为
if( $isMobile==true ){
... \“ top navi \” ...
}
。 2)如果您的主机允许,则创建一个类似m.server.com的子域(其中\“ server.com \”是您的域)。然后,您可以使用.htaccess规则将任何移动设备强制移至\“ m。* \”子域,或者再次使用PHP进行相同的操作。在该子域中,具有所有相同的页面/内容,但针对移动设备浏览器进行了优化。 3)使用CSS媒体查询使\“ top navi \”元素可见。使用特定于移动设备的HTML,CSS和Javascript,当然可以 我更喜欢创建一个函数:
function isMobileBrowser($user_agent = \'\') {
  foreach (array(\'Windows CE\',\'PPC\',\'Smartphone\',\'IEMobile\',\'Opera Mini\') as $mobile_browser_ua_snippet) {
    if (stristr($user_agent,$mobile_browser_ua_snippet)) {
      return true;
    }
  }
  return false;
}
您建议从foreach中提取移动浏览器用户代理的子字符串数组 然后,在您的代码中,根据您用于输出HTML的内容,执行一个简单的条件,例如:
if (isMobileBrowser($_SERVER[\'HTTP_USER_AGENT\'])) {
include \'mobile_navi.inc.php\';
}
我还建议您创建整个网站的移动版本。假设您的网站域名为mysite.com,在m.website.com创建移动版本,然后将移动访问者重定向到m.website.com,如下所示:
// THIS CODE SHOULD REMAIN **BEFORE** ANY OUTPUT!!!
if (isMobileBrowser($_SERVER[\'HTTP_USER_AGENT\'])) {
  header(\'Location: http://m.website.com\'.$_SERVER[\'REQUEST_URI\']);
}
或者,您可以在apache的mod_rewrite中执行此操作(您将拥有与移动brosers用户代理子字符串一样多的RewriteConds)。我相信它也可以在nginx配置文件中完成。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...