テンプレートの作成
Liferay Portalではテンプレート作成に、FreemakerやXSL、Velocityといくつかのテンプレートエンジンを使用することができます。Liferay PortalではVeloctyの使用が一般的なので、今回はVelocityを使ってサンプルを作っていきましょう。
Liferay Portal起動前に、portal-ext.propertiesというファイルを作り、
velocity.engine.restricted.variables=
と1行書いたファイルを作ったかと思いますが、これにより、Webコンテントのテンプレート内でさまざまなクラスをコールするために必要な、serviceLocatorというインスタンスがコールできるようになります。
次に、ストラクチャーの内容を表示するテンプレートを作りましょう。「管理」メニューの「テンプレート」を選択してください。
左上の「追加」ボタンをクリックし、名前に「不動産テンプレート」と入力、「詳細」をクリックして、ストラクチャーの選択ボタンをクリック、先ほど作成した「不動産ストラクチャー」を選択しましょう。続いて言語プルダウンでVelocity(vm)を選択します。
この記事からダウンロードできるサンプル(zipファイル)の中に、不動産テンプレート.txtが入っています。このファイルの中身を、テキストエリアに貼り付けて保存をクリックします。
テンプレート構文の説明
テンプレート内で使用される変数やクラスの使い方は、ソースコードを直接参照する方が早かったりします。少し中身の解説をしましょう。
物件名が
$reserved-article-title.data
という表記で出力されています。これはJournalStructureConstants.java内に、さまざまな定義が載っています。WebコンテンツはJournalArticleというオブジェクトで管理されているのですが、そのIDは$reserved-article-id.dataで取得することができます。
家賃は
$rental_price.getData()
と表記されていますが、このrental_priceは、ストラクチャー設定画面で「名前」のところに指定した値が使用されます。また、この値はテンプレートで使用ストラクチャーを指定すると、テンプレート作成画面の左側、「項目」のところにこれら変数名がワンクリックでペーストされるショートカットが現れますので、そちらも使用できます。
トリッキーなのがプルダウンのoptionのテキスト値表示です。本来であれば間取りなら、
$room_layout.getOptions()
でオプション値がListで取得できるはずなのですが、6.2ではバグのため空のリストが返ってきてしまいます。今回は自分でVelocityマクロを作成して、ストラクチャーのxmlをパースして取得するようにしています。
画像に関してはテンプレートにあるように、
$room_images.getSiblings()
でListで複数イメージを取得して、表示できます。これも左側メニューの項目「画像」をクリックすると、foreach文を含んだ形でテキストエリアに表示用コードがペーストされます。


