プレースホルダ
プレースホルダは、文書などを保持するための仕組みです。例えば、処理の早い段階で作成した文書を、処理の後の方で出力したい場合などに利用できます。この他にも、出力されるべき内容を「吸い取る」ために利用することもできます。
単純なプレースホルダ
プレースホルダの最も簡単な使い方としては、単純に情報を保存するものがあります(単純に連想配列のような使い方をしている、と思っていただいても良いかもしれません)。引数に与えられた名前に、setで情報を保存します。また、情報を取り出したい場合にはメソッドなしでplaceholderを呼び出します。
例えば、titleという名前に情報を保存したい場合には次のようになります。
//プレースホルダへの値の保存 $this->placeHolder('title')->set('簡単なメモ'); ... //プレースホルダへ保存された値の利用 <?php echo $this->headTitle($this->placeHolder('title')); ?>
コンテンツの捕獲
描画されるべきコンテンツをそのまま出力するのではなく、一旦保存しておきたいと思う場合があるかもしれません。その場合にはプレースホルダのcaptureStartを利用できます。
これは、placeHolderのcaptureStartメソッドを呼び出した時点からcaptureEndメソッドを呼び出した時点までの間に描画された内容を、プレースホルダに「吸い取る」方法です。例えばサンプルでは、アクションコントローラ内でプレースホルダのmemoListという名前に内容を吸い出しています。
... class IndexController extends Zend_Controller_Action { ... public function indexAction() { //プレースホルダーで捕獲する $this->view->placeHolder('memosList')->captureStart(); echo $this->view->htmlList($this->memos, true, null, true); $this->view->placeHolder('memosList')->captureEnd(); ...
捕獲されたコンテンツは通常のプレースホルダと同様に、メソッドを特に指定しないでプレースホルダを呼び出すことで取得できます。
... <h2>今までのメモ</h2> <?php echo $this->placeHolder('memosList') ?> <h3>上の内容をHTMLにしたもの</h3> <?php echo $this->preHelper($this->placeHolder('memosList')) ?> ...
これはサンプルの下部にある今までのメモを出力する部分で利用されています。なお、ここで使用しているpreHelperは自作のビューヘルパーで、受け取った文字列をpreタグで囲います。自作のビューヘルパーについては次回説明する予定です。
