{include_php}

テクニカルノート

{include_php} は Smarty ではほとんど推奨されていません。 カスタムテンプレート関数を使用すれば、同等の機能を実現できます。 {include_php} を使用する理由がもしあるとすれば、 plugins/ ディレクトリやアプリケーションのコードから PHP 関数を完全に隔離したい場合などです。 詳細は コンポーネント化したテンプレートの例 を参照してください。

属性名 必須 デフォルト 概要
file string Yes n/a インクルードする PHP ファイル名
once boolean No TRUE 同じ PHP ファイルが複数回インクルードされた場合に、一度だけインクルードするかどうか
assign string No n/a include_php の出力を格納する変数名

{include_php} タグを使用して、PHP スクリプトをテンプレートにインクルードします。 $security が有効な場合は、PHP スクリプトは $trusted_dir で指定されたディレクトリに存在する必要があります。{include_php} タグには file 属性が必須で、 ここにはインクルードする PHP ファイルへのパスを指定します。 このパスは $trusted_dir からの相対パスか絶対パスのいずれかとなります。

デフォルトでは、PHPファイルはテンプレート内で複数回呼ばれても一度しかインクルードしません。 once 属性によって毎回インクルードするべきかどうかを指定できます。 この属性を FALSE に設定すると、テンプレート内でインクルードの指示がある毎に PHP スクリプトをインクルードします。

オプションで assign 属性を渡すこともできます。 これは、{include_php} の出力をブラウザに表示させる代わりに 変数に格納したい場合に、その変数名を指定します。

Smarty オブジェクトは、インクルードした PHP スクリプト内で $this として使用可能です。

Example 7.21. {include_php} 関数

load_nav.php ファイル


<?php

// mysql データベースから変数の値を読み込み、それをテンプレートに割り当てます
require_once('database.class.php');
$db = new Db();
$db->query('select url, name from navigation order by name');
$this->assign('navigation', $db->getRows());

?>

  

テンプレート


{* 絶対パス、あるいは $trusted_dir からの相対パスか *}
{include_php file='/path/to/load_nav.php'}

{foreach item='nav' from=$navigation}
  <a href="{$nav.url}">{$nav.name}</a><br />
{/foreach}

  

{include}$security$trusted_dir{php}{capture}テンプレートリソース および コンポーネント化したテンプレート も参照してください。