入力値のバリデーションと自動置換
フィールドに入力された値のバリデーションや自動置換を行う機能があります。
「入力値チェック」の欄にテンプレートタグを記述
バリデーションおよび自動置換を行うには、対象のカスタムフィールドの設定ページを開き、「入力値チェック」の欄にその記述を行います。
バリデーション/自動置換は、以下のテンプレートタグや、当プラグインのその他のテンプレートタグ、またMovable Type標準のテンプレートタグを組み合わせて行います。
バリデーション/自動置換で使うテンプレートタグ
テンプレートタグ | 概要 |
MTFLCFValidate | バリデーション/自動置換の部分全体を囲むブロックタグ |
MTFLCFValidateError | バリデーションでエラーがある場合に、エラーメッセージを設定 |
MTFLCFSetValue | 入力値の置換 |
バリデーションの基本的な書き方
入力値のバリデーションを行う場合、対象のカスタムフィールドの「入力値チェック」の欄に、以下のようなテンプレートを記述します。MTIfタグを使ってフィールドの値を判断し、エラーであればMTFLCFValidateErrorタグで表示したいエラーメッセージを設定します。また、判断する条件によっては、MTIfタグではなくMTUnlessタグを使うこともできます。
なお、フィールドの組み合わせやユニットを複数追加できるようにしている場合は、MTFLCFValidateタグのブロックはその回数分繰り返し実行されます。
バリデーションの基本的な書き方
<mt:FLCFValidate>
<mt:If tag="FLCFValue" field="フィールド名" 比較用モディファイア="エラー値">
<mt:FLCFValidateError>エラーメッセージ</mt:FLCFValidateError>
</mt:If>
<mt:If tag="FLCFValue" field="フィールド名" 比較用モディファイア="エラー値">
<mt:FLCFValidateError>エラーメッセージ</mt:FLCFValidateError>
</mt:If>
・・・
</mt:FLCFValidate>
例えば、以下のような例を考えてみます。
①あるフリーレイアウト型のカスタムフィールドに、名前が「count」で、ラベルが「個数」のフィールドを作ります。
②①のフィールドには1以上の整数値のみ入力できるようにします。
③①のフィールドに、②の条件に合わない値が入力されたときには「○○カスタムフィールドの個数フィールドには1以上の整数値を入力してください」というエラーメッセージを表示します(「○○」はカスタムフィールドにつけた名前)。
バリデーションの例
この場合、このカスタムフィールドの「入力値チェック」の欄に、以下のテンプレートを入力します。
バリデーションを行うテンプレート
<mt:FLCFValidate>
<mt:Unless tag="FLCFValue" field="count" like="^\d+$">
<$mt:SetVar name="error" value="1"$>
<mt:Else>
<mt:If tag="FLCFValue" field="count" lt="1">
<$mt:SetVar name="error" value="1"$>
</mt:If>
</mt:Unless>
<mt:If name="error" eq="1">
<mt:FLCFValidateError><$mt:CustomFieldName$>カスタムフィールドの個数フィールドには1以上の整数を入力してください。</mt:FLCFValidateError>
</mt:If>
</mt:FLCFValidate>
この例では、「入力された文字列が数値であり、なおかつ1以上」という条件を満たすかどうかで、エラーかどうかを判断します。テンプレートの内容は、以下の通りです。
①2行目
MTUnlessタグで、countフィールドの値が数値かどうかを判断します。「like="^¥d+$"」は、正規表現を使って、値が数値のみであることを判断する書き方です。
②3行目
2行目の条件を満たさない場合は3行目に進み、「error」という変数の値を1にします。
③5行目
入力された文字列が数値が1より小さければ条件に合わないので、その条件を判断します。
④6行目
5行目の条件を満たす場合は6行目に進み、「error」という変数の値を1にします。
⑤9行目
ここまでの処理で、「入力された文字列が数値であり、なおかつ1以上」の条件を満たしていないときには、変数errorの値が1になっていますので、そのことを判断します。
⑥10行目
9行目の条件を満たす場合は、「○○カスタムフィールドの個数フィールドには1以上の整数を入力してください。」のエラーメッセージを設定します。なお、カスタムフィールドの名前は、Movable Type標準のMTCustomFieldNameタグで出力します。
入力値の置換
「入力された値に全角英数字が含まれる場合、それを自動的に半角英数字に置換したい」など、入力値を自動的に置換したい場面もあります。このような場合は、「MTFLCFSetValue」というテンプレートタグを使って、入力値を置換することができます。
入力値を自動置換する場合、対象のカスタムフィールドの「入力値チェック」の欄に、以下のようなテンプレートを記述します。MTFLCFSetValueタグのfieldモディファイアで、対象のフィールドを指定します。また、このタグのブロック内に、置換後の値を生成するテンプレートタグ等を記述します。
入力値の置換を行う場合のテンプレートの書き方
<mt:FLCFValidate>
<mt:FLCFSetValue field="フィールド名">置換後の値を生成するテンプレートタグ等</mt:FLCFSetValue>
<mt:FLCFSetValue field="フィールド名">置換後の値を生成するテンプレートタグ等</mt:FLCFSetValue>
・・・
</mt:FLCFValidate>
なお、「半角英数字を全角に変換」など、文字種の変更を行いたい場合は、「ConvertHanZen」というプラグインをご利用ください。ConvertHanZenプラグインについては、こちらのページをご参照ください。
例えば、バリデーションの基本的な書き方でご紹介したバリデーションの例で、数値が全角文字で入力されたときに、それを半角に置換してからバリデーションしたいとします。この場合、ConvertHanZenプラグインをインストールした上で、バリデーションを行うテンプレートのリストの1行目と2行目の間に、以下のテンプレートタグを追加します。
<mt:FLCFSetValue field="count"><$mt:FLCFRawValue field="count" conv_hz="n"$></mt:FLCFSetValue>
この例では、countフィールドの生の値(MTFLCFRawValueタグ)に含まれる数字を半角に変換した後、countフィールドに代入しなおすという処理を行っています。
なお、この例のように、置換する対象はMTFLCFRawValueタグで表し、フィールドの生の値を置換するようにします(MTFLCFValueタグだと、フィールドの型によっては値が調整されることがあり、正しい置換にならないため)。