Я могу обнаружить мобильный. Когда мобильный телефон обнаружен, я устанавливаю константу SD_IS_MOBILE = true.
В моем сценарии я отображаю умный шаблон следующим образом:
$smarty->display("page.tpl.html");
В шаблоне непосредственно 2 файла шаблона существуют:
page.tpl.html.d
page.tpl.html.m
d для рабочего стола, m более мобильный.
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 не позволит мне.