需要使用PHP检测移动浏览器并加载Joomla模板的mobile.css文件
我需要通过php检测是否有人在使用移动浏览器(在这种情况下,媒体查询是不够的),然后加载mobile.css文件以覆盖几行css,因为我正在使用的某些代码缺乏适当的支持。我正在构建一个joomla模板,所以我需要它来动态生成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
$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代码开始的