例として、画面に「Hello, Kvasir/Sora!」というブロック(POP)を表示するためのプラグインを作成する手順を説明します。
プラグインを作成するにはEclipseを用います。EclipseにはあらかじめKvasir/Soraのプラグイン開発支援プラグインである「+PLUST」をインストールしておいて下さい。また、m2eclipse-lightプラグインとSysdeo Tomcatプラグインがあるとより快適にプラグインの開発が可能になります。以下の説明では、これらのプラグインが導入済みであるとして説明します。
準備
まず新規にプラグインプロジェクトを作成します。新規プロジェクトウィザードを表示し、「Kvasir/Sora」カテゴリから「プラグイン・プロジェクト」を選択して下さい。
「Next」をクリックするとプロジェクト名の入力画面が表示されます。「Project name」欄にプラグインプロジェクトの名前を入力して下さい。名前は何でもかまいませんが、既存のプラグインと重複しないようにドメイン名を付与した形で指定することをお勧めします。ここでは「com.example.hello」とします。
「Next」をクリックするとプラグイン情報の入力画面が表示されますので、適宜情報を入力して下さい。基本的にはデフォルトのままで問題ありません。
「Next」をクリックするとプロジェクトテンプレートの選択画面が表示されますので、テンプレートを選択して下さい。今回は画面にPOPを表示したいので「[CMS]POPプラグイン」を選択して下さい。
「Finish」をクリックするとプロジェクトが作成されます。
開発
Kvasir/Soraでは、org.seasar.kvasir.cms.pop.Popインタフェースの実装クラスを作成することで任意のブロックを画面に埋め込むことができます。POPプラグインプロジェクトでは、このための実装が既に用意されています。今回の例の場合はcom.example.hello.pop.HelloPopがそれです。
HelloPopクラスはPopインタフェースを実装したorg.seasar.kvasir.cms.pop.pop.GenericPopのサブクラスになっています。GenericPopは、POPを簡単に作るためのベースとして使えるクラスです。
HelloPopは、ZPTテンプレートであるsrc/main/plugin/pops/helloPop/body.htmlをレンダリングすることで画面を作成します。今回はHelloPopクラスの中で「Hello, Kvasir/Sora!」という文字列を準備し、それをZPTテンプレートのレンダリング時の変数スコープに登録しておき、ZPTテンプレート側では変数スコープから文字列を取り出して描画するようにしてみます。
HelloPopのソースコードは以下のようになります:
package com.example.hello.hello.pop; import java.util.Map; import org.seasar.kvasir.cms.pop.PopContext; import org.seasar.kvasir.cms.pop.RenderedPop; import org.seasar.kvasir.cms.pop.pop.GenericPop; import com.example.hello.HelloPlugin; public class HelloPop extends GenericPop { public static final String ID = HelloPlugin.ID + ".helloPop"; @Override protected RenderedPop render(PopContext context, String[] args, Map<String, Object> popScope) { popScope.put("message", "Hello, Kvasir/Sora!"); return super.render(context, args, popScope); } }
helloPop/body.htmlは以下のようになります:
<p tal:content="message">Hello Plugin POP BODY</p>
「popScope」に登録した変数は、ZPTテンプレートから参照することができます。これでHelloPopクラスで設定したmessage文字列が<p>タグのボディとして埋め込まれます。
なお、POP用のZPTテンプレート中で使える組み込み変数としては以下のものがあります:
- containerPage
- POPを持つページを表すorg.seasar.kvasir.page.Pageオブジェクトです。
- locale
- 現在のロケールを表すjava.util.Localeオブジェクトです。
- request
- 現在のリクエストに対応するHttpServletRequestオブジェクトです。
- response
- 現在のリクエストに対応するHttpServletResponseオブジェクトです。
- session
- 現在のセッションを表すHttpSessionオブジェクトです。(セッションが存在しない場合はnullになります)
- application
- ServletContextオブジェクトです。
- pageRequest
- 現在のリクエストに対応するorg.seasar.kvasir.cms.PageRequestオブジェクトです。
- my
- 現在のディスパッチを表すorg.seasar.kvasir.cms.PageDispatchオブジェクトです。
- that
- 現在のリクエストディスパッチを表すPageDispatchオブジェクトです。
- plugin
- 処理対象のPOPが定義されているプラグインに対応するorg.seasar.kvasir.base.Pluginオブジェクトです。
- pop
- 処理対象のPOPを表すorg.seasar.kvasir.cms.pop.Popオブジェクトです。
- transient
- 一時的な変数を保持するorg.seasar.kvasir.util.collection.AttributeReaderオブジェクトです。(セッションが存在しない場合はnullになります)
動作確認
それでは動作確認をしてみましょう。
+PLUSTで作成したプロジェクトは、Tomcatプラグインがインストールされている環境では自動的にTomcatプラグインのための設定が作成されます。そのため、Tomcatにプロジェクトのコンテキストを一度手動登録すれば、あとはTomcatプラグインを使ってTomcatを起動することでデバッグ用のKvasir/Soraが起動します。
なおTomcatプラグイン以外のWebアプリケーションサーバプラグインを使用する場合は、コンテキスト名を「/プロジェクト名」、Webアプリケーションのルートパスを「/build/webapp」にして下さい。
さてTomcatを起動してからブラウザから「http://localhost:8080/com.example.hello」にアクセスすると、デバッグ用のKvasir/Soraのトップページが表示されます。
まずadministratorアカウントでログインして下さい。デフォルトのパスワードは空になっています。「管理ツール」というリンクが表示されますのでクリックして下さい。サイト管理者パスワードの設定画面が表示されますので、サイト管理者のパスワードを登録して下さい。パスワードを登録すると、管理画面が表示されます。
POPの追加
ここでは画面の左側のペインにHelloPopを表示することにします。
POPを追加する方法としては、管理ツールで登録する方法とGUIで追加する方法の2通りがあります。
GUIで追加する方法は、Firefoxで行なうことを推奨します。(Google Chromeなどで一部の操作が正常に動作しないことが分かっています。)
管理ツールで登録する方法
administratorでログインした状態で、左サイドバーの「管理ツール」のメニューに「管理ツール」リンクがありますのでクリックして管理ツールの画面を表示して下さい。
画面左側のペインは「left-sidebar」という名前ですので(ペインの名前についてはペインの説明を参照して下さい)、管理ツールのルートディレクトリの「プロパティ」タブを押して、org.seasar.kvasir.cms.pop.pane.left-sidebar.popsというプロパティを編集します。
値の部分に「com.example.hello.helloPop-1」という行を追加して「変更」を押して下さい。「com.example.hello」はHelloPopを提供するプラグインのID、helloPopはHelloPopのプラグイン内IDで、ともにプロジェクトのsrc/main/plugin/plugin.xmlに書かれています。
「1」は追加するPOPのインスタンスIDです。インスタンスIDを指定することで、同じ種類のPOPを複数サイトに配置することができるようになっています。
ペインやPOPの情報を変更した後は、それをサイトに反映させるために管理ツール上部のフレームの右側のドロップダウンで「Heim管理」を選択して、「全てのペインをリフレッシュする」をクリックして下さい。
サイトのトップページに戻ると、POPが追加されていることが分かります。
GUIで追加する方法
administratorでログインした状態で、左サイドバーの「管理ツール」のメニューに「Webサイト編集を開始する」リンクがありますのでクリックして下さい。
画面下に青い矢印が表示されますのでクリックするとPOPの一覧が表示されます。緑色の矢印で次候補を表示していくと、「NO IMAGE」と書かれたアイコンが表示されます。このアイコンにカーソルを当てると「Hello Plugin POP」と表示されます。これが今開発したPOPです。
このアイコンを左サイドバーにドラッグ&ドロップして下さい。これでPOPが追加されました。
追加し終わったら「Webサイト編集を終了する」リンクをクリックしてWebサイト編集を終了して下さい。
なおWebサイト編集モードでPOPをダブルクリックすると、POPのタイトルや本文などを変更することができます。
アーカイブの作成
プラグインが正しく動作することを確認したら、プラグインアーカイブを作成します。
プラグインアーカイブはMaven2で作成することができます。プラグインプロジェクトのトップディレクトリでmvn installコマンドを実行すると、プラグインアーカイブとしてcom.example.hello-0.0.1-SNAPSHOT.zipが作成されます。
プラグインの追加
既存のKvasir/Soraにプラグインを追加するには、Kvasir/Soraのインストールディレクトリの下のkvasir/pluginsディレクトリにプラグインのZipファイルを展開して配置して下さい。