{block}

{block} は、テンプレートの継承用に、 テンプレートソースのある範囲に名前を定義します。詳細は テンプレートの継承 の節を参照ください。

{block} で囲んだ子テンプレートの範囲は、 親テンプレートの対応する部分を置き換えます。

オプションで、子テンプレートと親テンプレートの {block} 範囲をマージすることもできます。親の {block} のコンテンツを子の {block} の前あるいは後に加えるには、 子の {block} を定義する際にオプションのフラグ append あるいは prepend を指定します。 {$smarty.block.parent} を使うと、親テンプレートの {block} の中身を子テンプレートの {block} 内の好きな場所に挿入することができます。 また {$smarty.block.child} は、子テンプレートの {block} の中身を親テンプレートの {block} 内の好きな場所に挿入することができます。

{blocks} はネストすることができます。

属性

属性名 必須 デフォルト 概要
name string Yes n/a テンプレートソースブロックの名前

オプションのフラグ (子テンプレートのみ)

名前 概要
append {block} のコンテンツを親テンプレートの {block} に追記する
prepend {block} のコンテンツを親テンプレートの {block} の前に置く
hide 同じ名前の子ブロックが存在しないときに、ブロックのコンテンツを無視する
nocache {block} のコンテンツのキャッシュを無効にする

例 7.15. シンプルな {block} の例

parent.tpl


<html>
  <head>
    <title>{block name="title"}Default Title{/block}</title>
    <title>{block "title"}Default Title{/block}</title>  {* 短縮形 *}
  </head>
</html>

  

child.tpl


{extends file="parent.tpl"} 
{block name="title"}
Page Title
{/block}

  

結果は、このようになります。


<html>
  <head>
    <title>Page Title</title>
  </head>
</html>

例 7.16. {block} を前に置く例

parent.tpl


<html>
  <head>
    <title>{block name="title"}Title - {/block}</title>
  </head>
</html>

  

child.tpl


{extends file="parent.tpl"} 
{block name="title" prepend}
Page Title
{/block}

  

結果は、このようになります。


<html>
  <head>
    <title>Title - Page Title</title>
  </head>
</html>

例 7.17. {block} を後に置く例

parent.tpl


<html>
  <head>
    <title>{block name="title"} is my title{/block}</title>
  </head>
</html>

  

child.tpl


{extends file="parent.tpl"} 
{block name="title" append}
Page Title
{/block}

  

結果は、このようになります。


<html>
  <head>
    <title>Page title is my titel</title>
  </head>
</html>

例 7.18. {$smarty.block.child} の例

parent.tpl


<html>
  <head>
    <title>{block name="title"}The {$smarty.block.child} was inserted here{/block}</title>
  </head>
</html>

  

child.tpl


{extends file="parent.tpl"} 
{block name="title"}
Child Title
{/block}

  

結果は、このようになります。


<html>
  <head>
    <title>The Child Title was inserted here</title>
  </head>
</html>

例 7.19. {$smarty.block.parent} の例

parent.tpl


<html>
  <head>
    <title>{block name="title"}Parent Title{/block}</title>
  </head>
</html>

  

child.tpl


{extends file="parent.tpl"} 
{block name="title"}
You will see now - {$smarty.block.parent} - here
{/block}

  

結果は、このようになります。


<html>
  <head>
    <title>You will see now - Parent Title - here</title>
  </head>
</html>

テンプレートの継承$smarty.block.parent$smarty.block.child および {extends} も参照ください。