フォームのエラー表示とテンプレートの役割分担 - PHPプロ!Q&A掲示板

2351

  • 0P

フォームのエラー表示とテンプレートの役割分担

質問日時 / 2009年11月14日 20:37 (最終編集:11月14日 20:39)    回答数 / 4件

Questioner:  kounosuke  このエントリーをはてなブックマークに追加 

キーワード / Smarty    フォーム    MVC   

下記のように、フォームでエラーがあればp要素を表示、なければ何も表示しない場合、 
みなさんは、どこまで、どんな方法でテンプレートを利用していますか? 
  1. <p class="error">※必須項目です。記入してください。</p> 
  2. <p><input type="text" name="mail" value=""></p>

1. エラーメッセージは最初からpでマークアップ済み、そのままassign、smartyには{}のみ 
  1. {$errors.mail}

2. エラーメッセージはテキスト、assign時に空かどうか判定してpでマークアップ、smartyには{}のみ 
  1. {$errors.mail}

3. エラーメッセージはテキスト、そのままassign、smartyで{if}処理 
  1. {if $errors.mail}<p class="error">{$errors.mail}</p>{/if}

4. エラーメッセージはテキスト、そのままassign、smartyで関数処理 
  1. {$errors.mail|markupFunction}

デザイナさんと分業する場合、 
プログラム側がマークアップに関わらない3.が一番いい気がしているのですが、 
少しテンプレートファイルが煩雑になるのが気になったりもします。 

デザイナさんもいじれるエラーメッセージマークアップ用の小さなテンプレートファイルを用意して、 
4.のmarkupFunctionから読み出して利用すると比較的キレイな気もしますが、 
テンプレートファイルが小分けになるのも煩雑といえば煩雑な気もします。

この質問への意見の募集は締め切られ、ポイントは既に配分されました。
意見を投稿することはできますが、ポイントを受け取ることはできません。



ツリー一覧

┗A01galluがると申します。 普段、Smartyではなくて違うテンプ
 ┗A01-1kounosukeありがとうございます。なるほど。 しかしその場合
  ┗A01-1-1galluがるです。 丁重な表示の場合、私ですと ・エラーで
   ┗A01-1-1-1kounosuke反応が遅くなってすみません。 なるほど。 素直か

回答一覧

並び替え:

A01
answerergallu [11月16日 13:17]

がると申します。
普段、Smartyではなくて違うテンプレートエンジンを使ってるので、という状況ではあるのですが。
Smartyっぽく書くのであれば、私は

  1. {if true === $errors.mail}<p class="error">エラーですとかなんとか</p>{/if}

という風にかいています。
私の自作のテンプレートエンジンの書式ですと

  1. $$$if_error_mail_must$$$<p class="error">エラーですとかなんとか</p>$$$/if_error_mail_must$$$
って感じですね。
これですと、メッセージは自由にデザイナさんたちで書き直してもらえますし。
ソースコードにタグの類も混入してこないので、デザイン的にも「好き勝手いじれる」ので。

この意見に回答する

ツリーへ TOPへ

A01-1
replyerkounosuke [11月16日 15:17]

ありがとうございます。なるほど。

しかしその場合、エラー時のテキストが「入力内容をご確認ください」程度ならいいけど、 
「メールアドレスが正しくありません」 
「必須入力項目です」 
「文字数が多すぎます」 
とか丁寧に表示してあげる場合に対応しにくい気がします。 
いやまあ何行も書けばいいのですが、フォームに項目が多いと煩雑かなぁと。

ところで、当初の主旨からちょっとずれてしまいますが、
本件の「マークアップをどこに担わせるのがよいか」の問題と同様に、
「エラーメッセージの中身をどこに担わせるのがよいか」という問題も興味深いところです。

すべてのシステムには不要だと思いますが、やはり国際化を視野に入れて、
ナビゲーションラベルなどと共に、ひとつのファイルにまとめるのが究極の形なのでしょうか。
(そしてそのファイルをデザイナさんがいじれるようにしておく?デザイナさん大変かな?)

この意見に回答する

ツリーへ TOPへ

A01-1-1 満足
replyergallu [11月17日 13:49]

がるです。
丁重な表示の場合、私ですと
・エラーである事の表示
・エラーの内容が「必須項目の未入力」である場合の表示
・エラーの内容が「文字長のmaxを超えている」場合の表示
などで全部分けて、各行書いています。
何をもって「煩雑」と考えるかにもよると思うのですが。上述のほうが、後々の変更を含め、対応/変更が容易ですので。

多言語化は、私の場合「テンプレートごと変更する」事が多いです(各言語ごとにテンプレートをディレクトリで切って分ける)。
単純に「言葉だけを変更する」のであればまだ別のやり方もあるのでしょうが。真摯に「他言語化」を考えた場合、デザインレイアウトや色調その他も、相応に異なってくる事が多いですので。

この意見に回答する

ツリーへ TOPへ

A01-1-1-1
replyerkounosuke [11月26日 00:42]

反応が遅くなってすみません。

なるほど。
素直かつシンプルな解決策で衝撃的でした。

ただその場合、「どんな種類のエラーが発生しうるか」を
あらかじめデザイナさんと共有する(または最初に全部書き出したテンプレを作って渡す)必要があるのと、
エラーの追加(必須項目に変更されたなど)への対応でひと手間増えるかなと。
一長一短という印象です。

また、多言語化についての「テンプレートごと変更する」方法も、
そちらのほうがより一層「究極」をつきつめた形ですね。
確かに、パッと見で「いかにも国際化対応しただけ」のサイトはなじみにくいです。


このような考察は楽しいです。
ありがとうございます。

この意見に回答する

ツリーへ TOPへ

<<質問一覧へ



Pick Up Q&A

Q
array_mergeの再帰処理の動作について
 このエントリーをはてなブックマークに追加 
A
>1個になったとき$leftを返しますが、 >このとき、最終的な$leftはnullになるかと思います。 いいえ、最後は「渡された配列をそのまま」返します。要素が2以上あるときとの違いは(並べ替えずに戻るので...

>>続きを読む

再帰関数は最初の内は混乱しますが、非常に上手く使える場面もいずれ出てきます。これを機会に学んでいけるといいですね。

▲解説者:岡本(アシアル株式会社 教育コーディネーター兼 システムエンジニア)