Placeholder ヘルパー
Placeholder ビューヘルパーは、
ビュースクリプトとビューのインスタンスとの間でコンテンツを永続化させます。
それ以外の便利な機能としては次のようなものがあります。
たとえばコンテンツの集約、ビュースクリプトの内容をキャプチャして後で再利用、
コンテンツの前後へのテキストの追加 (そして集約したコンテンツ間のセパレータの追加)
などです。
プレースホルダの基本的な使用法
プレースホルダの基本的な使用法は、ビューのデータを永続化させることです。
Placeholder ヘルパーを起動する際にプレースホルダ名を指定し、
ヘルパーはプレースホルダコンテナオブジェクトを返します。
これを処理するなり、単純に echo するなりして使用できます。
placeholder('foo')->set("Some text for later") ?>
placeholder('foo');
// 出力は "Some text for later" となります
?>
]]>
プレースホルダによるコンテンツの集約
プレースホルダによるコンテンツの集約も、時には便利です。
たとえば、ビュースクリプトで変数の配列を保持し、
後で表示するためのメッセージを取得しておくと、
それをどのようにレンダリングするかを後で決めることができます。
Placeholder ビューヘルパーは、
ArrayObject を継承したコンテナを使用します。
これは、配列をより高機能に操作できるものです。
さらに、コンテナに格納された内容をフォーマットするために
さまざまなメソッドが用意されています。
setPrefix($prefix) は、
コンテンツの先頭に付加するテキストを設定します。
getPrefix() を使用すると、
その時点での設定内容を取得できます。
setPostfix($prefix) は、
コンテンツの末尾に付加するテキストを設定します。
getPostfix() を使用すると、
その時点での設定内容を取得できます。
setSeparator($prefix) は、
各コンテンツの間に挿入するテキストを設定します。
getSeparator() を使用すると、
その時点での設定内容を取得できます。
setIndent($prefix) は、
コンテンツの字下げ幅を設定します。
整数値を渡すと、渡された数のスペースを使用します。
文字列を渡すと、その文字列を使用します。
getIndent() を使用すると、
その時点での設定内容を取得できます。
placeholder('foo')->exchangeArray($this->data) ?>
]]>
placeholder('foo')->setPrefix("\n - ")
->setSeparator("
- \n")
->setIndent(4)
->setPostfix("
\n");
?>
placeholder('foo');
// 順序なしリストをきれいに字下げして出力します
?>
]]>
Placeholder コンテナオブジェクトは
ArrayObject を継承しているので、
単純にコンテナに格納するのではなく
そのコンテナの特定のキーにコンテンツを格納するのも簡単です。
キーへのアクセスは、オブジェクトのプロパティか配列のキーのいずれでも可能です。
placeholder('foo')->bar = $this->data ?>
placeholder('foo')->bar ?>
placeholder('foo');
echo $foo['bar'];
?>
]]>
プレースホルダによるコンテンツのキャプチャ
時には、プレースホルダの中身を
テンプレートに渡しやすいようビュースクリプトで保持することもあるでしょう。
Placeholder ビューヘルパーは、
任意のコンテンツをキャプチャして後でレンダリングできます。
そのために使用する API は次のようなものです。
captureStart($type, $key) は、
コンテンツのキャプチャを開始します。
$type は、
Placeholder の定数 APPEND あるいは
SET のいずれかとなります。APPEND
を指定すると、キャプチャされたコンテンツが
プレースホルダ内の現在のコンテンツの末尾に追加されます。
SET の場合は、
キャプチャされたコンテンツをそれ単体でプレースホルダの値として使用します
(それまでに登録されていたコンテンツを上書きします)。
デフォルトの $type は
APPEND です。
$key には、コンテンツのキャプチャ先として
プレースホルダのコンテナの特定のキーを指定できます。
captureStart() は、
captureEnd() がコールされるまで他のキャプチャをロックします。
同一のプレースホルダコンテナでキャプチャをネストすることはできません。
しようとすると例外が発生します。
captureEnd() は、
コンテンツのキャプチャを終了して、
captureStart()
がコールされたときの指定に応じてそれをコンテナに格納します。
placeholder('foo')->captureStart();
foreach ($this->data as $datum): ?>
placeholder('foo')->captureEnd() ?>
placeholder('foo') ?>
]]>
placeholder('foo')->captureStart('SET', 'data');
foreach ($this->data as $datum): ?>
placeholder('foo')->captureEnd() ?>
placeholder('foo')->data ?>
]]>
プレースホルダの具象実装
Zend Framework には、"具体的な"
プレースホルダの実装が標準でいくつか含まれています。
これらはみな一般的に用いられるもので、doctype
やページのタイトル、<head> の要素群などを扱います。
どのプレースホルダについても、
引数なしでコールするとその要素自身を返します。
各要素のドキュメントは、以下のリンク先で個別に扱います。
Doctype
HeadLink
HeadMeta
HeadScript
HeadStyle
HeadTitle
InlineScript