スポンサーサイト

一定期間更新がないため広告を表示しています

| スポンサードリンク | | - | - | pookmark |
Entry: main  << >>
Smartyの使い方:Smarty関数
Smartyには大きく分けて二種類の関数が用意されている。それぞれ「組み込み関数」「カスタム関数」と呼ばれる。

組み込み関数はSmarty内部で動作し、変更や修正をすることはない。

カスタム関数は追加のプラグインで用意されていて、変更や修正だけでなく、新しい関数を作成することも出来る。

また、Smartyではifやforeachも関数(組み込み関数)として扱われる。

Smartyの関数は、組み込み、カスタム、合わせても30ほどしか用意されていない。以下に、よく使われるメジャーなものをいくつか。

◆インクルード{include}

外部ファイルをインクルードするための関数。多くのページで共有できる、例えばヘッダやフッタといったブロックを別なテンプレートとして作成し、これをインクルードして他のテンプレートで使用するといった使い方。

smarty_include.phpをsmarty_include.tpl、sample_header.tpl、sample_footer.tplという三つのテンプレートファイル(後者2ファイルをsmarty_include.tplが読み込む形)で作成する。

smarty_include.php
<?php
// Smartyクラスの呼び出し
require_once($_SERVER["DOCUMENT_ROOT"]."/Smarty/Smarty.class.php");

// Smartyインスタンスの生成
$smarty = new Smarty();

// 表示に使うテンプレートを指定
$smarty->display("smarty_include.tpl");
?>

smarty_include.tpl
<html>
<head>
<title>Smarty include sample</title>
</head>
<body>

{* ヘッダテンプレートを読み込む構文で
page_title変数をアサインしている *}
{include file="sample_header.tpl" page_title="このページのタイトル"}
<hr />

<ul>
<li>ここにコンテンツ</li>
<li>ここにコンテンツ</li>
</ul>

<hr />

{* フッタテンプレートを読み込む構文 *}
{include file="sample_footer.tpl"}
</body>
</html>

sample_header.tpl
<div>
<a href="#">トップページ</a>
<a href="#">サイトマップ</a>

{* smarty_include.tplでアサインした変数を表示 *}
<h1>{$page_title}</h1>
</div>

sample_footer.tpl
<div>
<a href="#">トップページ</a>
<ul>
<li><a href="#">利用規約</a>
<li><a href="#">プライバシーポリシー</a>
</ul>
</div>


◆循環出力{cycle}

cycle関数は指定した値を循環させて出力するための関数で、ループ内で使用する。例えば、table内の行を1行ずつ交互に背景色を変化させる等。
{cycle value= 循環出力したい値をカンマ区切りで指定 }

smarty_foreach.php
<?php
// Smartyクラスを呼び出す
require_once($_SERVER["DOCUMENT_ROOT"]."/Smarty/Smarty.class.php");

// 都道府県を配列にして格納
$pre[1]= "北海道";
$pre[2]= "青森県";
$pre[3]= "岩手県";
$pre[4]= "宮城県";
$pre[5]= "秋田県";
$pre[6]= "山形県";
$pre[13]= "東京都";
$pre[47]= "沖縄県";

// Smartyインスタンスを生成
$smarty = new Smarty();

// テンプレート変数を割り当て
$smarty->assign("pre", $pre);

// 表示するためのテンプレートを指定
$smarty->display("smarty_foreach2.tpl");
?>

smarty_foreach2.tpl
住所:
<select name="pre">
{* 都道府県の配列がなくなるまで繰り返す *}
{foreach from=$pre item=pre_name key=num}

{* keyをオプションのvalue値にして
配列の内容をオプションのテキストとして表示 *}
<option value="{$num}">{$pre_name}</option>

{* 都道府県の配列が空の場合の処理 *}
{foreachelse}

<option value="">選択できません</option>
{/foreach}
</select>

<h2>cycle関数の使用例</h2>
<table border="1">
<tr>
<th>都道府県名</th>
</tr>
{foreach from=$pre item=pre_name key=num}

