• カテゴリ Customize/Hackメモ の最新配信
  • RSS
  • RDF
  • ATOM

ブログ - ユーザー登録画面のカスタマイズ (Preload版) おまけ

ユーザー登録画面のカスタマイズ (Preload版) おまけ

カテゴリ : 
Customize/Hackメモ » お決まりのパターン
執筆 : 
masa 2008/9/21
(その2から続いています)
■バリデーションの順番を制御したい...

さて、その2までで無事カスタマイズできたわけだが、ちょっと気になることがひとつ。
それは、required チェックの順番の問題。
_
継承したクラスで 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']);

としてしまう。
  • トラックバック (0)
  • 閲覧 (3922)