需要使用PHP检测移动浏览器并加载Joomla模板的mobile.css文件

需要使用PHP检测移动浏览器并加载Joomla模板的mobile.css文件,php,css,mobile,joomla,detection,Php,Css,Mobile,Joomla,Detection,我需要通过php检测是否有人在使用移动浏览器(在这种情况下,媒体查询是不够的),然后加载mobile.css文件以覆盖几行css,因为我正在使用的某些代码缺乏适当的支持。我正在构建一个joomla模板,所以我需要它来动态生成css文件的路径。那么,我这样做对吗?例如: <?php $iphone = strpos($_SERVER['HTTP_USER_AGENT'],"iPhone"); $android = strpos($_SERVER['HTTP_USER_AGENT'],"And

我需要通过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">";
}
?>

有像Mobile\u 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是否不等于desktop,那么它将是移动的。您可以相应地加载mobile.css。希望有帮助。

有一些可用的库,如Mobile\u 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是否不等于desktop,那么它将是移动的。您可以相应地加载mobile.css。希望有帮助。

在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)

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


顺便说一下,看看响应性框架。学习需要时间,但值得。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)

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


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

正如您在评论中明确指出的,您希望使用自己的方法,请注意您的
if
语句和
echo
存在问题: 由于,
strpos
返回一个整数或FALSE,因此与
=
的软布尔比较将不起作用,因为整数0的结果是正匹配,但会隐式转换为FALSE。 而且您的
回音
不会被转义;我鼓励你用单引号来减少逃逸的风险。解决这些问题的更新代码如下:

// ... $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">');
}
/$iphone=strpos(…等)
如果($iphone!==false | |$android!==false | |$palmpre!==false | |$ipod!==false | |$berry!==false)
{
回声(“”);
}

正如您在评论中明确表示希望使用自己的方法,请注意您的
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">');
}
/…$iphone=strpos(…等)
如果($iphone!==false | |$android!==false | |$palmpre!==false | |$ipod!==false | |$berry!==false)
{
回声(“”);
}

我已经在使用我自己制作的响应代码。这不是问题所在。我有一个特殊的原因来隐藏对象,javascript根据滚动位置为元素设置动画…它在触摸屏设备上无法正常工作,因为它在滚动完成后才注册滚动。我想我应该只注册objec如果检测到移动设备,则不会隐藏。我想使用Joomla 3.0…但我不确定我将使用的所有扩展是否都能确保兼容。我仍然需要测试。但如果不是3,则我将使用Joomla 2.5。因此,对于2.5,我将使用“if($appWeb->client->mobile)”替换为“if($appWeb=new JWebClient)”?请原谅,我对php和javascript非常熟悉。我已经使用了自己编写的响应代码。这不是问题所在。我有一个特殊的原因来隐藏对象,一个javascript根据滚动位置为元素设置动画…它在触摸屏设备上无法正常工作,因为它在屏幕关闭后才注册滚动滚动已完成。我想如果检测到移动设备,我会将对象隐藏起来。我想使用Joomla 3.0…但我不确定我将使用的所有扩展是否都能确保兼容。我仍然需要测试。但如果不是3,那么我将使用Joomla 2.5。因此,使用2.5,我将用“if($appWeb->client->mobile)”替换为“if($appWeb->client->mobile)”“如果($appWeb=new JWebClient)”?请原谅,我对php和javascript非常熟悉。我看了一下,不知道如何正确使用资源……我对处理php非常陌生……主要是从破解Jo的php代码开始的