テンプレート内での分割処理

2008/04/21 | Smarty

テンプレートエンジンSmartyで、割り当てられた変数(配列)を分割するための関数を作ったのでメモ。

例えばリンク集(バナーで表示)を作るって表形式で表示したい場合、表の列数によってテンプレート内で「行の開始かどうか(<tr>タグを出力するかどうか)」「行の終了かどうか(</tr>タグを出力するかどうか)」といったロジックを書くことになる。テンプレート内でのロジックは減らしたいので、上記のように書くのはあまり好きではない。

PHPには便利な関数array_chunkというのがある。配列を指定した個数の配列に分割してくれるというものだ。さらに便利な関数でarray_padというのがある。指定個数に満たない配列を、指定した値で満たしてくれる関数だ。

一番簡単なのはコントローラ(もしくはメイン処理)で、上記の処理を入れることだが、表示を変更したい(例えば表の列数を増減したい)場合は、コントローラのプログラムを変更しなければならず、本来表示側だけで対応したいのに、本末転倒となるわけだ。

んで、Smartyの関数を作って、テンプレート内で分割できるようにした。関数はfunction.array_split.phpという名前で、以下の内容で、しかるべき場所に保存。

<?php
  function smarty_function_array_split($params, &$smarty)
  {
    $paramKey  =$params[‘var’];
    $paramValue  =$params[‘value’];
    if(is_null($paramValue)){
      $paramValue=array();
    }
    $paramSplit  =$params[‘split’];
    
    if($paramValue){
      $paramSplitted=array_chunk($paramValue,$paramSplit,true);
      $lastValue=array_pop($paramSplitted);
      $lastValue=array_pad($lastValue,$paramSplit,NULL);
      array_push($paramSplitted,$lastValue);
    }else{
      $paramSplitted=array();
    }
    $smarty->assign($paramKey,$paramSplitted);
  }

もうちょっとエラー処理を入れなくてはいけないけれど・・・。
もっと早くに関数作ればよかったな。

コメントを残す


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net