Wadslog

[Zend Framework] [php]独自のZend_Viewのビューヘルパーの作り方②

Jul 11, 2008

前回で独自のビューヘルパークラスを作る方法がわかったので、今回は実際に作ることにします。 作るヘルパーの内容は、自分も普段よく使っているもので、出力しようとする文字列の長さが指定したものより長い場合に、指定した長さで文字列を切り取って表示する処理を行うものです。 たとえば、「あいうえおかきくけこさしすせそ」という入力があり、最大の文字列長を10文字と指定した場合には、「あいうえおかきくけこ…」として出力されるような処理です。名前はstrcutとしておきます。 ヘルパーはビュースクリプトで以下のように使います。``` < ?php echo $this->strcut($this->text, 10) ?>

早速作ってみます。 strcut.phpというファイルに以下のようにクラスを定義します。 < ?php class Wads_View_Helper_Strcut { public function strcut($str, $len, $omit='…') { if(!is_string($str)) { $str = (string)$str; }

$str = htmlspecialchars($str, ENT\_QUOTES);

if((int)$len > 0 && mb\_strlen($str) > (int)$len) {
  $str = mb\_substr($str, 0, $len-1);
  if(is\_string($omit) && $omit != "") {
    $str .= htmlspecialchars((string)$omit, ENT\_QUOTES);
  }
}
    
return $str;

} }

クラス名のプレフィックスとしてWads\_View\_Helperをつけました。ヘルパーと同じ名前のpublic関数を定義して、この関数内ではechoなどで出力せず、切り取った文字をエスケープして返しています。これで[前回書いたビューヘルパーを作るためのルール](http://wadslab.net/2008/07/zend_view/)すべてをみたしたことになります。 ビューヘルパーの第1引数には出力する文字を、第2引数には切り取る文字列の長さを、第3引数にはもし文字列を切り取った場合に、最後に付加する省略をあらわす文字列を指定します。第3引数は省略できます。 あとはこのファイルがあるディレクトリをスクリプトパスに追加するだけです。たとえば、コントローラ内で $this->view->setHelperPath('/path/to/helpers', ‘Wads_View_Helper’);

のようにセットできます。 以上で最初に書いたように、ビュースクリプト内で < ?php echo $this->strcut($this->text, 10) ?>

comments powered by Disqus