Как правильно сменить имя ресурса (шаблона) на основе обнаружения мобильных устройств

Я могу обнаружить мобильный. Когда мобильный обнаружен, я устанавливаю константу SD_IS_MOBILE = true.

В моем скрипте я показываю шаблон Smarty, например, так:

$smarty->display("page.tpl.html");

В шаблоне непосредственно существует 2 файла шаблона:

page.tpl.html.d
page.tpl.html.m

d для настольного компьютера, м более мобильный.

Smarty не найдет шаблон, который я запрашиваю (чего я и ожидаю), а затем использует мою функцию default_template_handler для загрузки правильного.

function __default_template_handler($resource_type, $resource_name, &$template_source, &$template_timestamp, $smarty_obj) {
if ($resource_type == 'file') {

if (SD_IS_MOBILE && file_exists(SD_TEMPLATE_ROOT.$resource_name.".m")) {

$template_source = file_get_contents(SD_TEMPLATE_ROOT.$resource_name.".m");
$template_timestamp = filemtime(SD_TEMPLATE_ROOT.$resource_name.".m");
$resource_name = $resource_name.".m";
return true;
} elseif (file_exists(SD_TEMPLATE_ROOT.$resource_name.".d")) {

$template_source = file_get_contents(SD_TEMPLATE_ROOT.$resource_name.".d");
$template_timestamp = filemtime(SD_TEMPLATE_ROOT.$resource_name.".d");
$resource_name = $resource_name.".d";
return true;
}

return false;
}
}

проблема в том, что smarty компилирует оба с оригинальным именем «page.html.tpl». Как я могу получить его для компиляции с расширениями «.m» и «.d»? Я думал, что мог бы просто изменить параметр типа ресурса функций default_template_handler, чтобы передать по значению и изменить имя ресурса (как я делаю выше), но smarty не позволит мне.

0

Решение

Я верю, что нашел ответ. Переопределите функции smarty для отображения и выборки, вызывая шаблон с кешем m или d и идентификатором компиляции, например так:

function display($var) {

if (SD_IS_MOBILE) {
parent::display($var, "m","m");
} else {
parent::display($var, "d","d");
}

}

function fetch($var) {

if (SD_IS_MOBILE) {
return parent::fetch($var, "m","m");
} else {
return parent::fetch($var, "d","d");
}

}

Я еще не запустил все приложение с этим кодом на месте … но он, кажется, работает до сих пор … и в сочетании с моим вышеупомянутым обработчиком шаблонов по умолчанию, я считаю, что я нашел уникальный способ обрабатывать мобильные шаблоны Smarty без нужно для дублирования.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]