[Zend Framework] Zend_View: ビューヘルパーを利用して、 を効率的に管理する
前回に続いて、具体的なプレースホルダの実装とされている、doctype やページのタイトルなど、<head> の要素群を利用します。
Contents
どこで指定するのか整理する
公式の情報が分かりづらいので、他の情報を眺めつつ確認しました。
- テンプレートにビューヘルパータグを書く。
- 下記のいずれかで指定する。
- テンプレート
- コントローラ
- Bootstrap.php
- 自作ビューヘルパーを作ることも可能。
Zend_View – 独自のビューヘルパーを作成する | deadwood
参考サイト
レイアウトとBootstrap.phpで指定する
下記のような使われ方を想定し、<head> を置き換えていきます。
- 複数のレイアウトで、共通の<head>情報を利用する。
- title, keyword, description を生成する。
まず、layout.phtml をビューヘルパーのタグに置き換え、Bootstrap.php で指定することにします。
layout.phtml
<?= $this->doctype() . PHP_EOL; ?>
<!--[if lt IE 7]> <html class="no-js lt-ie9 lt-ie8 lt-ie7"> <![endif]-->
<!--[if IE 7]> <html class="no-js lt-ie9 lt-ie8"> <![endif]-->
<!--[if IE 8]> <html class="no-js lt-ie9"> <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js"> <!--<![endif]-->
<head>
<?= $this->headMeta() . PHP_EOL; ?>
<?= $this->headTitle() . PHP_EOL; ?>
<?= $this->headLink() . PHP_EOL; ?>
<?= $this->headStyle() . PHP_EOL; ?>
<?= $this->headScript() . PHP_EOL; ?>
</head>
Bootstrap.php
<?php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
protected function _initView()
{
// Initialize view
$view = new Zend_View();
$view->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;
}
}
ビューヘルパーのタグについては、以下の一覧に詳しく紹介されており、参考になりました。
Bootstrap.php 内で使われている Zend_Controller_Action_HelperBroker については、まだ理解し切れていない感じです。
title, keyword, description をコントローラで生成する
SEO に関連する title, keyword, description タグを、ページ(コントローラ)に応じて生成します。
keyword, description はコントローラで指定するため、下記を Bootstrap.php から削除しておきます。
->appendName('description', 'page description')
->appendName('keywords', 'key, word')
title, keyword, description の値をコントローラから渡します。
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 などを調整すると、望み通りの書式が得られます。
参考サイト
なんとかそれっぽくなったのではないでしょうか。