ブログ - ユーザー登録画面のカスタマイズ (Preload版) おまけ
(その2から続いています)
■バリデーションの順番を制御したい...
さて、その2までで無事カスタマイズできたわけだが、ちょっと気になることがひとつ。
それは、required チェックの順番の問題。
■バリデーションの順番を制御したい...
さて、その2までで無事カスタマイズできたわけだが、ちょっと気になることがひとつ。
それは、required チェックの順番の問題。
_
継承したクラスで name を追加したわけだが、name は最後に追加されたので validation も最後に行われ、エラーメッセージは最後に表示されてしまう。
これはちょっと気持ちが悪い。というかわかりにくい。
というわけで少し工夫をしてみる。
上の例では name は2番目のフィールド (idx = 1) として扱われる。
このように、name を作るときに $this->insertFromProperty() を使って、任意の位置に挿入することで、validation の順序を制御することができる。
■項目を削除したい
通常の項目はテンプレートで表示しないようにすればOKだが、Required になっている項目 (たとえば timezone_offset など)は、そのままではエラーチェックに引っかかってしまう。
こういう場合は
としてしまう。
継承したクラスで name を追加したわけだが、name は最後に追加されたので validation も最後に行われ、エラーメッセージは最後に表示されてしまう。
これはちょっと気持ちが悪い。というかわかりにくい。
というわけで少し工夫をしてみる。
class User_RegisterEditFormEx extends User_RegisterAgreeEditForm {
function insertFormProperty($idx, $name, &$obj) {
$this->mFormProperties = array_merge(
array_slice($this->mFormProperties, 0, $idx),
array($name => $obj), array_slice($this->mFormProperties, $idx));
}
function prepare() {
parent::prepare();
$obj =& new XCube_StringProperty('name');
$this->insertFormProperty(1, "name", $obj);
$this->mFieldProperties['name'] =& new XCube_FieldProperty($this);
$this->mFieldProperties['name']->setDependsByArray(array('required', 'maxlength'));
$this->mFieldProperties['name']->addMessage("required", _MD_USER_ERROR_REQUIRED, _MD_USER_LANG_NAME, "60");
$this->mFieldProperties['name']->addMessage("maxlength", _MD_USER_ERROR_MAXLENGTH, _MD_USER_LANG_NAME, "60");
$this->mFieldProperties['name']->addVar("maxlength", 60);
上の例では name は2番目のフィールド (idx = 1) として扱われる。
このように、name を作るときに $this->insertFromProperty() を使って、任意の位置に挿入することで、validation の順序を制御することができる。
■項目を削除したい
通常の項目はテンプレートで表示しないようにすればOKだが、Required になっている項目 (たとえば timezone_offset など)は、そのままではエラーチェックに引っかかってしまう。
こういう場合は
unset($this->mFieldProperties['timezone_offset']);
としてしまう。