在 SMARTY 3 中的包含模板上使用 :default 作为文件名

发布于 2024-10-16 05:50:39 字数 677 浏览 2 评论 0原文

尽管我认为这个问题没有达到应有的水平,但让我尝试在这里更好地解释一下。

我有一个使用 SMARTY 3 作为模板系统的网站。我有一个类似于下面的模板结构:

/templates/place1/inner_a.tpl
/templates/place1/inner_b.tpl

/templates/place2/inner_b.tpl
/templates/place2/inner_c.tpl

/templates/default/inner_a.tpl
/templates/default/inner_b.tpl
/templates/default/inner_c.tpl

包含在父模板中

{include file="{$temp_folder}/{$inner_template}"}

这些模板使用“到目前为止很棒” 。我想做的是有一个默认值,如果文件 {$temp_folder}/{$inner_template} 不存在,它会使用 default/{$ 处的等效文件内部模板}

即如果我这样做 {include file="place1/inner_c.tpl"},因为该文件不存在,所以它实际上包含“default/inner_c.tpl”

这可能吗?

Although I don't think the question was as good as it could be, let me try to explain better here.

I have a site using SMARTY 3 as the template system. I have a template structure similar to the below one:

/templates/place1/inner_a.tpl
/templates/place1/inner_b.tpl

/templates/place2/inner_b.tpl
/templates/place2/inner_c.tpl

/templates/default/inner_a.tpl
/templates/default/inner_b.tpl
/templates/default/inner_c.tpl

These are getting included on the parent template using

{include file="{$temp_folder}/{$inner_template}"}

So far great. What I wanted to do is having a default for, in the case that the file {$temp_folder}/{$inner_template} does not exists, it uses the equivalent file at default/{$inner_template}.

i.e. If I do {include file="place1/inner_c.tpl"}, since that file does not exists it in fact includes "default/inner_c.tpl"

Is it possible?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

再浓的妆也掩不了殇 2024-10-23 05:50:39

你必须在 php 中完成它,smarty 没有办法检查文件是否存在。

您也可以编写自己的模板处理程序。

<?php
// put this function somewhere in your application

function make_template ($resource_type, $resource_name, &$template_source, &$template_timestamp,
&$smarty_obj)
{
    if( $resource_type == 'file' ) {
        if ( ! is_readable ( $resource_name )) {
            // create the template file, return contents.
            $template_source = "This is a new template.";
            require_once SMARTY_CORE_DIR . 'core.write_file.php';
            smarty_core_write_file( array( 'filename'=>$smarty_obj->template_dir . DIRECTORY_SEPARATOR . $resource_name, 'contents'=>$template_source ), $smarty_obj ); 
            return true;
        }
    } else {
        // not a file
        return false;
    }
}

// set the default handler
$smarty->default_template_handler_func = 'make_template';
?>

You'll have to do it in php, smarty doesn't have a way to check if a file exists.

You could write your own template handler too.

<?php
// put this function somewhere in your application

function make_template ($resource_type, $resource_name, &$template_source, &$template_timestamp,
&$smarty_obj)
{
    if( $resource_type == 'file' ) {
        if ( ! is_readable ( $resource_name )) {
            // create the template file, return contents.
            $template_source = "This is a new template.";
            require_once SMARTY_CORE_DIR . 'core.write_file.php';
            smarty_core_write_file( array( 'filename'=>$smarty_obj->template_dir . DIRECTORY_SEPARATOR . $resource_name, 'contents'=>$template_source ), $smarty_obj ); 
            return true;
        }
    } else {
        // not a file
        return false;
    }
}

// set the default handler
$smarty->default_template_handler_func = 'make_template';
?>
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文