Title: 部品の定義:テキスト入力欄(数値)
フォームに配置する部品にはいろいろな種類がありますが、ここでは数値用テキスト入力欄の部品の定義ファイルの書き方を解説します。
ここでは、カスタマイズ版プロジェクトの投稿/編集フォームの作成方法 で紹介している、「製品保守案件」プラグインの 部品「property_maintprod_price」を例に見ていくことにします。
定義ファイルの場所
フォームの部品の定義ファイルは、config/data/field/props に 部品名.properties という名前で保存します。
部品の名前が「property_maintprod_price」なので、ファイル名は property_maintprod_price.properties になります。
なお、ファイル名が「property_」から始まっているので、この部品(テキスト入力欄)に入力された内容は、エントリープロパティとして記事に保存される。エントリープロパティの名前は「maintprod_price」になります。
定義ファイルの内容
この property_maintprod_price.properties に次の内容をコピー&ペーストして保存してください。
# 部品の種類
# 数値型のテキスト入力欄なので「number」を指定する
type=number
# エントリーフィルードの名前
# 通常は部品名から「property_」を外した残りの部分
entry_field=maintprod_price
# フォームに表示する時にクラス名を入れたい場合は指定する
# 指定しなくても可
class=price
# 最大と最小
max=1000000
min=0
タイプ(種類)
type=
では、この部品の種類を指定します。ここでは数値型のテキスト入力欄を意味する number
を指定しています。
エントリー フィルード(表示用の部品)
entry_field=
では、この部品に対応するエントリーフィールドの名前を指定します。
名前が「property_」から始まるフォーム部品(値をエントリープロパティとして保存する部品)に対応するエントリーフィルードの名前は、通常、「property_」の名前を取った残りに部分になります。
よって、フォーム部品「property_maintprod_price」のエントリープロパティの名前は「maintprod_price」になります。
クラス
class=
で指定された値は、この部品をフォーム上に表示するとき、フォームを構成する HTML 内の class=
属性として反映されます。
エントリーフィルードの定義
フォームの部品「property_maintprod_price」に対応する、表示用の部品「maintprod_price」を定義します。
定義ファイルは、定義本体、HTML レンダリング用定義、Text レンダリング用定義、Fulltext (全文検索用) レンダリング用定義、の 4 つを用意します。
定義本体
エントリーフィルードの全体的な定義ファイル maintprod_price.properties を config/entry/fields/props に作成します。
次の内容をコピー&ペーストしてください。
# エントリープロパティとして保存されているデータを取り出す
class=com.traction.sdk.token.EntryPropertyEntryField
# 部品の名前
display_name=Price
# フィルター(絞り込み)として利用できるようにするか
filter_selectable=true
# フィルターとして利用する場合のグループ名と順番
filter_group=maintprod
filter_order=5010
HTML レンダリング用の定義
エントリーフィールドの値を HTML 形式で出力(レンダリング)するための定義ファイル maintprod_price.properties を config/entry/fields/html に作成します。
次の内容をコピー&ペーストしてください。
# 「com」フォルダの下の、 「traction」フォルダの下の、
# 「sdl」フォルダの下の、 「fields」フォルダの下の、
# 「html.sdl」ファイルの中の、「entry-property-value」関数を使う
sdl=com.traction.sdl.fields.html#entry-property-value
Text レンダリング用の定義
エントリーフィールドの値をテキスト形式で出力(レンダリング)するための定義ファイル maintprod_price.properties を config/entry/fields/text に作成します。
次の内容をコピー&ペーストしてください。
# 「com」フォルダの下の、 「traction」フォルダの下の、
# 「sdl」フォルダの下の、 「fields」フォルダの下の、
# 「text.sdl」ファイルの中の、「entry-property-value」関数を使う
sdl=com.traction.sdl.fields.text#entry-property-value
Fulltext レンダリング用の定義
エントリーフィールドの値をフルテキスト形式で出力(レンダリング)するための定義ファイル maintprod_price.properties を config/entry/fields/fulltext に作成します。
次の内容をコピー&ペーストしてください。
# NullRendererを指定し、何も出力(レンダリング)しない
class=com.traction.sdk.token.NullRenderer
NullRenderer を指定しているので、フルテキストとしては「何も出力されない」ということになります。
まとめ
数値型テキスト (maintprod_price) のエントリーフィールドの設定は、文字型 (maintprod_subject) のそれとほとんど変わりません。
どちらも「エントリープロパティとして保存されている値を取り出し、HTML や Text などの形式でレンダリングする」という動作を行うからです。
それに対し、フォームの部品の定義では、文字型と数値型とで多少の違いがあります。
type=
が文字型の入力欄では text
になり、数値型では number
になる。
- 数値型では
max=
や min=
を指定できる。
つまり、入力(投稿)するときに使う部品は「文字用」と「数値用」とで少し違いがあるのに対して、出力(レンダリング)するときに使う部品はどちらも「エントリープロパティから取り出す」動作を行い、定義のやり方も同じです。