昨日書いたdate_format_postedでシャレオツタイム!に続いてsmartyプラグインの話.

確認画面とかで投稿する内容を表示する時,


<p>以下のコメントを削除してもよろしいですか?</p>
<dl>
<dt>name</dt>
<dd>{$app.comment.name}</dd>
<dt>title</dt>
<dd>{$app.comment.title}</dd>
<dt>timestamp</dt>
<dd>{$app.comment.timestamp}</dd>
<dt>comment</dt>
<dd>{$app.comment.comment}</dd>
<dt>ip</dt>
<dd>{$app.comment.ip}</dd>
<dt>ua</dt>
<dd>{$app.comment.ua}</dd>
<dt>email</dt>
<dd>{$app.comment.email}</dd>
<dt>url</dt>
<dd>{$app.comment.url}</dd>
</dl>

とかがんばって書いちゃったり,多少シンプルな感じで


<p>以下のコメントを削除してもよろしいですか?</p>
<dl>
{foreach from=$app.trackback key=key item=item}
<dt>{$key}</dt>
<dd>{$item}</dd>
{/foreach}
</dl>

とか書くじゃないですか.これをsmartyプラグインにしておいたのがこれ


function smarty_function_assoc2dl($params, $smarty)
{
    if (!isset($params['value']) && !is_array($params['value'])) {
        print('error:invalid parameter');
    }

    $data = $params['value'];

    foreach ($data as $key => $value) {
       $html .= "<dt>{$key}</dt><dd>{$value}</dd>n";
    }

    print("<dl>n{$html}</dl>n");
}

で,これをSmartyに登録しておけば,Ethnaとかで


$this->af->setApp("trackback", $trackback);

ってやっておいて,テンプレートの上で


{assoc2dl value=$app.trackback}

と書くだけで表示できるようになります.

レイアウトとか分岐とか複雑な事はできないのでかなりの割り切りが必要になるけど,使いどころが出てくるととても簡単にかけるので便利です.

カテゴリー:

One thought on “単純作業はsmartyプラグインにやらせる

  1. MugeSo より:

    dl要素にクラスやIDを指定できると実用性が増すかと思います。

    $class = empty($params[‘class’]) ? ” : ‘ class=”‘ . $params[‘class’] . ‘”‘;
    $id = empty($params[‘id’]) ? ” : ‘ id=”‘ . $params[‘id’] . ‘”‘;
    print(“

    n{$html}

    n”);

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

ねこ認証:9つのパネルの中からねこを3匹選んでください