WEBサービス創造記

WEBサービスを作ったり保守したりしてる人のメモブログです。

Zend_LayoutとSmartyの連携

      2012/12/17

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 echo '<?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”と.表示されるはずです。

 - ZendFramework , , , , ,