【问题标题】:How to make smarty change resource (template) name based on mobile detection如何基于移动检测智能更改资源(模板)名称
【发布时间】: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 不会让我这样做。

【问题讨论】:

    标签: php smarty smarty3


    【解决方案1】:

    我相信我已经找到了答案。覆盖 smarty 的 display 和 fetch 函数,使用 m 或 d 缓存调用模板并编译 id.. 像这样:

    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 的独特方法无需复制的模板。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-25
      • 2014-09-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多