0

私は単純な「アカウントの作成」フォームを html で作成しました。このフォームは、ダブル オプトイン メソッドのために Java と連携するように結び付けられています。また、このフォームで Joomla にユーザーを作成し、[アカウントの作成] ボタンをクリックした後にログインさせたいと思います。

ダブルオプトインは正常に機能しますが、joomla 2.5 の新しいユーザースクリプトは機能せず、エラーはありませんが、ユーザーを登録しません。新しいユーザーを生成するために、stackoverflow にある php スクリプト (以下を参照) を配置しようとしましたが、うまくいきません。

これら 2 種類のスクリプトを 1 つのフォームで一緒に実行することはできますか? もしそうなら、どこが間違っていますか?ありがとう!

 require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );

$mainframe =& JFactory::getApplication('site');
$mainframe->initialise();

//Check for request forgeries, we comment this out since tokens are not generated in the html page
//JRequest::checkToken() or jexit( 'Invalid Token' );

//Get required system objects

$user         = clone(JFactory::getUser());
$pathway          = & $mainframe->getPathway();
$config       = & JFactory::getConfig();
$authorize        = & JFactory::getACL();
$document       = & JFactory::getDocument();

//If user registration is not allowed, show 403 not authorized(Not needed)

$usersConfig = &JComponentHelper::getParams( 'com_users' );
if ($usersConfig->get('allowUserRegistration') == '0')
    {
        JError::raiseError( 403, JText::_( 'Access Forbidden' ));
        return;
    }

//Initialize new usertype setting

$newUsertype = $usersConfig->get( 'new_usertype' );
if (!$newUsertype)
    {
        $newUsertype = 'Registered';
    }

//Bind the post array to the user object
if (!$user->bind( JRequest::get('post'), 'usertype' ))
    {
        JError::raiseError( 500, $user->getError());
    }

//Set some initial user values

$user->set('id', 0);
$user->set('usertype', '');
$user->set('gid', $authorize->get_group_id( '', $newUsertype, 'ARO' ));

$date =& JFactory::getDate();
$user->set('registerDate', $date->toMySQL());

//If user activation is turned on, we need to set the activation information(Not needed)

$useractivation = $usersConfig->get( 'useractivation' );
if ($useractivation == '1')
    {
        jimport('joomla.user.helper');
        $user->set('activation', md5( JUserHelper::genRandomPassword()) );
        $user->set('block', '1');
    }

//Save the details of the user

$user->save();
4

1 に答える 1

2

別の環境から Joomla にユーザーを登録するための API を作成しようとしていると思います。あなたのコードは Joomla 1.5/1.6 では正常に動作しますが、1.7 以降では動作しません...以下のスニペットは私にとってはうまくいきましたが、わずかに変更されたものです。

<?php
/*
 * Created on 13-Apr-12
 *
 * To change the template for this generated file go to
 * Window - Preferences - PHPeclipse - PHP - Code Templates
 */
 /*
  * loading Joomla environment
  */
define( '_JEXEC', 1 );
$JUnit_home = $_SERVER['SCRIPT_FILENAME'];
//define('JPATH_BASE', dirname(__FILE__) );//this is when we are in the root


define( 'DS', DIRECTORY_SEPARATOR );

require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );

function register_user ($email, $password){

$firstname = $email; // generate $firstname
$lastname = ''; // generate $lastname
$username = $email; // username is the same as email


/*
I handle this code as if it is a snippet of a method or function!!

First set up some variables/objects     */


//$acl =& JFactory::getACL(); Acl will work only in Joomla1.5/1.6       

/* get the com_user params */
$mainframe =& JFactory::getApplication('site');
$mainframe->initialise();

$usersParams = &JComponentHelper::getParams( 'com_users' ); // load the Params

// "generate" a new JUser Object
$user = JFactory::getUser(0); // it's important to set the "0" otherwise your admin user information will be loaded

$data = array(); // array for all user settings


//original logic of name creation
//$data['name'] = $firstname.' '.$lastname; // add first- and lastname
$data['name'] = $firstname.$lastname; // add first- and lastname

$data['username'] = $username; // add username
$data['email'] = $email; // add email
//there's no gid field in #__users table from Joomla_1.7/2.5

$usertype = 'Registered';//this is not necessary!!!
jimport('joomla.application.component.helper');
/* this part of the snippet from here: /plugins/user/joomla/joomla.php*/
$config = JComponentHelper::getParams('com_users');
    // Default to Registered.
$defaultUserGroup = $config->get('new_usertype', 2);
//default to defaultUserGroup i.e.,Registered
$data['groups']=array($defaultUserGroup);
$data['password'] = $password; // set the password
$data['password2'] = $password; // confirm the password
$data['sendEmail'] = 1; // should the user receive system mails?

/* Now we can decide, if the user will need an activation */

 $useractivation = $usersParams->get( 'useractivation' ); // in this example, we load the config-setting
 //echo $useractivation;exit();
 if ($useractivation == 1) { // yeah we want an activation

 jimport('joomla.user.helper'); // include libraries/user/helper.php
 $data['block'] = 1; // block the User
 $data['activation'] =JUtility::getHash( JUserHelper::genRandomPassword() ); // set activation hash (don't forget to send an activation email)

}
else { // no we need no activation

 $data['block'] = 1; // don't block the user

}

if (!$user->bind($data)) { // now bind the data to the JUser Object, if it not works....
 JError::raiseWarning('', JText::_( $user->getError())); // ...raise an Warning
    return false; // if you're in a method/function return false

}

if (!$user->save()) { // if the user is NOT saved...
 JError::raiseWarning('', JText::_( $user->getError())); // ...raise an Warning

 return false; // if you're in a method/function return false

}

return $user; // else return the new JUser object

}

$email = JRequest::getVar('email');
$password = JRequest::getVar('password');

//echo 'User registration...'.'<br/>';
if(!register_user($email, $password))
{
$data['status']="failure";
echo json_encode($data);
}
else
{
$data['status']="success";
echo json_encode($data);
}
 //echo '<br/>'.'User registration is completed'.'<br/>';
?>

PS 確認してください #_ users(user details), # _book_user_usergroup_map(maps group id and user id), #__usergroups table has group keys テーブルは登録後に影響を受けます

于 2012-04-16T12:01:00.050 に答える