ezPublish のエクステンションを作ってみる

ezPublish というエンタープライズ向けの CMS がある。
CMS としてめちゃくちゃ高機能で、ezComponent というライブラリをベースに作られている。
大抵の事は出来るんだろうけど、作り込みが発生する場合があり、そういう場合はエクステンションという形で実装する形になる。


ezPublish 自体は ezComponents というライブラリで構築されている。
エクステンションの作り方もチュートリアルがあるので、その通りにすれば一通り作れる。

で、試しに ezPublish の環境は 4.30ベータを使用して作ってみた。
基本的にはチュートリアルにそって行う。

エクステンションの設置場所

まずエクステンションは ezpublish/extensions の中にディレクトリを作り、その中に関係するファイルを入れて行く。
エクステンションの名前はとりあえず、ezend とする。
今回 ezpublish/extensions/ezend というディレクトリを作成し、その中に作ったのは以下のディレクトリ。

  • design/
  • modules/
  • settings/

ディレクトリに入れるのは以下の通り。
settings の中に設定ファイルを入れる。
modules の中に PHP ファイルを入れる。
design の中にテンプレートや css, JavaScript を入れる。


チュートリアルにそって、まず settings の中に ini ファイルを作成する。

ini ファイル

まずはモジュールの ini ファイルを作成する

$ cd /path/to/ezpublish
$ mkdir -p extension/ezend/settings/
$ vim module.ini.append.php
<?php /* #?ini charset="utf-8"? 
[ModuleSettings] 
ExtensionRepositories[]=ezend
*/ ?>

エクステンション名を設定する。
どうやらこのファイルがモジュールの設定ファイルとなるよう。


続いて ezPublish 自体にエクステンションを有効にするように設定する。

$ cd /path/to/ezpublish
$ settings/override/site.ini.append.php

似たようなファイルが沢山あるけど、グローバルな設定ファイルに以下を追記する。

<?php /* #?ini charset="utf-8"?
[ExtensionSettings]
ActiveExtensions[]=ezend
*/ ?>

ActiveExtensions[] には他にも似たようなものがあるかもしれないので、あったら追記する。
とりあえずグローバルな設定ファイルに書くと、サイト全てから使用できるようになる。


続いて、エクステンション自体に権限を持つ設定を書く

$ cd /path/to/ezpublish
$ vim extension/ezend/settings/site.ini.append.php
<?php /* #?ini charset="utf-8"? 
[RoleSettings] 
PolicyOmitList[]=hoge/list
PolicyOmitList[]=hoge/search 
*/ ?>

ここにエクステンションのパスを記述する。
今回の場合、http://ezpublish/hoge/search というページで使用できるエクステンションになる。
たとえば、http://ezpublish/hoge/listhttp://ezpublish/hoge/create などとしたかったら、適宜 PolicyOmitList[] に追加していく。


最後にテンプレートとなるファイルを使用できるように設定ファイルを作る。

$ cd /path/to/ezpublish
$ vim extension/ezend/settings/design.ini.append.php
<?php /* #?ini charset="utf-8"?
[ExtensionSettings]
DesignExtensions[]=ezend
*/ ?>

エクステンションにテンプレートを使用できるように設定する。


設定ファイルはほぼおまじないみたいな感じで作れば良いと思う。

モジュールファイル

続いて、エクステンションのブートストラップにあたる部分を作成する。

$ cd /path/to/ezpublish
$ vim extension/ezend/modules/hoge/module.php
<?php
// モジュール名
$Module   = array('name' => 'Hoge');
// ビューとして使用するファイルの設定
$ViewList = array();
$ViewList['list'] = array(
    'script' => 'list.php',
    // ここで指定するとデフォルトのパラメータとして list.php に引き渡せる事ができる
//    'functions'        => array('read'),
//    'params'           => array('param1', 'param2'),
//    'unordered_params' => array('param3' => '3Param', 'param4' => '4Param')
);
// 何も設定しない事も勿論可能
$ViewList['search'] = array(
    'script' => 'search.php',
);
$FunctionList = array();
$FunctionList['read'] = array();

とりあえず、最低限の設定のみ。


続いて、各ビューを作る。
今回はテキストボックスを一つ追加して出すようにしてみる。
とりあえず、入力した内容を画面に表示するだけ。

$ cd /path/to/ezpublish
$ vim extension/ezend/modules/hoge/search.php
<?php
// テンプレートエンジンの読み込み
include_once 'kernel/common/template.php';
$tpl = templateInit();

// Http リクエストのコンテナ
$http = eZHTTPTool::instance();

// input name が keywords の値を取得する
$keywords = ($http->hasVariable('keywords') === true)
          ? $http->variable('keywords')
          : '';

// テンプレートにアサインする
$tpl->setVariable('key', $keywords);

// テンプレートファイルを読み込みレンダリングする
// とりあえずメインのコンテンツとして表示する
$Result ['content'] = $tpl->fetch('design:hoge/search.tpl');

テンプレートファイル

画面に表示するテンプレートを作成する。
その前に、design の中は割とファイルが多い。
まず、desigin の中に standard というディレクトリを作成する。
その中に以下のディレクトリを作成する。

  • images/
  • javascript/
  • override/
  • stylesheets/
  • templates/

images や javascript はおおよそ見当はつくと思うが、override は既存のテンプレートを上書きする際に使用するよう。
今回は templates の中に hoge というディレクトリを作成し、その中にビューに対応するファイルとして search.tpl を作成する。

$ cd /path/to/ezpublish
$ vim extension/ezend/design/standard/templates/hoge/search.tpl
<form action="search" method="post">
  <input type="text" name="keywords" id="keywords" value="{$var['keywords']}" />
  <input type="submit" name="search" value="検索" />
</form>

これで、hoge/search にアクセスすると、テキストボックスと、Submit ボタンが表示されているはず。
値を入力して、Submit ボタンをクリックすると、hoge/search にアクセスし、入力した内容がテキストボックスに入る。


とりあえず、これでエクステンションの基本部分が出来たと思う。
流れとしては、設定ファイルを書く → モジュールの設定を書く → ビューを作成する → テンプレートを作成するという流れ。

あとは作っていくものに肉付けをしていけば、良いと思う。
続く...。