[Zend Framework] Zend_View: ビューヘルパーを利用して、 を効率的に管理する
前回に続いて、具体的なプレースホルダの実装とされている、doctype やページのタイトルなど、<head> の要素群を利用します。
[markdown]
## どこで指定するのか整理する
公式の情報が分かりづらいので、他の情報を眺めつつ確認しました。
* テンプレートにビューヘルパータグを書く。
* 下記のいずれかで指定する。
* テンプレート
* コントローラ
* Bootstrap.php
* 自作ビューヘルパーを作ることも可能。
[Zend_View – 独自のビューヘルパーを作成する | deadwood](https://www.d-wood.com/blog/2013/07/02_4201.html)
参考サイト
> * ビューヘルパー – Zend_View – Zend Framework
> * Standard Placeholders – Getting Started Zend_View Placeholders – Zend Framework
> * ビュー(テンプレート)の基本 – [Zend Framework/PHP] ぺんたん info
## レイアウトとBootstrap.phpで指定する
下記のような使われ方を想定し、<head> を置き換えていきます。
* 複数のレイアウトで、共通の<head>情報を利用する。
* title, keyword, description を生成する。
まず、layout.phtml をビューヘルパーのタグに置き換え、Bootstrap.php で指定することにします。
### layout.phtml
“`php:application/layouts/scripts/layout.phtml
= $this->doctype() . PHP_EOL; ?>
= $this->headMeta() . PHP_EOL; ?>
= $this->headTitle() . PHP_EOL; ?>
= $this->headLink() . PHP_EOL; ?>
= $this->headStyle() . PHP_EOL; ?>
= $this->headScript() . PHP_EOL; ?>
“`
### Bootstrap.php
“`php:application/Bootstrap.php
doctype(‘HTML5’);
$view->headMeta()
->setIndent(8)
->setCharset(‘UTF-8’)
->appendHttpEquiv(‘X-UA-Compatible’, ‘IE=edge,chrome=1’)
->appendName(‘description’, ‘page description’)
->appendName(‘keywords’, ‘key, word’)
->appendName(‘viewport’, ‘width=device-width’);
$view->headTitle()
->setIndent(8)
->setSeparator(‘ :: ‘)
->append(‘Site name’);
$view->headLink()
->setIndent(8)
->headLink(
array(‘rel’ => ‘favicon’,
‘href’ => $view->baseUrl(‘favicon.ico’),
‘type’ => ‘image/x-icon’),
‘PREPEND’)
->appendStylesheet(
array(‘rel’ => ‘stylesheet’,
‘href’ => $view->baseUrl(‘css/normalize.min.css’),
‘type’ => ‘text/css’))
->appendStylesheet(
array(‘rel’ => ‘stylesheet’,
‘href’ => $view->baseUrl(‘css/main.css’),
‘type’ => ‘text/css’));
$view->headScript()
->setIndent(8)
->appendFile(
$view->baseUrl(‘js/vendor/modernizr-2.6.2-respond-1.1.0.min.js’));
// Add it to the ViewRenderer
$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper(
‘ViewRenderer’);
$viewRenderer->setView($view);
// Return it, so that it can be stored by the bootstrap
return $view;
}
}
“`
ビューヘルパーのタグについては、以下の一覧に詳しく紹介されており、参考になりました。
> * Zend Framework – View Helper – Placeholder
Bootstrap.php 内で使われている Zend_Controller_Action_HelperBroker については、まだ理解し切れていない感じです。
> * Zend_Application クイックスタート – Zend_Application – Zend Framework
> * アクションヘルパー – Zend_Controller – Zend Framework
> * Set favicon for Zend Framework | Exoool.com
> * メモ 【Zendframework】ディレクトリ構成とクイックスタート
## title, keyword, description をコントローラで生成する
SEO に関連する title, keyword, description タグを、ページ(コントローラ)に応じて生成します。
keyword, description はコントローラで指定するため、下記を Bootstrap.php から削除しておきます。
“`php:application/Bootstrap.php
->appendName(‘description’, ‘page description’)
->appendName(‘keywords’, ‘key, word’)
“`
title, keyword, description の値をコントローラから渡します。
“`php:application/controllers/IndexController.php
class IndexController extends Zend_Controller_Action
{
public function init()
{
/* Initialize action controller here */
$this->headSeo();
}
public function headSeo()
{
$view = new Zend_View();
// コントローラとアクションの名前を取得する
$request = Zend_Controller_Front::getInstance()->getRequest();
// title 部に設定する
$view->headTitle()
->prepend($request->getActionName() . ‘ / ‘ . $request->getControllerName());
// description, keywords を取得する
$keyword = array(‘framework’, ‘PHP’, ‘書き換わった’);
$view->placeholder(‘keyword’)->exchangeArray($keyword);
$metaKeywords = $view->placeholder(‘keyword’)->setSeparator(‘, ‘);
$metaDescription = ‘書き換わった’;
// meta 部に設定する
$view->headMeta()
->appendName(‘description’, $metaDescription)
->appendName(‘keywords’, $metaKeywords);
}
“`
公式マニュアルの HeadTitle ヘルパー のサンプルを動くように変更してみました。
prepend, append, setPostfix などを調整すると、望み通りの書式が得られます。
参考サイト
> * headTitle() set your page title dynamically – Tutorial-Portal.com
> * WebTecNote – [ZF] Zend_View HeadTitle method tips
なんとかそれっぽくなったのではないでしょうか。
[/markdown]