{include}
タグを使用して、
現在のテンプレートに他のテンプレートをインクルードします。
現在のテンプレートにて利用可能なあらゆる変数は、
インクルードされたテンプレートでも同じく利用可能です。
{include}
タグには、テンプレートリソースのパスを含んだfile
属性を必ず指定する必要があります。{include}
の出力をブラウザに表示する代わりに変数に格納したい場合は、 オプションのassign
属性にその変数名を定義します。{assign}
と同等です。インクルードされたテンプレートに変数を渡すには、 attributes を使用します。インクルードされたテンプレートに明示的に渡された変数は、 インクルードされたファイルのスコープでのみ有効となります。 そのテンプレートに同じ名前の変数が存在する場合は、 渡された変数がそれをオーバーライドします。
インクルードしたテンプレート側からは、インクルード元のテンプレートにあるすべての変数を使えます。 しかし、インクルードされたテンプレート内での変数の変更や新たな変数の作成はローカルスコープになり、
{include}
ステートメントの後のインクルード元テンプレート側からは見えません。 このデフォルトの挙動を、インクルードされたテンプレート内で代入されたすべての変数について変更することができます。 その方法は、{include}
ステートメントの scope 属性を使うか、 あるいは{assign}
ステートメントを使うかのいずれかです。 後者の方法は、インクルードしたテンプレートからインクルード元のテンプレートに 値を返す場合に便利です。$template_dir
ディレクトリ外にあるファイルを{include}
するには、 テンプレートリソース を指定します。
属性名 | 型 | 必須 | デフォルト | 概要 |
---|---|---|---|---|
file | string | Yes | n/a | インクルードするテンプレートファイル名 |
assign | string | No | n/a | インクルードしたコンテンツの出力を格納する変数名 |
cache_lifetime | integer | No | n/a | このサブテンプレートのキャッシュについて独自に設定するキャッシュの有効期限 |
compile_id | string/integer | No | n/a | このサブ連プレートのコンパイルに使う独自の compile_id |
cache_id | string/integer | No | n/a | このサブテンプレートのキャッシュに使う独自の cache_id |
scope | string | No | n/a | サブテンプレート内で代入されたすべての変数のスコープ。'parent'、'root' あるいは 'global' |
[var ...] | [var type] | No | n/a | ローカルからテンプレートに渡す変数 |
オプションのフラグ
名前 | 概要 |
---|---|
nocache | このサブテンプレートのキャッシュを無効にする |
caching | このサブテンプレートのキャッシュを有効にする |
inline | サブテンプレートをコンパイルしたコードを呼び出し元テンプレートのコンパイル済みコードとマージする |
Example 7.44. シンプルな {include} の例
<html> <head> <title>{$title}</title> </head> <body> {include file='page_header.tpl'} {* ここにテンプレートの本体を記述します。変数 $tpl_name はたとえば 'contact.tpl' などに置き換えられます。 *} {include file="$tpl_name.tpl"} {* file 属性の短縮形 *} {include 'page_footer.tpl'} </body> </html>
Example 7.45. {include} に変数を渡す
{include 'links.tpl' title='Newest links' links=$link_array} {* ここにテンプレートの本体を記述します *} {include 'footer.tpl' foo='bar'}
このテンプレートは、以下のような links.tpl
をインクルードします。
<div id="box"> <h3>{$title}{/h3> <ul> {foreach from=$links item=l} .. 何かを行います ... </foreach} </ul> </div>
Example 7.46. {include} での parent スコープの使用
インクルードされたテンプレート内で代入した変数は、インクルードした側のテンプレートからも見えます。
{include 'sub_template.tpl' scope=parent} ... {* sub_template で代入した変数を表示します *} {$foo}<br> {$bar}<br> ...
上のテンプレートでインクルードしている sub_template.tpl
は、次のようになります。
... {assign var=foo value='something'} {assign var=bar value='value'} ...
Example 7.47. キャッシュを無効にした {include}
インクルードされたテンプレートはキャッシュされません。
{include 'sub_template.tpl' nocache} ...
Example 7.48. 個別のキャッシュ有効期限を設定した {include}
この例では、インクルードされたテンプレートのキャッシュ有効期限を独自に 500 秒に設定します。
{include 'sub_template.tpl' cache_lifteime=500} ...
Example 7.49. 強制的にキャッシュする {include}
この例では、グローバルなキャッシュ設定にかかわらず、インクルードされたテンプレートはキャッシュされます。
{include 'sub_template.tpl' caching} ...
Example 7.50. {include} と変数への割り当て
この例は、nav.tpl
の内容を変数 $navbar
に割り当て、
ページの最初と最後に出力させるものです。
<body> {include 'nav.tpl' assign=navbar} {include 'header.tpl' title='Smarty is cool'} {$navbar} {* テンプレートの本体をここへ記述します *} {$navbar} {include 'footer.tpl'} </body>
Example 7.51. さまざまな {include} リソースの例
{* ファイルの絶対パス *} {include file='/usr/local/include/templates/header.tpl'} {* ファイルの絶対パス(結果は上と同じ) *} {include file='file:/usr/local/include/templates/header.tpl'} {* Windows環境のファイルの絶対パス(接頭辞の"file:"は必須) *} {include file='file:C:/www/pub/templates/header.tpl'} {* "db"と名付けられたテンプレートリソースからインクルード *} {include file='db:header.tpl'} {* 変数名に格納された名前のテンプレートをインクルード - 例 $module = 'contacts' *} {include file="$module.tpl"} {* この例は、シングルクォートでは変数が展開されないため、動作しません *} {include file='$module.tpl'} {* 複数の可変テンプレートをインクルード - 例 amber/links.view.tpl *} {include file="$style_dir/$module.$view.tpl"}
{include_php}
、
{insert}
、
{php}
、
テンプレートリソース および
コンポーネント化したテンプレート
も参照してください。