FreeLayoutCustomFieldプラグイン/FreeLayoutContentFieldプラグイン拡張パック

対応バージョン:

表型のフィールド

更新日:2024.02.07

表型のフィールドは、行数可変の表を作る際に使います。表の各項目として、FreeLayoutCustomFieldプラグインおよび拡張パックの各フィールドを使うことができます。
ただし、リッチテキスト型およびGoogleマップ型の項目は、表のセルでは面積が狭くて入力しにくいので、セルには編集用のリンクとプレビューが表示され、リンクからダイアログボックスを開いて入力するようにしています。

表型のフィールド

expension_ex_011.jpg

表の各行は、以下の各ボタンで、増減したり並べ替えたりすることができます(ただし、最後の2つのボタンはデフォルトでは非表示)。

表を操作するボタン

expension_ex_012.jpg

フィールドの定義

表型のフィールドを使う場合、フィールドの定義を以下のように書きます。

表型のフィールドの定義

fields:
  フィールド名:
    type: table
    label: ラベル
    label_class: ラベルのクラス名
    updown: 0または1
    rowDragging: 0または1
    initRows: 初期行数
    maxRowsAllowed: 最大行数
    columns:
      - 1列目の定義
      - 2列目の定義
      ・・・
    default:
      - 列名: 値
        列名: 値
      ・・・
    required: 必須設定

「columns」を除いて、表型フィールド独自の設定項目の内容は、以下の表の通りです。これらの各項目は省略可能で、省略した場合は「デフォルト値」の列の値が適用されます。

各設定項目の内容

項目内容デフォルト値
updown1を指定すると、上下の行と入れ替えるボタンが表示される0(ボタンは表示されない)
rowDragging0を指定すると、ドラッグで行を並べ替えるボタンが非表示になる1(ボタンが表示される)
initRows初期状態で表に表示する行数3
maxRowsAllowed追加可能な最大の行数指定なし(無制限に行を追加できる)

表の各列の定義

フィールドの定義の「columns」のブロックで、表の各列を定義します。その書き方は、原則として、これまでの各フィールドの書き方と同じです。
ただし、列に付ける名前を「name: 名前」の行で指定します。名前は半角英数字で指定します。また、画像/オーディオ/ビデオ/ファイル/リッチテキスト/Googleマップの各型では、classを指定することはできません。

各列の定義の書き方

fields:
  フィールド名:
    type: table
    ・・・
    columns:
      - name: 列名
        type: 列のタイプ
        label: 列のラベル
        class: クラス名
        その他の各設定項目
        ・・・
      - name: 列名
        type: 列のタイプ
        label: 列のラベル
        class: クラス名
        その他の各設定項目
        ・・・

上記の設定項目の他に、フィールドの型によって、以下の設定項目があります。

フィールドの型によって使える設定項目

項目名内容
テキスト型
複数行テキスト型
placeholder未入力の時に表示する文字列
minlength入力できる最小の文字数
maxlength入力できる最大の文字数
テキスト型pattern入力値を制限するための正規表現
数値型min入力できる最小値
map入力できる最大値
step入力値の増分
リッチテキスト型
Googleマップ型
dialog_widthダイアログの幅(既定値は700ピクセル)
dialog_heightダイアログの高さ(既定値は550ピクセル)
リッチテキスト型widthセルに表示するプレビューの幅(既定値は200ピクセル)
heightセルに表示するプレビューの高さ(既定値は100ピクセル)

なお、Googleマップ型では、admin_width/admin_heightを指定することはできません(dialog_width/dialog_heightがそれらの代わりになります)。

表型フィールドの例

表型フィールドの例として、以下の画面のような表を作りたいとします。

表の例

expension_ex_013.jpg

表全体の設定は、以下のようにしたいとします。

表全体の設定

項目
フィールド名items
ラベル商品
初期行数2
ドラッグで行を並べ替えるボタン非表示
上下の行と入れ替えるボタン表示

また、表の各列は、以下のようにしたいとします。

表の各列の設定

