{insert}
属性名 | 型? | 必須 | デフォルト | 概要 |
name | string? | Yes | n/a | 呼び出すinsert関数の名前(insert_name) |
assign | string? | No | n/a | 出力を格納するテンプレート変数名 |
script | string? | No | n/a | insert関数を呼び出す前にインクルードされるphpスクリプト名 |
[var ...] | [var type] | No | n/a | insert関数に渡す変数 |
insertは、テンプレートのキャッシュが有効であってもinsertタグによる出力はキャッシュされないという点を除けば、includeタグと似た動作をします。それらはテンプレートが呼び出される度に実行されます。
例えば、ページの上部にバナーを表示するテンプレートを持っているとします。
バナーにはHTML, images, flash等が混合して含まれます。したがってここに静的リンクを用いる事はできないので、バナーコンテンツをキャッシュの対象にしたくありません。そのためには、あらかじめ設定ファイルから取得した#banner_location_id#と#site_id#の値を渡し、バナーコンテンツを表示するためのinsertタグを呼び出す必要があります。
バナーにはHTML, images, flash等が混合して含まれます。したがってここに静的リンクを用いる事はできないので、バナーコンテンツをキャッシュの対象にしたくありません。そのためには、あらかじめ設定ファイルから取得した#banner_location_id#と#site_id#の値を渡し、バナーコンテンツを表示するためのinsertタグを呼び出す必要があります。
例 7-10. insert関数
{* バナーを取得する *}
{insert name="getBanner" lid=#banner_location_id# sid=#site_id#}
この例では、name属性に"getBanner"を指定し、パラメータに#banner_location_id#と#site_id#を渡しています。
Smartyはphpアプリケーション内のinsert_getBanner()関数を探し、第1パラメータとして#banner_location_id#と#site_id#の値を格納した連想配列を渡します。
アプリケー ションにおける全てのinsert関数の名前は、ネームスペースの衝突を避けるために"insert_"によって始まる必要があります。
insert_getBanner()関数は、渡された値によって何らかの処理を行い、結果を返すべきです。この結果はテンプレートのinsertタグに置換されて表示されます。
この例では、insert_getBanner(array("lid" => "12345","sid" => "67890")); という関数を呼び出して返された結果がinsertタグの位置に表示されます。
Smartyはphpアプリケーション内のinsert_getBanner()関数を探し、第1パラメータとして#banner_location_id#と#site_id#の値を格納した連想配列を渡します。
アプリケー ションにおける全てのinsert関数の名前は、ネームスペースの衝突を避けるために"insert_"によって始まる必要があります。
insert_getBanner()関数は、渡された値によって何らかの処理を行い、結果を返すべきです。この結果はテンプレートのinsertタグに置換されて表示されます。
この例では、insert_getBanner(array("lid" => "12345","sid" => "67890")); という関数を呼び出して返された結果がinsertタグの位置に表示されます。
assign属性が与えられたなら、insertタグの出力はブラウザに表示される代わりにテンプレート変数に割り当てられます。
(注: 出力をテンプレート変数に割り当てるのは、キャッシュが有効な状態ではあまり有益ではありません)
(注: 出力をテンプレート変数に割り当てるのは、キャッシュが有効な状態ではあまり有益ではありません)
script属性が与えられたなら、このphpスクリプトはinsert関数が実行される前に一度だけインクルードされます。これはinsert関数がまだ存在しないかもしれない場合や、insert関数の動作のためにphpスクリプトを最初にインクルードする必要がある場合に指定します。パスには、$trusted_dirの相対パス、又は絶対パスを指定します。セキュリティが有効の時は、phpスクリプトは$trusted_dir内に置かれる必要があります。
Smartyオブジェクトは第2パラメータとして渡されます。これにより、insert関数からSmartyオブジェクトの情報の参照や修正が可能です。
テクニカルノート: テンプレートには、キャッシュの対象外となる部分を持たせる事が可能です。キャッシュが有効の場合でも、insertタグによる出力はキャッシュされずにそのページが呼び出される度に動的に実行されます。この動作は、バナー・投票・天気予報・検索結果・ユーザーフィードバックエリア等に向いています。