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/list や http://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 にアクセスし、入力した内容がテキストボックスに入る。
とりあえず、これでエクステンションの基本部分が出来たと思う。
流れとしては、設定ファイルを書く → モジュールの設定を書く → ビューを作成する → テンプレートを作成するという流れ。
あとは作っていくものに肉付けをしていけば、良いと思う。
続く...。