Я могу обнаружить мобильный. Когда мобильный обнаружен, я устанавливаю константу 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 не позволит мне.
Я верю, что нашел ответ. Переопределите функции 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 без нужно для дублирования.
Других решений пока нет …