Smartyでパンくずリストを作る

Twitter ツイート Hatena Bookmark ブックマーク

Smartyを使っていて、パンくずリストを作ろうと思ったのですが、毎回毎回テンプレートに処理を書くのはめんどくさいです。
そこで、Smartyのテンプレート関数を自分で作ってみました。

とりあえず、ソース
function.pageNavi.php

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
function smarty_function_pageNavi($params="", &$smarty)
{
    if(is_array($params['navi'])){
        foreach($params['navi'] as $Key => $value){
            if(!empty($value['url'])){
                $link[] = "<a href=\"".$value['url']."\">".$value['name']."</a&>";
            }else{
                $link[] = $value['name'];
            }
        }
        $ret = implode(" > ",$link);
    }
    return $ret;
}```
で、使うにはまずテンプレートを呼び出す前に、こんな感じで値をセットしておきます。
test.php
1
<?php
    $link = array(
        0 =>array('name' =>'TOP','url' => '/index.html'),
        1 => array('name' => 'info','url' => '/info/index.php'),
    );

    $smarty->assign('pageNavi',$link);
?>

それからテンプレート側ではこんな感じに書いておきます。

1
2
3
4
{pageNavi navi=$pageNavi}```

そうするパンくずが出来上がります  
test.tpl

info```

見たいな感じに。
ちなみに、配列でurlの値を空文字した場合はパンくずを表示した際にaタグが使用されず、nameの値のみ表示されます。

とまあ、ここまでは結構普通な感じになってしまいます。
なんか個人的に毎回毎回test.phpみたいに配列でパンくずを設定するのがなんかいやだったので、若干工夫してみました。
Smartyくらすをextendsしてパンくず追加メソッドを付け加えてみました。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
<?php
 require_once(SMARTY);
    class SmartyFront extends Smarty
    {
       function putNavi($link_name='',$link_url='')
       {
            if(empty($link_name)){
                return false;
            }
            $navi = isset($this->_tpl_vars['pageNavi']) ? $this->_tpl_vars['pageNavi'] : array() ;
            $navi_new['name'] = $link_name;
            $navi_new['url'] = $link_url;
            array_push($navi,$navi_new);
            $this->assign("pageNavi",$navi);
            return true;
       }
}

こんな感じであらかじめ用意しておくとパンくずを作成するときに以下のように指定できます。
test_a.php

1
2
putNavi('TOP','/index.php');
$smarty->putNavi('info','/info/index.php');

こっちのほうがすっきりしたコードが書けるような気もしますが、なんかオーバーヘッドとか多くなるような気も・・・まあ大して変わらないかw
良かったら使ってみてください。

comments powered by Disqus
Built with Hugo
テーマ StackJimmy によって設計されています。