SmartyをZendFrameworkのビューとして利用
この記事は、ZendFrameworkのビューとしてSmartyを採用し、さらにSmartyをZend_Layoutに対応させるためのものです。 ZendFrameworkのビューとしてSmartyを組み込むことに成功した以下の記事の続きから始めます。
SmartyをZendFrameworkのビューとして利用する
Zend_Layoutに対応させるための変更
1. Zend_Layoutの基底パスとするディレクトリの生成
Zend_Layoutの基底パスとするディレクトリは以下の赤字でハイライトしているディレクトリです。
|-- application | |-- layouts | | `-- scripts | | `-- layout.tpl | |-- modules | |-- default | |-- controllers | | `-- IndexController.php | `-- templates | `-- index | `-- index.tpl | |-- library | `-- Zend_View_Smarty.class.php |-- public `-- index.php
まだ生成していない場合は、これらを生成します。
2. Zend_View_SmartyクラスをZend_Layoutに対応させる
上記記事の、ZendFrameworkの公式マニュアルから転載したSmartyのラッパークラスのrenderメソッドに数行加えます。
以下に加える行だけ赤字で示します。
/**
* テンプレートを処理し、結果を出力します
*
* @param string $name 処理するテンプレート
* @return string 出力結果
*/
public function render($name)
{
$holder = new Zend_View_Helper_Placeholder();
$data = $holder->placeholder('Zend_Layout')->getArrayCopy();
$this->_smarty->assign('content', $data['content']);
return $this->_smarty->fetch($name);
}
3. アプリケーション設定ファイル application.ini の編集
application/configs/application.ini に下記の数行を加えます。
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"
resources.layout.viewSuffix = "tpl"
4. アクションコントローラ・ビュースクリプトの設置
デフォルトモジュールにアクションコントローラを、テンプレートディレクトリにビュースクリプトをそれぞれ設置してみて動作を確認します。
動作確認用のデフォルトモジュールのアクションコントローラは下記の通りです。
application/controllers/IndexController.php
<?php
require_once 'Zend/Controller/Action.php';
class IndexController extends Zend_Controller_Action{
public function indexAction() {
$this->view->assign('str', 'Smarty and Zend_Layout.');
}
}
続いて上記アクションコントローラのテンプレートです。
application/views/scripts/index/index.tpl
文字列 : {$str}
下記はレイアウトスクリプトになります。
application/layout/scripts/layout.tpl
<!DOCTYPE HTML>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>Smarty and ZendFramework test</title>
</head>
<body>
{$content|smarty:nodefaults}
</body>
</html>
これでブラウザから閲覧すると、"Smarty and Zend_Layout"と.表示されるはずです。
最終更新 2011-01-22

投稿者 : toshi | 投稿日時 :
投稿者 : toshi | 投稿日時 :
toshiさん >C:\site\zend\library\Zend\Application\Resource\Modules.php on line 69 このファイルの69行目前後の >$front = $bootstrap->getResource('FrontController'); ↑この部分でフロントコントローラが取得出来ていないようですね。 申し訳ありませんが、私の方では原因を特定することができません。 お見受けしたところWindows環境のようですね。こちらとは何かと状況が異なるのかもしれません。 お力になれずに申し訳ないです。投稿者 : 管理者 | 投稿日時 :