У меня есть плагин/функция, которую я использую для определения того, является ли устройство мобильным/планшетом/рабочим столом.Smarty объект экземпляра объекта внутри плагина
например:
<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}
, он возвращает строку «рабочий стол» (длина = 7)? Я думаю, что меня просто путают с типом плагина, который я должен использовать, так как теперь я хочу передать параметр плагину, должен ли я использовать модификатор? Я бы предпочел этот синтаксис {if $detect_device|isiOS}
, но это пытается проверить, является ли isiOS модификатором вместо параметра.
Q2. Есть ли способ кэшировать объект Mobile_Detect, чтобы он выполнял только вычисления пользовательского агента один раз?
Mobile обнаружить скрипт: https://github.com/serbanghita/Mobile-Detect