{include_php}
属性名 | 型? | 必須 | デフォルト | 概要 |
file | string? | Yes | n/a | インクルードするphpファイル名 |
once | boolean? | No | true | 同じphpファイルが複数回インクルードされた場合は、一度だけインクルードするかどうか |
assign | string? | No | n/a | include_phpの出力を格納する変数名 |
テクニカルノート: include_php は Smarty でほとんど推奨されていません。カスタムテンプレート関数を通じて 同等の機能が実現できます。include_php を使用する唯一の理由は、php 関数を プラグインディレクトリまたはアプリケーションコードから退避させる必要が本当にある場合です。
詳細は、コンポーネントされたテンプレート?の例を参照して下さい。
詳細は、コンポーネントされたテンプレート?の例を参照して下さい。
テンプレートにphpスクリプトをインクルードします。
セキュリティが有効の時には、phpスクリプトは$trusted_dirで指定されたディレクトリに位置する必要があります。
file属性にはインクルードするphpファイルのパス($trusted_dirからの相対パス、又は絶対パス)を必ず指定して下さい。
セキュリティが有効の時には、phpスクリプトは$trusted_dirで指定されたディレクトリに位置する必要があります。
file属性にはインクルードするphpファイルのパス($trusted_dirからの相対パス、又は絶対パス)を必ず指定して下さい。
include_phpは、phpスクリプトをテンプレートファイルから分離して管理するのに最適です。
例えば、サイトナビゲーションを示すテンプレートがある時に、データベースから動的に取得する事が可能です。
それには、データベースにあるコンテンツを別のディレクトリに取り込むphpスクリプトを用意し、テンプレートの初めにこれをインクルードします。
事前にアプリケーションによってデータベースの情報が割り当てられていれば、何の問題も無くこのテンプレートをインクルードする事ができます。
例えば、サイトナビゲーションを示すテンプレートがある時に、データベースから動的に取得する事が可能です。
それには、データベースにあるコンテンツを別のディレクトリに取り込むphpスクリプトを用意し、テンプレートの初めにこれをインクルードします。
事前にアプリケーションによってデータベースの情報が割り当てられていれば、何の問題も無くこのテンプレートをインクルードする事ができます。
デフォルトでは、phpファイルはテンプレート内で複数回呼ばれても一度しかインクルードしません。
once属性によって毎回インクルードするべきかどうかを指定できます。この属性をfalseに設定すると、テンプレート内でインクルードされる毎にphpスクリプトをインクルードします。
once属性によって毎回インクルードするべきかどうかを指定できます。この属性をfalseに設定すると、テンプレート内でインクルードされる毎にphpスクリプトをインクルードします。
include_phpの出力をブラウザ表示する代わりに変数に格納するには、 assign属性を指定します。
smartyオブジェクトは、インクルードしたphpスクリプトの範囲内で$this?として有効です。
例 7-9. include_php 関数
load_nav.php
<?php// ナビゲーションが持つセクションをMySQLから読み込み、 // テンプレート変数に割り当てる require_once("MySQL.class.php"); $sql = new MySQL; $sql->query("select * from site_nav_sections order by name",SQL_ALL); $this->assign('sections',$sql->record);?>
index.tpl
{* $trusted_dirからの相対パスか、絶対パス *}
{include_php file="/path/to/load_nav.php"}
{foreach item="curr_section" from=$sections}<a href="{$curr_section.url}">{$curr_section.name}</a><br>{/foreach}