扩展嵌套块,保持 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}
这将替换您父项中的内容,同时保留子项。尝试尽可能具体,以确保没有任何错误被替换。我已使用此解决方法在父元素中更改 类。
扩展模板时,是否可以在不影响其嵌套 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}
这将替换您父项中的内容,同时保留子项。尝试尽可能具体,以确保没有任何错误被替换。我已使用此解决方法在父元素中更改 类。