{* 最初に指定した値から交互に繰り返す *}
<tr bgcolor="{cycle values="#eeeeee,#666666"}">
<td>{$pre_name}</td>
</tr>
{/foreach}
</table>

◆option要素の自動生成{html_options}

htmlのselectタグやoption要素を自動で生成する関数。選択式メニューを作成する場合等に非常に便利で有用な関数。
{html_options name=selectタグの名前 options=キーがoptionのvalue属性、要素がテキスト部分の配列 selected=デフォルトでチェック状態にするキー }

cycle関数で使用した「smarty_foreach.php」を流用して、テンプレートだけ新たに作成。

smarty_foreach3.tpl
<h2>option要素の自動生成例</h2>
自動生成1
<select name="pre">
    <option value="">選択してください</option>

    {* option要素のみを生成 *}
    {html_options options=$pre}
</select>

自動生成2
{* selectタグとoptionタグの両方を生成している *}
{html_options name=pref options=$pre selected=13}

◆html_radios関数{html_radios}

ラジオボタン<input type="radio">のタググループを生成する関数。

これもcycle関数で使用した「smarty_foreach.php」を流用して、テンプレートだけ以下のように作成。

smarty_foreach4.tpl
<h1>ラジオボタンの自動生成例</h1>
<h2>住所1(ラジオボタン)</h2>
<div>
    {* ラジオボタンを横並び一列に生成 *}
    {html_radios name="pre" options=$pre selected=13}
</div>

<h2>住所2(ラジオボタン)</h2>
<div>
    {* ラジオボタンをそれぞれ要素ごとに改行して生成 *}
    {html_radios name="pre" options=$pre selected=13 separator="<br />" }
</div>

◆チェックボックスの自動生成{html_checkboxes}

チェックボックス<input type="checkbox">のタググループを生成する関数。

ラジオボタンと違って複数の値を選択可能なので配列を指定する。改行タグなどを要素ごとの区切りに指定して縦並び表示することも可能。
{html_checkboxes name=checkboxタグの名前 options=キーがvalue属性、要素がテキスト部分の配列 selected=デフォでチェック状態にしておくキーを配列で指定 }

smarty_foreach5.php
<?php
// Smartyクラスを呼び出す
require_once($_SERVER["DOCUMENT_ROOT"]."/Smarty/Smarty.class.php");

// 都道府県を配列にして格納
$pre[1]= "北海道";
$pre[2]= "青森県";
$pre[3]= "岩手県";
$pre[4]= "宮城県";
$pre[5]= "秋田県";
$pre[6]= "山形県";
$pre[13]= "東京都";
$pre[47]= "沖縄県";

// Smartyインスタンスを生成
$smarty = new Smarty();

// デフォルトでチェック状態にしたいキーを配列で指定している
$smarty->assign("checked", array("6", "13"));

// テンプレート変数を割り当て
$smarty->assign("pre", $pre);

// 表示するためのテンプレートを指定
$smarty->display("smarty_foreach5.tpl");
?>

smarty_foreach5.tpl
<h1>チェックボックスの自動生成例</h1>
<h2>住所(チェックボックス)</h2>
{html_checkboxes name='pre' options=$pre selected=$checked separator='<br />'}

◆assignされている値を調べる{debug}

テンプレート内でどのような値がassignされているかを確かめることが出来る。

テンプレート内で{debug}と記述すると「Smarty Debug Console」が出現し、assignで割り当てられている変数を表示してくれる。

debug.tpl
{* デバッグコンソールの出力 *}
{debug}

住所:
<select name="pre">
    {* 都道府県の配列がなくなるまで繰り返す *}
    {foreach from=$pre item=pre_name key=num}

        {* keyをオプションのvalue値にして
配列の内容をオプションのテキストとして表示 *}
        <option value="{$num}">{$pre_name}</option>

    {* 都道府県の配列が空の場合の処理 *}
    {foreachelse}

        <option value="">選択できません</option>
    {/foreach}
</select>

◆Smarty構文の回避{literal}~{/literal}

