Title: SDL Lesson 8 - パラメーター付きのループを実行する

SDL の <foreach>...</foreach> タグを使って特定のループ処理ができます。ここでは、その使い方を学習します。



ファイルを作成する



lesson08.properties



ダウンロード --> @1

ここでは新しく「lesson08」というビューを作成します。まずはビューの定義ファイル lesson08.properties を、プラグインの config/views/all に作成します。

テキストエディタで開いて次のように記述し、保存します。

sdl=com.traction.sdl.tutorial.lesson08


lesson08.properties 作成

lesson08.sdl



ダウンロード --> @2

ビューの定義ファイル lesson08.properties で指定された lesson08.sdl を com/traction/sdl/tutorial に作成します。

lesson08.sdl 作成

テキストエディタで開いて次のように記述し、保存します。(文字エンコードは、必ず 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>Lesson 08 - ForEach</h1>
    <!-- 例(1): foreach.current を使って現在の値を取得する -->
    <div class="example">
      <h2>Example (1)</h2>
      <p>
        <foreach list="1,2,3,4,5">
          __foreach.current__<loop.last not>,&nbsp;</loop.last>
        </foreach>
      </p>
    </div>
    <!-- 例(2): 値を「fruit」というローカル変数に代入する -->
    <div class="example">
      <h2>Example (2)</h2>
      <p>
        <foreach list="りんご,みかん,レモン,桃,あんず" set="fruit">
          ${fruit}<loop.last not>,&nbsp;</loop.last>
        </foreach>
      </p>
    </div>
    <div class="example">
      <!-- 例(3): リストを予めグローバル変数で設定しておく -->
      <global.set name="myList" value="富士山,駒ケ岳,トムラウシ山,筑波山,蛭ヶ岳" />
      <h2>Example (3)</h2>
      <p>
        <foreach listvariable="myList" set="mountain">
          ${mountain}<loop.last><br>登ったよ!<else>,&nbsp;</loop.last>
        </foreach>
      </p>
    </div>
  </body>
</html>


foreach タグの概要



foreach タグは、list= パラメーターで渡されたリスト中のそれぞれの値をループに渡して処理します。

list= パラメーターの値は数値でも文字列でも構いません。値の区切り記号は、既定で半角カンマ記号ですが、separator= パラメーターを使って別の文字を指定できます。

<!--- 半角スペースで値を区切る例 -->
<foreach list="北海道 秋田 福島 奈良 沖縄" separator=" ">
  <loop.first><ul></loop.first>
  <li>__foreach.current__</li>
  <loop.last></ul></loop.last>
</foreach>
 


例(1) 単純なリスト



一つ目の例では、list="1,2,3,4,5" として、単純に 1 〜 5 の数値をループに渡しています。ループは5回実行されます。

<foreach list="1,2,3,4,5">
  __foreach.current__<loop.last not>,&nbsp;</loop.last>
</foreach>


現在実行中のループに渡された値は、foreach.current タグで参照できます。

また、<loop.last not>,&nbsp;</loop.last> により、ループの最終回以外でカンマと空白を挿入していることに注目してください。

例(2) リストの値を変数に代入



メモ: 変数については次回の SDL Lesson 9 - グローバル変数やローカル変数を扱う で詳しく解説します。



二つ目の例では、list= の値を set= で指定した「fruit」という名前のローカル変数に代入しています。こうすることで、現在実行中のループに渡された値をローカル変数名で参照できます。もちろん、foreach.current を使っても参照できます。

<foreach list="りんご,みかん,レモン,桃,あんず" set="fruit">
  ${fruit}<loop.last not>,&nbsp;</loop.last>
</foreach>


ローカル変数の値を参照する書き方には次のようなものがあります。どれを使うかは書き手の自由です。



例(3) グローバル変数を使って予めリストを設定



メモ: 変数については次回の SDL Lesson 9 - グローバル変数やローカル変数を扱う で詳しく解説します。



三つ目の例では、リストの内容(山の名前)を予め「myList」という名前のグローバル変数に代入しています。<foreach> では list= ではなく listvariable= パラメーターを使い、「myList」という名前の変数の値をリストとして参照するようにしています。

<global.set name="myList" value="富士山,駒ケ岳,トムラウシ山,筑波山,蛭ヶ岳" />
<foreach listvariable="myList" set="mountain">
  ${mountain}<loop.last><br>登ったよ!<else>,&nbsp;</loop.last>
</foreach>


これは、list= を使うと次のように書き換えられます。

<global.set name="myList" value="富士山,駒ケ岳,トムラウシ山,筑波山,蛭ヶ岳" />
<foreach list="${myList}" set="mountain">
  ${mountain}<loop.last><br>登ったよ!<else>,&nbsp;</loop.last>
</foreach>


グローバル変数も、ローカル変数と同じように、次のようにして値を参照できます。



また、次のように長い形で書くこともできます。



動作確認



sdl ファイルや properties ファイルを設置、編集した後は、必ずサーバーセットアップ > 一般 > サーバー管理 ページの [キャッシュのクリア] をクリックします。

TeamPage の検索ボックスに /type lesson08 と入力して Enter キーを押すと、下図のような「Lesson 08 - ForEach」ビューが表示されます。

実行結果

まとめ



1. <foreach>...</foreach> タグは、特定の回数のループ処理を行うためのタグである。

2. ループに渡す値は、list="値1,値2,値3,..." の形で指定する。

3. または、予め変数に値を代入しておき、listvariable="変数名" としてもOK。

4. 現在実行中のループに渡されている値は、foreach.current を使って参照できる。

5. set="変数名" を使うと、ループ内でローカル変数として参照できる。



Attachments:
lesson08.properties
lesson08.sdl
08_properties.png
08_sdl.png
example.png
関連記事
親記事に追加されている (1)
参照されている (1)
Article: DocSDK211 (permalink)
Date: 2015/02/17; 13時07分20秒 JST

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