Inheritance 如何删除附加到父模板中块的内容?

Inheritance 如何删除附加到父模板中块的内容?,inheritance,smarty,template-engine,Inheritance,Smarty,Template Engine,我有三个模板: base.tpl {block name="myBlock"} base {/block} {extends file="base.tpl"} {block name="myBlock" append} child {/block} {extends file="child.tpl"} {block name="myBlock" append} grandchild {/block} {block name="myBlock2"} base

我有三个模板:

base.tpl

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

{block name="myBlock"}
    base
{/block}
{extends file="base.tpl"}
{block name="myBlock" append}
    child
{/block}
{extends file="child.tpl"}
{block name="myBlock" append}
    grandchild
{/block}
{block name="myBlock2"}
    base
{/block}
{extends file="base.tpl"}
{block name="myBlock" append}
    child
{/block}
{extends file="child.tpl"}
{block name="myBlock2" append}
    grandchild
{/block}
{extends file="child.tpl"}
{block name="myBlock"}
    grandchild
{/block}
孙子.第三方物流

{block name="myBlock"}
    base
{/block}
{extends file="base.tpl"}
{block name="myBlock" append}
    child
{/block}
{extends file="child.tpl"}
{block name="myBlock" append}
    grandchild
{/block}
{block name="myBlock2"}
    base
{/block}
{extends file="base.tpl"}
{block name="myBlock" append}
    child
{/block}
{extends file="child.tpl"}
{block name="myBlock2" append}
    grandchild
{/block}
{extends file="child.tpl"}
{block name="myBlock"}
    grandchild
{/block}
渲染
孙子.tpl
时的输出为

base
child
grandchild
但是我想跳过
child.tpl
添加的内容,因此我想得到以下输出:

base
grandchild

问题是,这需要在不更改
base.tpl
child.tpl
(两者都来自第三方)的情况下完成,我不能只在
孙子.tpl
中扩展
base.tpl
,由于在
child.tpl
中有更多包含内容的块,我希望在结果中包含这些内容。

在这种情况下,您只需在
base.tpl
孙子.tpl
中更改块的名称,并保持
child.tpl
不变

base.tpl

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

{block name="myBlock"}
    base
{/block}
{extends file="base.tpl"}
{block name="myBlock" append}
    child
{/block}
{extends file="child.tpl"}
{block name="myBlock" append}
    grandchild
{/block}
{block name="myBlock2"}
    base
{/block}
{extends file="base.tpl"}
{block name="myBlock" append}
    child
{/block}
{extends file="child.tpl"}
{block name="myBlock2" append}
    grandchild
{/block}
{extends file="child.tpl"}
{block name="myBlock"}
    grandchild
{/block}
孙子.第三方物流

{block name="myBlock"}
    base
{/block}
{extends file="base.tpl"}
{block name="myBlock" append}
    child
{/block}
{extends file="child.tpl"}
{block name="myBlock" append}
    grandchild
{/block}
{block name="myBlock2"}
    base
{/block}
{extends file="base.tpl"}
{block name="myBlock" append}
    child
{/block}
{extends file="child.tpl"}
{block name="myBlock2" append}
    grandchild
{/block}
{extends file="child.tpl"}
{block name="myBlock"}
    grandchild
{/block}
现在的输出是:

基础
孙子

编辑-来自评论的信息之后,base.tpl也无法修改

似乎您唯一需要做的就是从
孙子.tpl
中删除
append
,并保留另外两个文件不变

孙子.第三方物流

{block name="myBlock"}
    base
{/block}
{extends file="base.tpl"}
{block name="myBlock" append}
    child
{/block}
{extends file="child.tpl"}
{block name="myBlock" append}
    grandchild
{/block}
{block name="myBlock2"}
    base
{/block}
{extends file="base.tpl"}
{block name="myBlock" append}
    child
{/block}
{extends file="child.tpl"}
{block name="myBlock2" append}
    grandchild
{/block}
{extends file="child.tpl"}
{block name="myBlock"}
    grandchild
{/block}
输出为:

基础
孙子


