Xslateでハマった
うまくエラーが表示できない
Xlateでエラーメッセージを表示させるとき表示方法ではまったのでメモ。
下記のような入力フォームがあった時に
<input type="input" name="tel1">-<input type="input" name="tel2">-<input type="input" name="tel3">
- どれも入力されて無いとき
- tel1だけ入力されてるとき
- tel1,3が入力されてないとき
などなど...
どんなエラーがある場合でもエラーメッセージを1つのみ表示させい。
なので下記のようなコードをテンプレートファイルに書いた。
[% IF form.get_error_messages_from_param('tel1') %] [% FOR msg IN form.get_error_messages_from_param('tel1') %] <div class="alert"> <p class="balloon"><img src="/v2/img/school/manavo/subscribe/balloon_alert.png" width="276" height="25"/></p> <p class="message">[% msg %]</p> </div> [% END %] [% ELSIF form.get_error_messages_from_param('tel2') %] [% FOR msg IN form.get_error_messages_from_param('tel2') %] <div class="alert"> <p class="balloon"><img src="/v2/img/school/manavo/subscribe/balloon_alert.png" width="276" height="25"/></p> <p class="message">[% msg %]</p> </div> [% END %] [% ELSIF form.get_error_messages_from_param('tel3') %] [% FOR msg IN form.get_error_messages_from_param('tel3') %] <div class="alert"> <p class="balloon"><img src="/v2/img/school/manavo/subscribe/balloon_alert.png" width="276" height="25"/></p> <p class="message">[% msg %]</p> </div> [% END %] [% ELSE %] [% END %]
しかし
上記だとtel1にエラーが起きる場合はエラーメッセージが表示されるのに対して、
tel1に入力があり、tel2,3が未入力でもエラーメッセージがでない...
先輩に質問したら
form.get_error_messages_from_param('tel1')
は配列だから配列のサイズが1以上の時にエラーが出るようにしたいいのでは?
と言われで直してみた
[% IF form.get_error_messages_from_param('tel1').size > 0 %] [% FOR msg IN form.get_error_messages_from_param('tel1') %] <div class="alert"> <p class="balloon"><img src="/v2/img/school/manavo/subscribe/balloon_alert.png" width="276" height="25"/></p> <p class="message">[% msg %]</p> </div> [% END %] [% ELSIF form.get_error_messages_from_param('tel2').size > 0 %] [% FOR msg IN form.get_error_messages_from_param('tel2') %] <div class="alert"> <p class="balloon"><img src="/v2/img/school/manavo/subscribe/balloon_alert.png" width="276" height="25"/></p> <p class="message">[% msg %]</p> </div> [% END %] [% ELSIF form.get_error_messages_from_param('tel3').size > 0 %] [% FOR msg IN form.get_error_messages_from_param('tel3') %] <div class="alert"> <p class="balloon"><img src="/v2/img/school/manavo/subscribe/balloon_alert.png" width="276" height="25"/></p> <p class="message">[% msg %]</p> </div> [% END %] [% ELSE %] [% END %]
....あれれ(汗
エラーが出なくてなってしまった。
んー。 配列のサイズの取得が上手くいってないみたい。
調べたらXslateで配列のサイズを取得するには
Array.size()
と()がいるのが原因だった。
[% IF form.get_error_messages_from_param('tel1').size() > 0 %] [% FOR msg IN form.get_error_messages_from_param('tel1') %] <div class="alert"> <p class="balloon"><img src="/v2/img/school/manavo/subscribe/balloon_alert.png" width="276" height="25"/></p> <p class="message">[% msg %]</p> </div> [% END %] [% ELSIF form.get_error_messages_from_param('tel2').size() > 0 %] [% FOR msg IN form.get_error_messages_from_param('tel2') %] <div class="alert"> <p class="balloon"><img src="/v2/img/school/manavo/subscribe/balloon_alert.png" width="276" height="25"/></p> <p class="message">[% msg %]</p> </div> [% END %] [% ELSIF form.get_error_messages_from_param('tel3').size() > 0 %] [% FOR msg IN form.get_error_messages_from_param('tel3') %] <div class="alert"> <p class="balloon"><img src="/v2/img/school/manavo/subscribe/balloon_alert.png" width="276" height="25"/></p> <p class="message">[% msg %]</p> </div> [% END %] [% ELSE %] [% END %]
解決!!
そういえば、はてなブログで templateファイルの指定ってできないのかな....
(んー... 言語、ライブラリによって配列のサイズが取得が違うから混乱する...)