Title: SDL Lesson 15 - 関数でパラメーターを使う(引数を使う)
今回のレッスンでは、関数を呼び出す際にパラメーターを使用し、呼び出された関数内で引数として(ローカル変数として)使用する方法について学習します。
ファイルの作成
lesson15.properties
ダウンロード --> @1
ここでは新しく「lesson15」というビューを作成することにします。まずはビューの定義ファイル lesson15.properties を、プラグインの config/views/all に作成します。
テキストエディタで開いて次のように記述し、保存します。
sdl=com.traction.sdl.tutorial.lesson15
lesson15.sdl
ダウンロード --> @2
ビューの定義ファイル lesson15.properties で指定された lesson15.sdl を com/traction/sdl/tutorial に作成します。
テキストエディタで開いて次のように記述し、保存します。(文字エンコードは UTF-8 にしてください)
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>SDL Tutorial</title>
<html.css url="/html/css/sdllessons/styles.css" />
</head>
<body>
<h1>SDL 関数</h1>
<#entries-list title="記事 新しい順 5件" type="rchron" />
<#entries-list title="記事 古い順 5件" type="rchron" sort="1" />
<#entries-list title="タスク 締切日の古い順 10件" type="tasks" max="10" sort="10" />
</body>
</html>
<sdl.function name="entries-list">
<h2>${title}</h2>
<entries type="${type}" proj="*" max="<var.value name='max' default='5' />" sort="<var.value name='sort' default='2' />">
<div class="entry">(__loop.index__) __entry.tractionid__ : __entry.title__ (<entry.date dateformat="long" timeformat="long" />)</div>
<loop.none><div class="error">該当する記事が見つかりません。</div></loop.none>
</entries>
<hr>
</sdl.function>
動作確認
キャッシュのクリア
sdl ファイルや properties ファイルを設置、編集した後は、必ずサーバーセットアップ > 一般 > サーバー管理 ページの [キャッシュのクリア] をクリックします。
ビューの表示
TeamPage の検索ボックスに /type lesson15
と入力して Enter キーを押すと、下図のビューが表示されます。
解説
パラメーターの使い方
上記のコードの次の部分では、関数「entries-list」を呼び出す時に title=
と type=
パラメーターを指定しています。
<#entries-list title="記事 新しい順 5件" type="rchron" />
パラメーターの値(引数)は、関数「entries-list」内でローカル変数として参照できます。
すなわち、<#entries-list title="値" />
の title=
パラメーターの値は、<sdl.function name="entries-list">...</sdl.function>
内で ${title}
や <var.value name="title" />
を使って取得できます。
DocSDK220: SDL Lesson 9 - グローバル変数やローカル変数を扱う で解説したとおり、変数の値を取得するタグの書き方はいくつもあり、どの書き方をしても結果は同じです。
${title}
#$title$
<var.value name="title" />
<var.get name="title" />
<variable.value name="title" />
<variable.get name="title" />
<variable.local.value name="title" />
<variable.local.get name="title" />
同様に、sort=
や max=
パラメーターの値は、${sort}
や <var.value name="max" />
などを使って取得できます。
実例解説
sdl コードの関数定義部分を見てみましょう。
<sdl.function name="entries-list">
<h2>${title}</h2>
<entries type="${type}" proj="*" max="<var.value name='max' default='5' />" sort="<var.value name='sort' default='2' />">
<div class="entry">(__loop.index__) __entry.tractionid__ : __entry.title__ (<entry.date dateformat="long" timeformat="long" />)</div>
<loop.none><div class="error">該当する記事が見つかりません。</div></loop.none>
</entries>
<hr>
</sdl.function>
2 行目の <h2>${title}</h2>
の ${title}
の部分は、title=
パラメーターで渡された値に置き換わります。
記事の一覧を表示する <entries>
タグの type=
と sort=
と max=
パラメーターの値は、それぞれ同じ名前のローカル変数(引数)で決まるようになっています。
メモ: <entries>
タグのパラメーター詳細については DocSDK147: SDL Lesson 5 - 記事を投稿順に取得する を参照してください。
<entries type="${type}" proj="*" max="<var.value name='max' default='5' />" sort="<var.value name='sort' default='2' />">
例えば、関数を <#entries-list type="tasks" sort="10" />
として呼び出すと、<entries>
タグの type=
パラメーターの値には「tasks」が渡されます。これにより、<entries>
タグは「ジャーナルの中からタスク記事を取得する」という動作を行います。
そして、<entries />
タグの sort=
パラメーターに値「10」が渡され、「取得したタスク記事を、締切日の古い順に並べる」という動作を行います。
まとめ
1. 関数にパラメーターを使って値を渡すには <#関数名 パラメーター1="値1" パラメーター2="値2" ... />
のように記述する。
2. 渡されたパラメーター値(引数)は、関数内でローカル変数として参照・取得できる。