Smartyのタグとして解釈される中括弧{}を、それと認識させずにエスケープする際に使う。(単純にデザインとして中括弧記号を使用したい場合)
{literal}
{ リテラル関数で括られた箇所はSmartyの構文としては認識されない }
{/literal}

◆修飾子

修飾子は変数を修飾して出力することが出来る。修飾子を適用するには、変数の後に「|」*パイプで修飾子の名前を指定する。また、修飾子は関数同様に引数を必要とする場合がある。引数は修飾子の後に「:」で区切って指定する。複数の修飾子を連結させて利用することも出来る。

*注意*
パイプやコロンの前後に余計な半角スペースを入れてはいけない。

smarty_modifire.php
<?php
// Smartyクラスの呼び出し
require_once($_SERVER["DOCUMENT_ROOT"]."/Smarty/Smarty.class.php");

// メッセージと日付のデータを変数に格納
$message = "hello smarty!";
$today = "2009-01-03 11:24:31";

// Smartyインスタンスを生成
$smarty = new Smarty();

// テンプレート変数の割り当て
$smarty->assign("message", $message);
$smarty->assign("today", $today);

// 表示テンプレートの指定
$smarty->display("smarty_modifire.tpl");
?>

smarty_modifire.tpl
{$message}<br />

{* 先頭文字を大文字に修飾して出力 *}
{$message|capitalize}<br />

{$today}<br />

{* 日付を日本語表記に修飾して出力 *}
{$today|date_format:"%Y年%m月 %d日"}<br />

◆予約変数{$smarty}

{$smarty}というテンプレート変数を利用することで、PHPスクリプト側でassignを使って割り当てを行わずとも、テンプレート側で呼び出すことが出来る。以下、いくつかの例。(スーパーグローバル変数を{$smarty}変数を使ってSmartyテンプレート側で呼び出しの例)

$_SERVER["HTTP_HOST"] -> {$smarty.server.HTTP_HOST}
$_GET["kye"] -> {$smarty.get.key}
$_POST["key"] -> {$smarty.post.key}
$_COOKIE["key"] -> {$smarty.cookie.key}
$_SESSION["key"] -> {$smarty.session.key}

他にも

{foreach}を使う場合、{$smarty.foreach}を使ってループの状態を取得することが出来る。ループの状態とは「初回ループ」「最終ループ」「ループ回数」など。

{$smarty.now}を使ってUNIXタイム(1970年1月1日から現在までの経過秒数)を取得することも出来る。

smarty_smarty.php
<?php
// Smartyクラスの呼び出し
require_once($_SERVER["DOCUMENT_ROOT"]."/Smarty/Smarty.class.php");

// Smartyインスタンスの生成
$smarty = new Smarty();

// このPHPスクリプト側では何もassignせずに
// テンプレートの指定だけをする
$smarty->display("smarty_smarty.tpl");
?>

smarty_smarty.tpl
実行時間は
{$smarty.now|date_format:'%Y-%m-%d %H:%M:%S'}
です。<br />

{foreach from=$smarty.server item=server name=server_roop}
    {$smarty.foreach.server_roop.iteration}回目、
    {if $smarty.foreach.server_roop.first}ループの最初の値は{$server}です。<br />{/if}

    {if $smarty.foreach.server_roop.last}<br />ループの最後の値は{$server}です。<br />{/if}
{/foreach}

$_SERVER変数は{$smarty.foreach.server_roop.total}個の要素を持っています。

| php | 16:37 | comments(1) | trackbacks(0) | pookmark |
スポンサーサイト
| スポンサードリンク | 16:37 | - | - | pookmark |
Comment
参考にさせて頂きます。
Posted by: |at: 2009/08/19 10:37 AM








Trackback

Calendar

      1
2345678
9101112131415
16171819202122
23242526272829
3031     
<< July 2017 >>

Recommend

Recommend

Recommend

Profile

Search

Entry

Comment

Archives

Category

Link

Feed

Others

無料ブログ作成サービス JUGEM

Mobile

qrcode

Sponsored Links