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 - グローバル変数やローカル変数を扱う で解説したとおり、変数の値を取得するタグの書き方はいくつもあり、どの書き方をしても結果は同じです。



同様に、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. 渡されたパラメーター値(引数)は、関数内でローカル変数として参照・取得できる。



Attachments:
lesson15.properties
lesson15.sdl
image1.png
関連記事
親記事に追加されている (1)
参照されている (1)
Article: DocSDK315 (permalink)
Date: 2018/10/14; 4時38分31秒 JST

Author Name: TeamPage サポート
Author ID: jpbo