Zend Framework入門(9):
Zend Frameworkにおけるビューの処理 - Zend_View(前編) -
Zend Frameworkによる実践的なPHPアプリケーション開発 9
ダウンロード サンプルファイル (8.7 KB)
具体的なプレースホルダ
この他に、いくつかのプレースホルダのサブクラスが提供されています。これらは情報を保持するだけではなく、出力する際に保持している情報に特別な加工を行います。
| プレースホルダ名 | 説明 |
| Doctype | ドキュメントの種類('XHTML1_STRICT'等)を保持するためのプレースホルダ。 |
| HeadTitle | ドキュメントのタイトルを保持するためのプレースホルダ。 |
| HeadLink | ドキュメントのヘッダーのLINK要素を保持するためのプレースホルダ。 |
| HeadMeta | ドキュメントのヘッダーのMETA要素を保持するためのプレースホルダ。 |
| HeadScript | ドキュメントのヘッダーに設置したスクリプトを保持するためのプレースホルダ。 |
| HeadStyle | ドキュメントのヘッダーのSTYLE要素を保持するためのプレースホルダ。 |
| InlineScript | ドキュメントの中に埋め込まれたスクリプトを保持するためのプレースホルダ。 |
| JSON | JSON形式で出力したい情報を保持するためのプレースホルダ。 |
| Translate | 言語間の単語の対応を保持するためのプレースホルダ。 |
これらについての例を見ていきましょう。サンプルではコントローラスクリプトで設定したプレースホルダをスクリプトで使っています。
まずヘッダまわりのものを見てみましょう。ここではheadTitleプレースホルダ、HeadScriptプレースホルダ、InlineScriptプレースホルダを利用しています。
IndexController.php内: class IndexController extends Zend_Controller_Action { public function init() { ... //タイトルの先頭に加える(1) $this->view->headTitle('Zend_View: ', 'PREPEND'); ... //スクリプトの設定(2) $this->view->HeadScript()->appendFile('/js/currenttime.js'); $this->view->InlineScript() ->appendScript('setInterval("updateTime()", 1000);'); index.phtml 内: <?php $this->placeHolder('title')->set('簡単なメモ');//(3) echo $this->Doctype('XHTML1_STRICT'); //(4) //echo $this->Doctype('HTML4_LOOSE'); ?> <html> <head> <?php echo $this->headTitle($this->placeHolder('title')); ?> <?php echo $this->HeadScript(); //(5) ?> </head> <body> <h1><?php echo $this->placeHolder('title') ?></h1> ... <h3>上の内容をHTMLにしたもの</h3> <?php echo $this->preHelper($this->placeHolder('memosList')) ?> <?php echo $this->InlineScript(); //(6) ?>
HeadTitle
HeadTitleはhtmlヘッダの中にあるtitleタグを出力するためのプレースホルダです。HeadTitleではタイトルの前と後に表示する文字列を追加することができます。記法はview->headTitle(加える内容, 加える位置)で、加える位置を省略可能するとタイトルの後に追加されます。例の(1)のように、'PREPEND'というキーワードを利用すると、タイトルの先頭に追加できます。図の(3)ではタイトルの内容を加えた上で表示を行っています。
HeadScript、InlineScript
HeadScript、InlineScriptは(JavaScriptなどの)スクリプトを格納するためのプレースホルダです。HeadScriptはHTMLのヘッダ内で宣言するスクリプト、InlineScriptはHTMLの内部で宣言するためのプレースホルダです。図の(2)にあるとおり、スクリプトをファイルから読み込むように設定する(appendFileメソッド)こともできますし、直接スクリプトの内容を文字列で指定して追加する(appendScriptメソッド)こともできます。
どのように指定したスクリプトであっても図の(5)や(6)のように、通常のプレースホルダと同じように出力できます。
Doctype
Doctypeはドキュメントのタイプを宣言するためのスクリプトです。図の(4)のように、スクリプトの先頭で呼び出して利用するのが普通です。Doctypeには次の種類を指定できます。
XHTML1_STRICT, XHTML1_TRANSITIONAL, XHTML1_FRAMESET, HTML4_STRICT, HTML4_LOOSE, HTML4_FRAMESET
実は、Doctypeの内容により他のビューヘルパの挙動も変化します。1番分かりやすいのはDoctypeに指定されているのがXHTMLなのかHTMLなのかによる違いで、formTextなどの出力が変化します。また、自分の書いたスクリプトでXHTMLかどうか調べるにはDoctypeのisXhtmlメソッドを利用します。
class Zend_View_Helper_BrTag { ... public function brTag() { $xhtml = "<br />\n"; if (($this->view instanceof Zend_View_Abstract) && !$this->view->doctype()->isXhtml()) { //XHTMLかどうか調べている ... } }
translate
translateプレースホルダは、Zend_Translateを利用して、言語設定に応じて出力を変化させるためのプレースホルダです。利用方法はいくつかありますが、あらかじめZend_Translateのインスタンスを登録しておく使い方が奨励されています。
IndexController.php内:
//言葉の置き換え
$adapter = new Zend_Translate('array',
array('submit' => '送信',
'reset' => '全て消す'),
'ja');
Zend_Registry::set('Zend_Translate', $adapter);
inputForm.phtml内:
echo $this->formSubmit('', $this->translate('submit'));
このように、translateプレースホルダを経由すると、あらかじめZend_Translateに登録されてる単語が置換されます。
JSON
JSON形式でデータをやりとりする場合には、通常のデータのやりとりと、いくつか異なる点があります。
- 通常の描画を行ってはならない
- HTTPのヘッダで指定するドキュメントタイプが異なる
jsonプレースホルダを利用すれば上の処理を自動的に行ってくれます。
<?php //json_encode は UTF-8 しか受け付けないので変換する $dateTimeMemosUTF8 = array(); foreach ($this->dateTimeMemos as $dateTimeMemo) { foreach ($dateTimeMemo as $dateTime => $memo) { $key = mb_convert_encoding($dateTime, "UTF-8", "SJIS"); $value = mb_convert_encoding($memo, "UTF-8", "SJIS"); $dateTimeMemosUTF8[$key] = $value; } } //あとは JSONプレースホルダに渡すだけ echo $this->json($dateTimeMemosUTF8);
なお、JSON形式に実際に変換しているのはPHPのjson_encode関数です。この関数はUTF-8でエンコードしたデータのみを受けつけるので、上の例ではmb_convert_encoding関数を利用して変換を行っています。
今回のまとめ
今回は標準的なビューヘルパについて説明しました。次回は引き続き、ビューヘルパーを自作する方法、および、Zend FrameworkとSmartyを連携させる方法についての説明を行います。
この記事は参考になりましたか?
既に会員の方はを行ってください。
- この記事の著者
-
山田 祥寛(ヤマダ ヨシヒロ)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
WINGSプロジェクト 風田 伸之(カゼタ ノブユキ)
<WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書、記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
