1

我需要通过 php 检测是否有人正在使用移动浏览器(在这种情况下媒体查询还不够),然后加载一个 mobile.css 文件以覆盖几行 css,因为我对某些代码缺乏适当的支持米使用。我正在构建一个 joomla 模板,所以我需要它来动态生成 css 文件的路径。那么,我这样做对吗?例子:

<?php
$iphone = strpos($_SERVER['HTTP_USER_AGENT'],"iPhone");
$android = strpos($_SERVER['HTTP_USER_AGENT'],"Android");
$palmpre = strpos($_SERVER['HTTP_USER_AGENT'],"webOS");
$berry = strpos($_SERVER['HTTP_USER_AGENT'],"BlackBerry");
$ipod = strpos($_SERVER['HTTP_USER_AGENT'],"iPod");

if ($iphone || $android || $palmpre || $ipod || $berry == true) 
{ 
echo "<link rel="stylesheet" href="$this->baseurl/templates/$this->template/css/mobile.css" type="text/css">";
}
?>
4

3 回答 3

9

在 Joomla 中内置了移动检测。

如果您使用的是 Joomla 3.0,您可以使用:

<?php
$templateUrl = $this->baseurl . '/templates/' . $this->template;
$doc         = JFactory::getDocument();
$appWeb      = new JApplicationWeb; // new JWebClient; (in Joomla 2.5)

if ($appWeb->client->mobile)
{
    $doc->addStyleSheet($templateUrl . '/css/mobile.css');
}
?>

在 Joomla 2.5 或更低版本中你会使用$appWeb = new JWebClient

在 Joomla 3.4 中你可能会使用if (JFactory::getApplication()->client->mobile)

我没有找到文档页面,但您可以随时检查源代码

顺便说一下,看看响应式框架。学习需要时间,但值得。

于 2013-04-18T07:59:39.743 回答
2

有一些可用的库,如 Mobile_Detect,您可以使用它们来检测您正在使用桌面、移动设备或平板电脑的哪个频道,并可以相应地加载 css。你可以在这里找到下载链接

请按照以下步骤操作:

1 从以上链接下载 Mobile_detect 文件。

2 将文件放在项目的某个文件夹中

3 现在将该文件包含在您要检查频道是移动版还是桌面版的页面中。即包括mobile_detect.php(类似这样的东西)4)然后一旦你包括上面的文件就这样做

$this->detect = new Mobile_Detect;
$channel = 'desktop';

if ($this->detect->isTablet() || 't' == $_REQUEST['device']) {
    $channel = 'tablet';
} elseif ($this->detect->isMobile() || 'm' == $_REQUEST['device']) {
     $channel = 'mobile';
}

因此,您的 $channel 变量将具有频道,使用此变量您可以检查 $channel 是否不等于桌面,那么它将是移动的。您可以相应地加载 mobile.css。希望能帮助到你。

于 2013-04-18T06:34:23.470 回答
0

正如您在评论中明确表示您希望使用自己的方法,请注意您的if陈述和echo存在问题:如文档中所述strpos返回整数或 FALSE,因此您的软布尔比较==不起作用,因为整数的结果0 是正匹配,但会隐式转换为 FALSE。你echo也没有逃脱;我鼓励您使用单引号来减少丢失转义的风险。解决这些问题的更新代码如下:

// ... $iphone = strpos(... etc

if($iphone !== false || $android !== false || $palmpre !== false || $ipod !== false || $berry !== false)
{
  echo('<link rel="stylesheet" href="' . $this->baseurl . '/templates/' . $this->template . '/css/mobile.css" type="text/css">');
}
于 2013-04-18T08:07:57.417 回答