6

親ブロックのコンテンツを使用しながら、子テンプレートの親ブロックの順序を変更したいと考えています。

例:

親テンプレート:

{block outer}
    {block a} ... some long content ...{/block}
    {block b} ... some long content ...{/block}
    {block c} ... some long content ...{/block}
{/block}

子テンプレート:

{extends file="parent:parent.tpl"}
{block outer}
    {block c} reuse content of parent block "c" {/block}
    {block b} reuse content of parent block "b" {/block}
    {block a} reuse content of parent block "a" {/block}
{/block}

{$smarty.block.parent}ブロックa、b、c内で使用してみました:

{extends file="parent:parent.tpl"}
{block outer}
    {block c} {$smarty.block.parent} {/block}
    {block b} {$smarty.block.parent} {/block}
    {block a} {$smarty.block.parent} {/block}
{/block}

この場合{$smarty.block.parent}、親ブロック「outer」のコンテンツが含まれます。

子テンプレート内の内部ブロック a、b、および c のコンテンツをレンダリングすることは可能ですか?

シナリオ: ブロック a、b、c の内容は非常に複雑で、親から内容全体をコピーして貼り付けることは避けたいと考えています。

4

7 に答える 7

4

これは古い投稿ですが、これは将来にとって重要になる可能性があります。
この問題を解決するための私の最善の試みは次のとおりです。

{extends file="parent:parent.tpl"}

{block a}
    {capture a}
        {$smarty.block.parent}
    {/capture}
{/block}

{block c}
    {capture c}
        {$smarty.block.parent}
    {/capture}
{/block}

{block b}
    {$smarty.capture.c}
    {$smarty.block.parent}
    {$smarty.capture.a}
{/block}
于 2017-02-13T12:03:51.483 に答える
1

まだ最適ではない解決策がありますが、これは私がこれまでに見つけた最もクリーンなアプローチです。

親.tpl

{block name="outer"}
  {block name="a"} ... some long content ...{/block}
  {block name="b"} ... some long content ...{/block}
  {block name="c"} ... some long content ...{/block}
{/block}

aブロックの一番下に移動したいとしましょうouter。子テンプレートは次のようになります。

child.tpl

{extends file="parent:parent.tpl"}

{block name="a"}
  {capture name="a"}
    {$smarty.block.parent}
  {/capture}
{/block}

{block name="c" append}
  {$smarty.capture.a}
{/block}

この例では、ブロックaget が上書きされ、コンテンツがキャプチャされるため、 blockaに実際の出力はなく、a「削除」されます。最後に、キャプチャしたコンテンツを -block に追加しaますcanowの内容はouterブロックの一番下にあります。

于 2019-01-23T08:29:27.740 に答える
0

親ブロック名を追加しようとしましたか?

{extends file="parent:parent.tpl"}
{block outer}
    {block c} {$smarty.block.parent.c} {/block}
    {block b} {$smarty.block.parent.b} {/block}
    {block a} {$smarty.block.parent.a} {/block}
{/block}
于 2015-07-15T12:00:22.170 に答える
0

captureブロックの出力を試してから、それらの順序を変更できます。試してみてください。キャプチャのスマートなドキュメントは次のとおりです。

于 2015-10-23T00:51:09.543 に答える
0

かなり古いトピックですが、まったく同じ問題があり、まだ解決方法がわかりません。同じ結果で smarty.block.parent も使用しようとしました。

その問題を解決するパターンをすでに見つけましたか?

于 2016-07-13T13:20:38.160 に答える