Title: 部品の定義:テキスト入力欄
フォームに配置する部品にはいろいろな種類がありますが、ここではテキスト入力欄の部品の定義ファイルの書き方を解説します。
ここでは、カスタマイズ版プロジェクトの投稿/編集フォームの作成方法 で紹介している、「製品保守案件」プラグインの 部品「property_maintprod_subject」を例に見ていくことにします。
定義ファイルの場所
フォームの部品の定義ファイルは、config/data/field/props に 部品名.properties という名前で保存します。
部品の名前が「property_maintprod_subject」なので、ファイル名は property_maintprod_subject.properties になります。
なお、ファイル名が「property_」から始まっているので、この部品(テキスト入力欄)に入力された内容は、「maintprod_subject」という名前のエントリープロパティとして記事に保存されます。
定義ファイルの内容
この property_maintprod_subject.properties に次の内容をコピー&ペーストして保存してください。
# 部品の種類
# テキスト入力欄なので「text」を指定する
type=text
# エントリーフィルードの名前
# 通常は部品名から「property_」を外した残りの部分
entry_field=maintprod_subject
# フォームに表示する時にクラス名を入れたい場合は指定する
# 指定しなくても可
class=subject
タイプ(種類)
type=
では、この部品の種類を指定します。ここではテキスト入力欄を意味する text
を指定しています。
部品の種類は、config/data/field/types に置かれている 種類名.properties で定義されています。詳しくは後述します。
エントリー フィルード(表示用の部品)
entry_field=
では、この部品に対応するエントリーフィールドの名前を指定します。
エントリーフィルードとは、記事に紐付けられた値をどのように画面に表示するかを決める、表示用の部品と考えてください。
(ここで解説しているのは、フォームから入力するための部品で、それとは別に、画面に表示するときの部品が必要になります。それがエントリーフィルードです。)
名前が「property_」から始まるフォーム部品(値をエントリープロパティとして保存する部品)に対応するエントリーフィルードの名前は、通常、「property_」の名前を取った残りに部分になります。
名前が「property_」から始まらないフォーム部品(タグやリレーションシップとして保存する部品)は、通常、対応するエントリーフィールドは同じ名前になります。
クラス
class=
で指定された値は、この部品をフォーム上に表示するとき、フォームを構成する HTML 内の class=
属性として反映されます。
エントリーフィルードの定義
フォームの部品「property_maintprod_subject」に対応する、表示用の部品「maintprod_subject」を定義します。
定義ファイルは、定義本体、HTML レンダリング用定義、Text レンダリング用定義、Fulltext (全文検索用) レンダリング用定義、の 4 つを用意します。
ここで作成するエントリーフィルードは、「エントリープロパティからデータを取り出して、表示する」という動作を行います。
定義本体
エントリーフィルードの全体的な定義ファイルの保存場所は config/entry/fields/props です。拡張子は .properties です。
maintprod_subject.properties ファイルを作成し、次の内容をコピー&ペーストしてください。
# エントリープロパティとして保存されているデータを取り出す
class=com.traction.sdk.token.EntryPropertyEntryField
# 部品の名前
display_name=Subject
# フィルター(絞り込み)として利用できるようにするか
filter_selectable=true
# フィルターとして利用する場合のグループ名と順番
filter_group=maintprod
filter_order=5000
HTML レンダリング用の定義
エントリーフィールドの値を HTML として出力(レンダリング)するための定義ファイルの保存場所は config/entry/fields/html です。拡張子は .properties です。
maintprod_subject.properties ファイルを作成し、次の内容をコピー&ペーストしてください。
# 「com」フォルダの下の、 「traction」フォルダの下の、
# 「sdl」フォルダの下の、 「fields」フォルダの下の、
# 「html.sdl」ファイルの中の、「entry-property-value」関数を使う
sdl=com.traction.sdl.fields.html#entry-property-value
内容は sdl=
行だけです。
値の com.traction.sdl.fields.html#entry-property-value
は、com/traction/sdl/fields フォルダにある html.sdl ファイルの中の「entry-property-value」関数を使って表示(レンダリング)しなさい、という意味です。
TeamPage がインストールされた server フォルダに src フォルダがあり、その下に com/traction/sdl/fields フォルダがあります。その中に html.sdl があります。
そのファイルの中に、次のような「entry-property-value」関数(や関連する関数)があります。
<sdl.function name="entry-property-value">
<variable.default name="none" value="-" />
<#generic-multi />
</sdl.function>
<sdl.function name="generic-multi">
<entry.field.values max="<variable.value name='maxValues' default='-1' />">
<loop.none>
<#styled-none />
</loop.none>
<loop.first>
<span class="value">
</loop.first>
<#generic-multi-value />
<loop.last>
</span>
<else>
<variable.value name="separator" default=", " />
</loop.last>
</entry.field.values>
</sdl.function>
<sdl.function name="generic-multi-value">
<variable.local.set name="url" value="__entry.field.value.url__" />
<variable.local.whitespace name="url" not>
<a href="${url}">
</variable.local.whitespace>
__entry.field.value.displayvalue__
<variable.local.whitespace name="url" not>
</a>
</variable.local.whitespace>
</sdl.function>
Text レンダリング用の定義
エントリーフィールドの値をテキストとして出力(レンダリング)するための定義ファイルの保存場所は config/entry/fields/text です。拡張子は .properties です。
maintprod_subject.properties ファイルを作成し、次の内容をコピー&ペーストしてください。
# 「com」フォルダの下の、 「traction」フォルダの下の、
# 「sdl」フォルダの下の、 「fields」フォルダの下の、
# 「text.sdl」ファイルの中の、「entry-property-value」関数を使う
sdl=com.traction.sdl.fields.text#entry-property-value
Fulltext (全文検索用) レンダリング用の定義
エントリーフィールドの値を検索エンジン用の全文テキストとして出力(レンダリング)するための定義ファイルの保存場所は config/entry/fields/fulltext です。拡張子は .properties です。
maintprod_subject.properties ファイルを作成し、次の内容をコピー&ペーストしてください。
# NullRendererを指定し、何も出力(レンダリング)しない
class=com.traction.sdk.token.NullRenderer
NullRenderer を指定しているので、検索エンジン用のフルテキスト出力は「何もしない」ということになります。