【问题标题】:How to remove content appended to block in parent template?如何删除附加到父模板中的块的内容?
【发布时间】:2014-08-04 11:41:28
【问题描述】:

我有三个模板:

base.tpl

{block name="myBlock"}
    base
{/block}

child.tpl

{extends file="base.tpl"}
{block name="myBlock" append}
    child
{/block}

grandchild.tpl

{extends file="child.tpl"}
{block name="myBlock" append}
    grandchild
{/block}

渲染grandchild.tpl时的输出是

base
child
grandchild

但是我想跳过child.tpl添加的内容,所以我想得到这个输出:

base
grandchild

问题是这需要在不更改base.tpl 和child.tpl(都来自第三方)的情况下完成,我不能只在grandchild.tpl 中扩展base.tpl,因为有更多内容块在child.tpl 我想在结果中。

【问题讨论】:

    标签: inheritance smarty template-engine


    【解决方案1】:

    在这种情况下,您应该简单地更改 base.tpl 和 grandchild.tpl 中的块名称,并保持 child.tpl 不变。

    base.tpl

    {block name="myBlock2"}
        base
    {/block}
    

    child.tpl

    {extends file="base.tpl"}
    {block name="myBlock" append}
        child
    {/block}
    

    grandchild.tpl

    {extends file="child.tpl"}
    {block name="myBlock2" append}
        grandchild
    {/block}
    

    现在的输出是:

    基地
    孙子

    编辑 - 来自评论的信息表明 base.tpl 也无法修改

    看来您唯一需要做的就是从 grandchild.tpl 中删除 append 并保持其他 2 个文件不变。

    grandchild.tpl

    {extends file="child.tpl"}
    {block name="myBlock"}
        grandchild
    {/block}
    

    输出是:

    基地
    孙子

    如你所愿

    【讨论】:

    • 我也无法修改base.tpl,它也是来自第三方...忘了说,对不起:(
    • 为什么会这样?我认为这样做会重置整个块,一直到继承树。但它似乎只是覆盖了child.tpl的“附加”?
    • 对我来说这也很奇怪。但似乎当您不使用附加(并且可能预先添加)时,除了直接父级之外,这个块的全部内容都会被添加。您可以尝试在不追加的情况下再添加一个grandgrandchild.tpl,然后再次将追加添加到孙子。然后输出将是base child grandgrandchild,因此它使用除了直接父级之外的父级的内容。你也可以使用{$smarty.block.parent},如果你愿意,最后有输出,例如base child grandgrandchild grandchild
    猜你喜欢
    • 1970-01-01
    • 2012-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-27
    • 2021-06-03
    • 2014-10-28
    相关资源
    最近更新 更多