6.6.7 テンプレートを作成する

Webコンテンツポートレットでは,uCosminexus Portal Framework独自の構文でテンプレートを作成します。また,テンプレート内で,HttpServletRequestオブジェクト,HttpSessionオブジェクトにアクセスできます。

<この項の構成>
(1) HttpServletRequest/HttpSessionへのアクセス
(2) uCosminexus Portal Frameworkでサポートする構文
(3) ページ送りを設定する
(4) テンプレート作成時の注意事項
(5) テンプレートの作成例

(1) HttpServletRequest/HttpSessionへのアクセス

テンプレート内で,HttpServletRequestへは$request,HttpSessionへは$sessionの変数名でアクセスすることができます。設定例を次に示します。

設定例

$session.setAttribute("pageno", $pageno);

(2) uCosminexus Portal Frameworkでサポートする構文

uCosminexus Portal Frameworkでは,独自の構文でテンプレートを作成できます。サポートする構文を次に示します。

表6-1 Webコンテンツポートレットのテンプレートで使用する構文

構文内容
#コメントを指定します。
set変数に値をセットします。
get変数が配列の場合に,値を取り出します。
if-elseif/elseif/elseによる条件分岐を設定します。
foreachループ処理を設定します。

(a) 

コメントを指定します。コメントはテンプレートの出力に含めません。

形式
一行の場合

## 文字列

複数行の場合

#*
文字列
*#

設定例
一行の場合

## 一行コメントです。

複数行の場合

#*
複数行コメントです。
ページには表示されません。
*#

(b) set

変数の値の設定を行います。値の設定部分は丸括弧でくくります。

形式

#set( {変数|プロパティ} = {変数|文字列|プロパティ|メソッド|数値} )

設定例

#set( $portal = "aaa")
#set( $bbb = $portal)
#set( $bbb = $bar )                      ## 変数
#set( $bbb.Bar = "portal" )              ## 文字列
#set( $bbb.Bar = $portal.aaa )           ## プロパティ
#set( $bbb.Bar = $portal.set($web))      ## メソッド
#set( $bbb.Number = 123 )                ## 数値

(c) get

変数が配列の場合に,値を取り出します。配列の最初の要素は「0」とします。

各コンポーネントの出力は文字列または1次元の配列によって構成されますが,正規表現での抽出による出力結果だけ,2次元の配列として出力されます。このため,指定する方法が異なります。

●正規表現の抽出以外から取得する場合

形式

変数.get(数値)

設定例

$aaa.get(0)                  ## 変数aaaの配列から最初の要素を取得
$bbb.get(2)                  ## 変数bbbの配列から3番目の要素を取得

●正規表現の抽出結果から取得する場合

形式

変数.get(数値).get(数値)

設定例
[ポートレット編集]画面(正規表現抽出コンポーネントパラメタ設定画面)で次のように設定している場合を例に説明します。
[出力キー]out
[出力1]開始位置:href¥s*=¥s*[‘”] 終了位置:[“’]
[出力2]開始位置:<a[^>]* 終了位置:</a>
この指定によって,次の個所が抽出されます。
[図データ]
この抽出結果に対し,次のように設定できます。

$out.get(0).get(0)               ## http://portal1.comを取得
$out.get(2).get(1)               ## Portal3を取得

(d) if-else

if/elseif/elseによる条件分岐を設定します。

形式

#if( [条件1] ) [条件1を満たす場合の処理]
[ #elseif( [条件n] ) [条件nを満たす場合の処理] ]*
[ #else [上記条件をすべて満たさない場合の処理] ]
#end

注※ [ ]*は[ ]内を繰り返し定義できることを意味します。

if/elseifでは項目の条件内では,比較演算子,論理演算子を使用可能とします。

表6-2 if-elseで使える演算子

演算子説明
==両方のオブジェクトが同じであるかどうかを判定します。
<右辺のオブジェクトが左辺のオブジェクトより大きいかどうかを判定します。
>左辺のオブジェクトが右辺のオブジェクトより大きいかどうかを判定します。
&&条件がANDであることを表します。
||条件がORであることを表します。
!条件がNOTであることを表します。
設定例

#if ($aaa < 10)

#elseif ($aaa == 10)

#else

#end

##論理AND
#if ($aaa && $bar)

#end

##論理OR
#if ($aaa || $bar)

#end

##論理NOT
#if (!$aaa)

#end

(e) foreach

foreachによるループ処理を設定します。

正規表現による項目切り出しで切り出した繰り返し項目を変数名に指定して,直接ループさせることができます。また,範囲演算子[n..m]を指定して,ループさせることもできます。

形式

#foreach( 変数 in {変数|範囲演算子} ) 処理 #end

設定例
変数名で指定する場合
「item」を指定している場合を例にします。

<ul>
#foreach ($item in $items)
 <li>$item</li>
#end
</ul>

範囲演算子で指定する場合

#foreach ( $step in [0..10])  #0から10までカウントアップ

#end

(f) 配列アクセス

繰り返し項目や,出力キー重複によって配列となっているデータについては,size()メソッドによってデータ件数を取得することができます。

形式

変数.size()

設定例

#set( $item_count = $url.size())

(3) ページ送りを設定する

ページ送りは,次の変数で指定します。ページ送りを使用する場合は,[ポートレット編集]画面(テンプレート適用パラメタ設定画面)でページ送り対象データを指定する必要があります。なお,[ポートレット編集]画面(テンプレート適用パラメタ設定画面)の詳細については,「10.3.5(8) テンプレート適用パラメタ設定画面」を参照してください。

変数名説明
$pageno現在処理対象のページ番号です。数値として保持されます。最初のページ番号を1とします。
$prevpage現在処理対象ページの前ページ番号です。現在の処理対象が1ページの場合は,0を指定します。
$nextpage現在処理対象ページの次ページ番号です。次ページがない場合でも現在の処理対象ページ+1を指定します。
$havenext次ページが存在するかどうかです。存在する場合は「true」,存在しない場合は「false」を指定します。
$startindex現在のページ内に表示するレコードの開始位置です。数値として保持されます。
$endindex現在のページ内に表示するレコードの終了位置です。数値として保持されます。
$portleturiページ送り処理用のURL文字列を展開します。

次に設定例を示します。

##開始位置から終了位置まで繰り返す
#foreach ($i in [$startindex..$endindex])
<a href="$url.get($i)">$headline.get($i)</a><br />
#end

#if ($pageno > 1)
<a href="$portleturi?pageno=$prevpage">前へ</a>
#end
#if ($havenext == true)
<a href="$portleturi?pageno=$nextpage">次へ</a>
#end

(4) テンプレート作成時の注意事項

テンプレートに日本語を記述する場合,set構文でいったん変数に格納してから使用してください。

設定例

#set($portalname = “ポータル名”)

<a href="$url">$portalname</a>

(5) テンプレートの作成例

#set($site1title = “サイト1”)
<table>
<tr>
 <td>$site1title</td>
</tr>
#foreach($site in $site0)
<tr>
 <td><a href="$site0.get($site).get(0)">$site0.get($site).get(1)</td>
 <td>$site0.get($site).get(2)</td>
</tr>
#end
</table>