ezPublish と Zend Framework を組み合わせてみる

ezPublish のエクステンションを作れば作り込みが出来るのが分かった。
データベースのアクセスも普通に出来るようだが、やっぱり使いなれたフレームワークを使いたい。


id:sotarok さんが Ethna と WordPress を組み合わせたり、@shin1x1 さんが CakePHPWordPress を(資料を探したけどアップされないのかな)組み合わせたように。


作りとしては
M = Zend Framework
VC = ezPublish
という具合にして、モデル(サービス層)からのレスポンスを ezPublish のテンプレートにアサインするという考え方。

$ cd /path/to/ezpublish
$ vim extension/modules/hoge/module.php
<?php
$rootPath = '/path/to/zendframework/root';

$libPath  = $rootPath . DIRECTORY_SEPARATOR . 'library';
$appPath  = $rootPath . DIRECTORY_SEPARATOR . 'app';
set_include_path(get_include_path()
    . PATH_SEPARATOR . $libPath
    . PATH_SEPARATOR . $appPath
);

require_once 'Gene.php';
$options = array(
    'env'       => 'production',
    'resources' => array('Cache', 'Config', 'Path', 'Db')
);
Gene::app($appPath, $options);
$Module   = array('name' => 'Hoge');
$ViewList = array();
$ViewList['search'] = array(
    'script' => 'search.php',
);  
$FunctionList = array();
$FunctionList['read'] = array();

include_once 'kernel/common/template.php';

まずはブートストラップとなる部分を作る。
Zend Framework を設置しているプロジェクトのディレクトリを include_path に追加して、ブートストラップを読み込む。
ここで自分のラッパーのブートストラップを読んでいるが、勿論普通に Zend_Application を呼べば標準が使える。
ただし、Zend_Application をそのまま呼んでも、ビューなどの不要なリソースを呼ぶので、使用するものだけを縛った方が良い。


続いてビュー。

$ vim extension/modules/hoge/search.php
<?php
$keywords = ($http->hasVariable('keywords') === true)
          ? $http->variable('keywords')
          : null;
$service = Gene::load('Service_Search');
$response = $service->search($keywords):

$tpl = templateInit();
$tpl->setVariable('var', $response);
$Result ['content'] = $tpl->fetch('design:hoge/search.tpl');

こんな感じでロジックだけ、Zend Framework 側に投げて、返ってきた値をテンプレートにアサインするだけ。


続く…。