我有一个插件/功能,用于检测设备是否是移动设备/平板电脑/台式机。
例如:
<img src="/path/to/images/foo{if detect_device == 'desktop'}-highres{/if}.jpg"
插入
<?php
/*
* Smarty plugin
* -------------------------------------------------------------
* File: function.detect_device.php
* Type: function
* Name: detect_device
* Purpose: Simple plugin to access Mobile_Detect methods from within templates
* Examples:
* {if detect_device == 'tablet'} - return string either: mobile/tablet/desktop
* {if detect_device action='isAndroidOS'} - boolean
* {if detect_device action='isiOS'} - boolean
* -------------------------------------------------------------
*/
function smarty_function_detect_device($params, &$smarty)
{
// Include and instantiate the class.
require_once 'Mobile_Detect/Mobile_Detect.php';
$detect = new Mobile_Detect;
// Access specific method
if(!empty($params)){
foreach($params as $param){
if(method_exists($detect, $param)){
return $detect->$param();
}
}
} else {
// Simple device type
switch (true) {
case $detect->isMobile() : return 'mobile';
case $detect->isTablet() : return 'tablet';
default : return 'desktop';
}
}
}
?>
Q1。为什么这从来都不是真的{if detect_device == 'desktop'}
,但是当我
{detect_device|@var_dump}
返回字符串'desktop'(长度= 7)时?我想我只是混淆了我应该使用的插件类型,因为我现在想将参数传递给插件,我应该使用修饰符吗?我更喜欢这种语法{if $detect_device|isiOS}
,但这会尝试检查 isiOS 是否是修饰符而不是参数。
Q2。有没有办法缓存 Mobile_Detect 对象,以便只执行一次用户代理计算?