正如您所希望的那样,在这种情况下,您只需在
base.tpl
孙子.tpl
中更改块的名称,并保持
child.tpl
不变

base.tpl

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

{block name="myBlock"}
    base
{/block}
{extends file="base.tpl"}
{block name="myBlock" append}
    child
{/block}
{extends file="child.tpl"}
{block name="myBlock" append}
    grandchild
{/block}
{block name="myBlock2"}
    base
{/block}
{extends file="base.tpl"}
{block name="myBlock" append}
    child
{/block}
{extends file="child.tpl"}
{block name="myBlock2" append}
    grandchild
{/block}
{extends file="child.tpl"}
{block name="myBlock"}
    grandchild
{/block}
孙子.第三方物流

{block name="myBlock"}
    base
{/block}
{extends file="base.tpl"}
{block name="myBlock" append}
    child
{/block}
{extends file="child.tpl"}
{block name="myBlock" append}
    grandchild
{/block}
{block name="myBlock2"}
    base
{/block}
{extends file="base.tpl"}
{block name="myBlock" append}
    child
{/block}
{extends file="child.tpl"}
{block name="myBlock2" append}
    grandchild
{/block}
{extends file="child.tpl"}
{block name="myBlock"}
    grandchild
{/block}
现在的输出是:

基础
孙子

编辑-来自评论的信息之后,base.tpl也无法修改

似乎您唯一需要做的就是从
孙子.tpl
中删除
append
,并保留另外两个文件不变

孙子.第三方物流

{block name="myBlock"}
    base
{/block}
{extends file="base.tpl"}
{block name="myBlock" append}
    child
{/block}
{extends file="child.tpl"}
{block name="myBlock" append}
    grandchild
{/block}
{block name="myBlock2"}
    base
{/block}
{extends file="base.tpl"}
{block name="myBlock" append}
    child
{/block}
{extends file="child.tpl"}
{block name="myBlock2" append}
    grandchild
{/block}
{extends file="child.tpl"}
{block name="myBlock"}
    grandchild
{/block}
输出为:

基础
孙子


正如您所希望的那样,在这种情况下,您只需在
base.tpl
孙子.tpl
中更改块的名称,并保持
child.tpl
不变

base.tpl

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

{block name="myBlock"}
    base
{/block}
{extends file="base.tpl"}
{block name="myBlock" append}
    child
{/block}
{extends file="child.tpl"}
{block name="myBlock" append}
    grandchild
{/block}
{block name="myBlock2"}
    base
{/block}
{extends file="base.tpl"}
{block name="myBlock" append}
    child
{/block}
{extends file="child.tpl"}
{block name="myBlock2" append}
    grandchild
{/block}
{extends file="child.tpl"}
{block name="myBlock"}
    grandchild
{/block}
孙子.第三方物流

{block name="myBlock"}
    base
{/block}
{extends file="base.tpl"}
{block name="myBlock" append}
    child
{/block}
{extends file="child.tpl"}
{block name="myBlock" append}
    grandchild
{/block}
{block name="myBlock2"}
    base
{/block}
{extends file="base.tpl"}
{block name="myBlock" append}
    child
{/block}
{extends file="child.tpl"}
{block name="myBlock2" append}
    grandchild
{/block}
{extends file="child.tpl"}
{block name="myBlock"}
    grandchild
{/block}
现在的输出是:

基础
孙子

编辑-来自评论的信息之后,base.tpl也无法修改

似乎您唯一需要做的就是从
孙子.tpl
中删除
append
,并保留另外两个文件不变

孙子.第三方物流

{block name="myBlock"}
    base
{/block}
{extends file="base.tpl"}
{block name="myBlock" append}
    child
{/block}
{extends file="child.tpl"}
{block name="myBlock" append}
    grandchild
{/block}
{block name="myBlock2"}
    base
{/block}
{extends file="base.tpl"}
{block name="myBlock" append}
    child
{/block}
{extends file="child.tpl"}
{block name="myBlock2" append}
    grandchild
{/block}
{extends file="child.tpl"}
{block name="myBlock"}
    grandchild
{/block}
输出为:

基础
孙子


正如您所希望的那样,在这种情况下,您只需在
base.tpl
孙子.tpl
中更改块的名称,并保持
child.tpl
不变

base.tpl

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

{block name="myBlock"}
    base
{/block}
{extends file="base.tpl"}
{block name="myBlock" append}
    child
{/block}
{extends file="child.tpl"}
{block name="myBlock" append}
    grandchild
{/block}
{block name="myBlock2"}
    base
{/block}
{extends file="base.tpl"}
{block name="myBlock" append}
    child
{/block}
{extends file="child.tpl"}
{block name="myBlock2" append}
    grandchild
{/block}
{extends file="child.tpl"}
{block name="myBlock"}
    grandchild
{/block}
孙子.第三方物流

{block name="myBlock"}
    base
{/block}
{extends file="base.tpl"}
{block name="myBlock" append}
    child
{/block}
{extends file="child.tpl"}
{block name="myBlock" append}
    grandchild
{/block}
{block name="myBlock2"}
    base
{/block}
{extends file="base.tpl"}
{block name="myBlock" append}
    child
{/block}
{extends file="child.tpl"}
{block name="myBlock2" append}
    grandchild
{/block}
{extends file="child.tpl"}
{block name="myBlock"}
    grandchild
{/block}
现在的输出是:

基础
孙子

编辑-来自评论的信息之后,base.tpl也无法修改

似乎您唯一需要做的就是从
孙子.tpl
中删除
append
,并保留另外两个文件不变

孙子.第三方物流

{block name="myBlock"}
    base
{/block}
{extends file="base.tpl"}
{block name="myBlock" append}
    child
{/block}
{extends file="child.tpl"}
{block name="myBlock" append}
    grandchild
{/block}
{block name="myBlock2"}
    base
{/block}
{extends file="base.tpl"}
{block name="myBlock" append}
    child
{/block}
{extends file="child.tpl"}
{block name="myBlock2" append}
    grandchild
{/block}
{extends file="child.tpl"}
{block name="myBlock"}
    grandchild
{/block}
输出为:

基础
孙子


正如你所希望的,我也不能修改
base.tpl
,它也来自第三方。。。抱歉,忘了提到这一点:(为什么这样做?我以为这样做会重置整个块,一直到继承树。但它似乎只是覆盖了
child.tpl
中的“append”?对我来说,这也很奇怪。但似乎当你不使用append(可能是prepend)时除了直接父项之外,此块的全部内容都已添加。您可以尝试在不添加附加的情况下再添加一个
grandgranter.tpl
,然后再次添加附加到granter。然后,输出将是
base child grandgranter
,以便使用除直接父项之外的父项内容。您还可以使用
{$smarty.block.parent}
并最终有输出,例如
基本子孙孙孙孙
如果您希望也无法修改
基本.tpl
,它也是由第三方提供的…忘记提及,抱歉:(为什么这样做?我原以为这样做会重置整个块,一直到继承树的上方。但它似乎只是覆盖了
child.tpl
中的“append”?对我来说这也很奇怪。但似乎当你不使用append(可能是prepend)时)除了直接父项之外,此块的全部内容都已添加。您可以尝试在不添加附加的情况下再添加一个
grandgranter.tpl
,然后再次添加附加到granter。然后,输出将是
base child grandgranter
,以便使用除直接父项之外的父项内容。您还可以使用
{$smarty.block.parent}
并最终有输出,例如
基本子孙孙孙孙
如果您希望也无法修改
基本.tpl
,它也是由第三方提供的…忘记提及,抱歉:(为什么这样做?我原以为这样做会重置整个块,一直到继承树的上方。但它似乎只是覆盖了
child.tpl
中的“append”?对我来说这也很奇怪。但似乎当你不使用append(可能是prepend)时)除了直接父项之外,此块的全部内容都已添加。您可以尝试在不添加附加的情况下再添加一个
grandgranter.tpl
,然后再次添加附加到granter。然后,输出将是
base child grandgranter
,以便使用除直接父项之外的父项内容。您还可以使用
{$smarty.block.parent}
并最终有输出,例如
基本子孙孙孙孙
如果您想修改
基本.tpl
,也可以从