項目
1列目名前item_name
タイプテキスト(text)
ラベル名前
2列目名前price
タイプ数値(spinner)
ラベル単価
3列目名前image
タイプ画像(image)
ラベル写真
4列目名前description
タイプリッチテキスト(richtext)
ラベル商品説明
プレビューの幅300ピクセル
プレビューの高さ150ピクセル

この場合、カスタムフィールドの「フィールドの定義」の欄に、以下のように入力します。

フィールドの定義

fields:
  items:
    type: table
    label: 商品
    initRows: 2
    updown: 1
    rowDragging: 0
    columns:
      - name: item_name
        type: text
        label: 名前
      - name: price
        type: spinner
        label: 単価
      - name: image
        type: image
        label: 写真
      - name: description
        type: richtext
        label: 商品説明
        width: 300
        height: 150

テンプレートでの表の出力

表型のフィールドに入力した値をテンプレートで出力するには、「MTFLCFTable」というテンプレートタグ(ブロックタグ)を使います。「name」または「field」のモディファイアで、表型のフィールドの名前を指定します。
ブロックを1回実行する毎に、表の1行分のデータを出力します。個々の列のデータは、その型に応じたテンプレートタグ(MTFLCFValueなど)で出力することができます。テンプレートタグの「name」または「field」のモディファイアで、列につけた名前を指定します。
また、Movable Type標準の繰り返し系ブロックタグと同様に、MTFLCFTableタグのブロック内では、__first__/__last__/__odd__/__even__/__counter__の各変数を使うことができます。
例えば、前ページの例のフィールドで、それを含むカスタムフィールドに「MTEntryItems」というテンプレートタグを付けたとします。この場合、フィールドの値を表にして出力するには、以下のようにテンプレートを組みます。

表を出力する例

<mt:EntryItemsBlock> 
<mt:FLCFTable field="items">
<mt:If name="__first__">
<table>
<tr>
<th>名前</th><th>単価</th><th>写真</th><th>商品説明</th>
</tr>
</mt:If>
<tr>
<td><$mt:FLCFValue field="item_name"$></td>
<td><$mt:FLCFValue field="price"$></td>
<td><mt:FLCFAsset field="image"><$mt:AssetThumbnailLink$></mt:FLCFAsset></td>
<td><$mt:FLCFValue field="description"$></td>
</tr>
<mt:If name="__last__">
</table>
</mt:If>
</mt:FLCFTable>
</mt:EntryItemsBlock>

入力値のバリデーションと自動置換

表型のフィールドでも、入力値のバリデーションや自動置換を行うことができます。バリデーションを行う場合、表のフィールドを含むカスタムフィールドで、「入力値チェック」の欄に以下のようなテンプレートを入力します。
MTFLCFTableタグで、表の各行を順に繰り返します。そして、このタグのブロックの中で、MTFLCFRowValueタグを使って列の生の値を条件判断し、エラーであればMTFLCFValidateErrorタグでエラーメッセージを設定します。

表型のフィールドのバリデーションを行うテンプレート

<mt:FLCFValidate>
  <mt:FLCFTable field="フィールド名">
    <mt:If tag="FLCFRawValue" field="列名" 比較モディファイア="値">
      <mt:FLCFValidateError>エラーメッセージ</mt:FLCFValidateError>
    </mt:If>
    ・・・
  </mt:FLCFTable>
</mt:FLCFValidate>

また、MTFLCFTableタグのブロックの中で、以下のようなMTFLCFSetValueタグを使って、特定の列の値を自動置換することもできます。

表の列の値を自動置換する

<mt:FLCFSetValue field="列名">置換先の値</mt:FLCFSetValue>

ドラッグで行を並べ替える際の制限事項

リッチテキストや画像など、高さが大きいフィールドを入れる場合、表内のある行を一番最初の行や最後の行へドラッグしても、行を並べ替えられない場合があります。
このような場合は、フィールドの定義に「updown: 1」の行を入れて、上下の行と入れ替えるボタンも表示することをお勧めします。また、「rowDragging: 0」の行も入れて、ドラッグでの並べ替えをできなくする方がより良いでしょう。

前へ
プラグインTOP
test