Smarty のテンプレートファイルのインクルード

Smarty のテンプレートファイルは、テンプレートファイルの中からテンプレートファイルを呼ぶことができます。
全てのページで同じ内容を表示する場合などは、共通テンプレートファイルを作成しておくと便利です。
キャッシュされたテンプレートの一部だけをキャッシュさせない場合は、insert 関数を使用します。insert タグによる出力は、テンプレートが呼び出される度に実行されます。

Smarty のインサート

insert 関数は、ちょっと戸惑います。インサートできるのは、テンプレートやテキストファイルではなく、「関数」です。例えば、属性 name="func" で指定される関数は、テンプレートを読み込む PHP スクリプト内では、insert_ をつけた insert_func() という関数が探され、関数から返された値を表示します。例えば、inc_func.php 内に insert 関数 が記載されている場合、insert 関数の 属性 script="inc_func.php" として、テンプレートファイル内から直接 inc_func.php をインクルードできます。属性 script でインクルードする場合は、呼ばれる関数名は、smarty_insert_ をつけ、PHP スクリプト内では smarty_insert_func() と、定義する必要があります。

インクルードとインサートのサンプル

このサンプルでは、footer.tpl を insert しています。insert は、比較的簡単ですので、眺めればすぐ理解できると思います。
insert 関数は、ins_smarty.php に定義しました。テンプレートファイル inc_smarty.tpl の 属性 script でインクルードしています。name="dsptime" で読み込む関数には、"a" と "b" の変数を渡しています。この変数は insert 関数には、 array("a"=>"あ","b"=>"い") という配列で渡されますので、注意が必要です。
使い方の理解に役立ててください。
サンプル: Smarty insert と include のサンプル
このサンプルのソースコードは、次の通りです。

inc_smarty.php のソースコード

<?php
// Smarty インクルードとインサートのサンプル
if (!@include_once('Smarty.class.php')){
    @include_once('Smarty/Smarty.class.php');
}
//通常は、require_once('Smarty.class.php');だけでOKですが、
// Smarty/Smarty.class.php のサーバーにも対応しました。
//require は、エラーで処理が中断するので include にしました。
$smarty = new Smarty;
$smarty->caching = 1;// キャッシュを有効にする
$smarty->cache_lifetime = 5;//キャッシュ時間は5秒

//include_once('ins_smarty.php');//insert 関数を記載したファイルを読み込む場合

$contents = array(
    'title' => 'cache_id',
    'file' => basename($_SERVER['PHP_SELF']),//自分のファイル名
    'time_cache' => date("Y/m/d H:i:s")
    );
$smarty->assign('contents',$contents);

$smarty->display('inc_smarty.tpl');
?> 

templates/inc_smarty.tpl のソースコード

{* Smarty インクルード・インサート サンプルのテンプレートファイル *}
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
<title>Smarty cache_id サンプル</title>
</head>
<body>
Smarty {$contents.title} のサンプルです。<br>
<br>
【キャッシュされた内容:キャッシュ有効時間内( 5 秒)は変化しない】<br>
{$contents.time_cache} <br>
<br>
【インサートされた内容】<br>
{insert name="dsptime" script="ins_smarty.php" a="あ" b="い"}<br>
<br>
<a href="{$contents.file}">更新</a> <= クリック<br>
<br>
{include file="footer.tpl"}
</body>

ins_smarty.php のソースコード

<?php
//Smartyの insert命令 (現在の日時を表示する)
/* 関数名の頭に
    PHP に記載するときは、 insert_
    tpl の insert 属性 script に記載するときは、smarty_insert_
  をつける
*/
function smarty_insert_dsptime($ary){
    $timenow=date("Y/m/d H:i:s");
    return ("$timenow は、現在の時間。tpl から渡された変数は「".$ary["a"] ."」と「".$ary["b"]."」");
}

?>

templates/footer.tpl のソースコード

{* Smarty footer テンプレートファイル *}
これは、footer.tpl からインクルードした文章です。

PR amazon

author

サイト管理人:パワーデジット
管理人への連絡フォーム

スポンサード リンク

このページは 

トップページ > PHP > Smarty > インクルード