2007年10月12日(金曜日)

ちょっと邪道なuserモジュール改造

カテゴリー: - Ryuji @ 18時39分57秒

XOOPS Cubeのユーザ管理画面でユーザ登録するときに、メールアドレスの必須チェックを外したかったので、少々邪道な方法でやってみました。

まず、ユーザ登録画面のアクションを継承して、UserEditCustomアクションを作成します。

/modules/user/admin/actions/UserEditCustomAction.class.php


<?php

if (!defined('XOOPS_ROOT_PATH')) exit(); require_once XOOPS_MODULE_PATH .'/user/admin/actions/UserEditAction.class.php';

class User_UserEditCustomAction extends User_UserEditAction {

} ?>

この状態で、
XOOPS_URL/modules/user/admin/index.php?action=UserEditCustom
にアクセスすると、XOOPS Cubeのユーザ追加画面と同じ画面が表示されます。

メールアドレスのチェックなど、入力項目のチェックは、ActionFormで行われているので、こちらも継承したActionFormを作成します。
今回は、別ファイルにするのも面倒だったので、先ほどのUserEditCustomAction.class.phpに書き足しました。


class User_UserAdminEditCustomForm extends User_UserAdminEditForm
{
}

この作成したActionFormを使うように、UserEditCustomアクションを修正します。


class User_UserEditCustomAction extends User_UserEditAction
{
	function _setupActionForm()
	{
		$this->mActionForm =& new User_UserAdminEditCustomForm();
		$this->mActionForm->prepare();
	}
}

これで改造の下準備ができました。

では、メールアドレスの必須チェックを外します。
ActionFormのprepareでvalidatorを登録しているので、prepareでメールアドレスの必須チェックをしている箇所だけ修正します。


class User_UserAdminEditCustomForm extends User_UserAdminEditForm
{
	function prepare()
	{
	    parent::prepare();

// emailの必須チェック外した unset($this->mFieldProperties['email']); $this->mFieldProperties['email'] =& new XCube_FieldProperty($this); $this->mFieldProperties['email']->setDependsByArray(array( 'maxlength', 'email')); $this->mFieldProperties['email']->addMessage('maxlength', _MD_USER_ERROR_MAXLENGTH, _MD_USER_LANG_EMAIL, '60'); $this->mFieldProperties['email']->addVar('maxlength', 60); $this->mFieldProperties['email']->addMessage('email', _MD_USER_ERROR_EMAIL, _MD_USER_LANG_EMAIL); } }

親クラスで設定されてる$this->mFieldProperties[’email’]をunsetして、設定しなおすという強引なやり方です(^^;

というわけで、最終的な UserEditCustomAction.class.php は、下記のコードになりました。


<?php
if (!defined('XOOPS_ROOT_PATH')) exit();
require_once XOOPS_MODULE_PATH .'/user/admin/actions/UserEditAction.class.php';

class User_UserEditCustomAction extends User_UserEditAction { function _setupActionForm() { $this->mActionForm =& new User_UserAdminEditCustomForm(); $this->mActionForm->prepare(); }

}

class User_UserAdminEditCustomForm extends User_UserAdminEditForm { function prepare() { parent::prepare();

// emailの必須チェック外した unset($this->mFieldProperties['email']); $this->mFieldProperties['email'] =& new XCube_FieldProperty($this); $this->mFieldProperties['email']->setDependsByArray(array( 'maxlength', 'email')); $this->mFieldProperties['email']->addMessage('maxlength', _MD_USER_ERROR_MAXLENGTH, _MD_USER_LANG_EMAIL, '60'); $this->mFieldProperties['email']->addVar('maxlength', 60); $this->mFieldProperties['email']->addMessage('email', _MD_USER_ERROR_EMAIL, _MD_USER_LANG_EMAIL); } } ?>

あとは、mod_rewriteで
XOOPS_URL/modules/user/admin/index.php?action=UserEdit へのアクセスを
XOOPS_URL/modules/user/admin/index.php?action=UserEditCustom へリダイレクトさせればOKです。

今回は、実験的にpreloadファイルつくってみました(^^;
/modules/user/admin/preload/RedirectAdminUserEdit2AdminUserEditCustom.class.php


<?php
class User_RedirectAdminUserEdit2AdminUserEditCustom extends XCube_ActionFilter
{
    function postFilter()
    {
        if(is_object($this->mRoot->mContext->mXoopsModule)){
            if($this->mRoot->mContext->mXoopsModule->get('dirname') == 'user'){
                $action = xoops_getrequest('action');
                if($action=='UserEdit'){
                    $url= 'index.php?action=UserEditCustom';
                    $uid = intval(xoops_getrequest('uid'));
                    if($uid){
                        $url .='&uid='.$uid;
                    }
                    $this->mController->executeForward($url);
                }
            }
        }
    }
}
?>

かなり邪道なやり方だとは思いますが、XOOPS Cubeだと、配布ファイルを編集せず、かつ自前のコードは最小限にして、こういうこともできるというところが、気に入っています。


RSS feed for comments on this post.

ƤˤϡޤȤդƤޤ

Ȥ

ʤߥȤդ뤳ȤϽޤ

10 queries. 0.014 sec.
Powered by WordPress Module based on WordPress ME & WordPress

〒104-0061 東京都中央区銀座1丁目3番3号 G1ビル7階
お問い合わせ TEL 03-3524-8860

Copyright(c) 2012 RYUS.All Rights Reserved.