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

ユーザー登録画面のカスタマイズ (Preload版) その2

カテゴリ : 
Customize/Hackメモ » お決まりのパターン
執筆 : 
masa 2008/9/20
(これはその1からの続きです)

フックできるようになったので、アクションの差分を作っていく。

まずは登録アクション。
_
actions/UserRegisterActionEx.class.php


<?php

if (!defined('XOOPS_ROOT_PATH')) exit();

require_once XOOPS_MODULE_PATH . "/user/actions/UserRegisterAction.class.php";
require_once dirname(dirname(__FILE__)) . "/forms/UserRegisterEditFormEx.class.php";

class User_UserRegisterActionEx extends User_UserRegisterAction {
	function _processActionForm() {
		if ($this->mConfig['reg_dispdsclmr'] != 0 && $this->mConfig['reg_disclaimer'] != null) {
			$this->mEnableAgreeFlag = true;
		}
		$this->mActionForm =& new User_RegisterEditFormEx($this->mConfig);
		
		$this->mActionForm->prepare();
		
		$root =& XCube_Root::getSingleton();
		$this->mActionForm->set('timezone_offset', $root->mContext->getXoopsConfig('default_TZ'));
	}
}

?>


さらに確認アクションを追加。
actions/UserRegister_confirmActionEx.class.php


<?php

if (!defined('XOOPS_ROOT_PATH')) exit();

require_once XOOPS_MODULE_PATH . "/user/actions/UserRegister_confirmAction.class.php";
//require_once dirname(dirname(__FILE__)) . "/forms/UserConfirmFormEx.class.php";

// for unserialize editform from session
require_once dirname(dirname(__FILE__)) . "/forms/UserRegisterEditFormEx.class.php";

class User_UserRegister_confirmActionEx extends User_UserRegister_confirmAction {
}


こちらは何もオーバーライドしていないが、forms/UserRegisterEditFormEx.class.php を読み込むために必要。


ここまではすべてActionForm を変更するための仕掛け...

ようやく本体のActionForm に手を入れる。
forms/UserRegisterEditFormEx.class.php


<?php

if (!defined('XOOPS_ROOT_PATH')) exit();

require_once XOOPS_MODULE_PATH . "/user/forms/UserRegisterEditForm.class.php";

class User_RegisterEditFormEx extends User_RegisterAgreeEditForm {
	function prepare() {
		parent::prepare();

    $this->mFormProperties['name'] =& new XCube_StringProperty('name');

    $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);

	}

	function load(&$obj) {
		parent::load($obj);
	}

	function update(&$obj) {
		parent::update($obj);
		$obj->set('name', $this->get('name'));
	}
}

?>

(注)これは、利用許諾あり版。利用許諾が必要ない場合は

class User_RegisterEditFormEx extends User_RegisterEditForm {

とする。

これで完成!
あとはテンプレートを修正するだけ。
これは管理画面から行えるので省略。


Hack すれば、たかだか数行を追加すればよいだけなのだが、4ファイルを要した。
しかし項目の追加だけならこのパターンで、forms/UserRegisterEditFormEx.class.php を書き換えて、テンプレートを修正するだけでできるようになったので、それなりにメリットはあるかな。

何より、バージョンアップ時に誤って上書きして消してしまうことがなくなるのは精神衛生上はとても良い。
(とはいえバージョンアップして必ず動くとは限らないので入念な動作チェックは必要...)
  • トラックバック (0)
  • 閲覧 (4057)