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

时间:2011-04-19 02:58:02

标签: php javascript mobile

使用移动侦测(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语句中的不平衡括号=>我不确定那个

2 个答案:

答案 0 :(得分:1)

您的选择是:

1)在每个提供的PHP脚本/页面中执行PHP Mobile Detection(和/或将结果存储在会话变量中,因此每次访问时只需运行一次检测)。使用结果打开/关闭您呈现的标记的部分(即,如果访问者正在使用移动设备,则将$isMobile设置为true,并在创建HTML时包装“ top navi“以PHP为条件的部分if( $isMobile==true ){ ...”top navi“... }

2)如果您的主机允许,请创建一个子域名,例如 m.server.com (其中“server.com”是您的域名)。然后,您可以使用 .htaccess 规则强制任何移动设备加入“m。*”子域,或者再次使用PHP执行相同操作。在该子域中,拥有所有相同的页面/内容,但针对移动设备浏览器进行了优化。

3)使用CSS媒体查询使“top navi”元素可见。 Using Mobile Specific HTML, CSS & Javascript

答案 1 :(得分:1)

当然,是的。

我更喜欢创建一个函数:

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配置文件中完成。