【发布时间】:2014-10-10 02:59:26
【问题描述】:
我能够检测到移动设备。当检测到移动设备时,我设置常量 SD_IS_MOBILE = true。
在我的脚本中,我显示了一个如下所示的 smarty 模板:
$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 不会让我这样做。
【问题讨论】: