扩展嵌套块,保持 children

Extending nested blocks, keep children

扩展模板时,是否可以在不影响其嵌套 children 的情况下更改块 parent?我试过 {$smarty.block.parent},但它显示外部 parent 的内容,而不是块本身。 Smarty 版本 3.1.12

parent.tpl

{block name="block_parent"}
    <div class="parent">
        <h1>Parent Title</h1>

        {block name="block_child"}
            <div class="child">Child</div>
        {/block}
    </div>
{/block}

child.tpl

{extends file="parent.tpl"}
{block name="block_parent"}
    <div class="changed--parent">
        <h1>Parent Title changed</h1>

        {block name="block_child"}
            {* something like this for example *}
            {$smarty.block.self} 
        {/block}
    </div>
{/block}

期望的输出:

<div class="changed--parent">
    <h1>Parent Title changed</h1>
    <div class="child">Child</div>
</div>

作为对@sofl 的回复:

使用时的输出{$smarty.block.parent}

<div class="changed--parent">
    <h1>Parent Title changed</h1>
    <div class="parent">
        <h1>Parent Title</h1> <!-- this is not desired to happen -->
        <div class="child">Child</div>
    </div>
</div>

使用时的输出{$smarty.block.child}

<div class="changed--parent">
    <h1>Parent Title changed</h1>
    <!-- child div missing -->
</div>

遗憾的是没有解决方案,或者目前smarty无法做到这一点。但是有一个解决方法,至少在我的情况下有效:

{block name="parentBlockName"}
    {capture name="parentBlockName"}
        {$smarty.block.parent}
    {/capture}
    {$smarty.capture.parentBlockName|replace:'thing_to_change':'how_it_should_be'}
{/block}

这将替换您父项中的内容,同时保留子项。尝试尽可能具体,以确保没有任何错误被替换。我已使用此解决方法在父元素中更改 类。