いろいろ準備中

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

7月 11th, 2008 Posted in Zend Framework

前回で独自のビューヘルパークラスを作る方法がわかったので、今回は実際に作ることにします。

作るヘルパーの内容は、自分も普段よく使っているもので、出力しようとする文字列の長さが指定したものより長い場合に、指定した長さで文字列を切り取って表示する処理を行うものです。

たとえば、「あいうえおかきくけこさしすせそ」という入力があり、最大の文字列長を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などで出力せず、切り取った文字をエスケープして返しています。これで前回書いたビューヘルパーを作るためのルールすべてをみたしたことになります。

ビューヘルパーの第1引数には出力する文字を、第2引数には切り取る文字列の長さを、第3引数にはもし文字列を切り取った場合に、最後に付加する省略をあらわす文字列を指定します。第3引数は省略できます。

あとはこのファイルがあるディレクトリをスクリプトパスに追加するだけです。たとえば、コントローラ内で

$this->view->setHelperPath('/path/to/helpers', 'Wads_View_Helper');

のようにセットできます。

以上で最初に書いたように、ビュースクリプト内で

< ?php echo $this->strcut($this->text, 10) ?>

のように使用できるようになりました。

コメントを投稿する