Zend_Controller標準のビューはZend_Viewですが、機能は貧弱です。
というかサンプルのテンプレートを見ればわかりますが、ほとんど素のPHPです。
ヘルパーはかなり用意されていますが、使い方を見てもどうも全然便利そうに見えない不思議。
というわけでSmartyに差し替えましょう。
幸い公式自らSmarty用ラッパを公開してくれています。
まずはSmartyの準備。
applicationディレクトリ内にSmarty用ディレクトリを作成。
application/
├templates/
└smarty/
├libs/
├cache/
├configs/
└templates_c/
templatesフォルダにテンプレートを置き、それ以外の本体やキャッシュなんかはsmartyフォルダに突っ込むことにします。
Smarty公式サイトからダウンロードして解凍、中身のlibsフォルダをapplication/smarty/libsに設置。
次にZend_View_Smartyクラスをさくっとコピーして、Zend/View/Smarty.phpに設置します。
これはZend_ViewからSmartyを呼び出せるように連携させるクラスです。
ダミーのindex.htmlを設置。
application/templates/index/index.html
html/index.php
Fatal error: Cannot access protected property Zend_View_Smarty::$_smarty in C:\hoge\fuga\html\index.php on line 21
あら?
具体的に死んでる行はここ。
setViewBasePathSpec($view->_smarty->template_dir)
なんでかというとZend_View_Smartyでprotected $_smarty;ってやってるせい。
http://helog.jp/php/zend-framework/984/とかPHP5.3.0なのにどうして動いてるんだろう?ふしぎ。
今回はテンプレートディレクトリをSMARTY_TEMPLATE_DIRで定義してるので素直にsetViewBasePathSpec(SMARTY_TEMPLATE_DIR)と書き直して実行。
見事にSmartyの適用に成功しました。
setViewScriptPathSpecとかsetViewScriptPathNoControllerSpecとかはリクエストパラメータの処理方法みたいです。
よくわからないのでとりあえずそのままで。
setViewSuffixはテンプレートの拡張子です。
デフォルトは'phtml'とかいう変な拡張子になっているので'html'に変更します。
以上で、Zend_ControllerでSmartyを利用することができるようになりました。
というかサンプルのテンプレートを見ればわかりますが、ほとんど素のPHPです。
ヘルパーはかなり用意されていますが、使い方を見てもどうも全然便利そうに見えない不思議。
というわけでSmartyに差し替えましょう。
幸い公式自らSmarty用ラッパを公開してくれています。
まずはSmartyの準備。
applicationディレクトリ内にSmarty用ディレクトリを作成。
application/
├templates/
└smarty/
├libs/
├cache/
├configs/
└templates_c/
templatesフォルダにテンプレートを置き、それ以外の本体やキャッシュなんかはsmartyフォルダに突っ込むことにします。
Smarty公式サイトからダウンロードして解凍、中身のlibsフォルダをapplication/smarty/libsに設置。
次にZend_View_Smartyクラスをさくっとコピーして、Zend/View/Smarty.phpに設置します。
これはZend_ViewからSmartyを呼び出せるように連携させるクラスです。
ダミーのindex.htmlを設置。
application/templates/index/index.html
<html><body>Hello, World!{$smarty.now}</body></html>最後にZend_Viewを呼び出すかわりにZend_View_Smartyを呼び出すように設定変更します。
html/index.php
<?php //define define('APP_DIR', dirname(__FILE__).'/../application/'); define('SMARTY_DIR', APP_DIR.'smarty/libs/'); define('SMARTY_TEMPLATE_DIR', APP_DIR.'templates/'); define('SMARTY_COMPLIE_DIR', APP_DIR.'smarty/templates_c/'); define('SMARTY_CACHE_DIR', APP_DIR.'smarty/cache/'); define('SMARTY_CONFIG_DIR', APP_DIR.'smarty/config/'); //require require_once('Zend/Controller/Front.php'); require_once('Zend/View/Smarty.php'); require_once(APP_DIR.'smarty/libs/Smarty.class.php'); //Zend_View_Smarty $view = new Zend_View_Smarty(SMARTY_TEMPLATE_DIR, array('compile_dir'=>SMARTY_COMPLIE_DIR, 'cache_dir'=>SMARTY_CACHE_DIR, 'config_dir'=>SMARTY_CONFIG_DIR)); //Zend_Controller_Action_Helper_ViewRenderer $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper('ViewRenderer'); $viewRenderer->setView($view) ->setViewBasePathSpec($view->_smarty->template_dir) ->setViewScriptPathSpec(':controller/:action.:suffix') ->setViewScriptPathNoControllerSpec(':action.:suffix') ->setViewSuffix('html'); //実行 Zend_Controller_Front::run(APP_DIR.'controllers');実行。
Fatal error: Cannot access protected property Zend_View_Smarty::$_smarty in C:\hoge\fuga\html\index.php on line 21
あら?
具体的に死んでる行はここ。
setViewBasePathSpec($view->_smarty->template_dir)
なんでかというとZend_View_Smartyでprotected $_smarty;ってやってるせい。
http://helog.jp/php/zend-framework/984/とかPHP5.3.0なのにどうして動いてるんだろう?ふしぎ。
今回はテンプレートディレクトリをSMARTY_TEMPLATE_DIRで定義してるので素直にsetViewBasePathSpec(SMARTY_TEMPLATE_DIR)と書き直して実行。
見事にSmartyの適用に成功しました。
setViewScriptPathSpecとかsetViewScriptPathNoControllerSpecとかはリクエストパラメータの処理方法みたいです。
よくわからないのでとりあえずそのままで。
setViewSuffixはテンプレートの拡張子です。
デフォルトは'phtml'とかいう変な拡張子になっているので'html'に変更します。
以上で、Zend_ControllerでSmartyを利用することができるようになりました。
PR
トラックバック
トラックバックURL: