我已经在html中创建了一个简单的“创建一个帐户”表单,它与一些java连接在一起,用于双选择的方法。我还希望这个表单在Joomla中创建用户,并在单击create按钮后将其登录。
双重选择很好,但Joomla2.5的新用户脚本不工作,没有错误,但它只是没有注册用户。我尝试过将php脚本(见下文)放置在堆栈溢出上,以生成一个新用户,但它不起作用。
是否可以将这两种类型的脚本一起运行在一个表单上?如果是的话,我哪里出错了?谢谢!
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();发布于 2012-04-16 12:01:00
我认为您正在尝试创建一个API,以便在Joomla中注册来自不同环境的用户。您的代码在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/>';
?>P.S.请查看#_users(用户详细信息)、#_book_user_usergroup_map(映射组id和用户id),#__usergroups表保存在注册
后受影响的组键表
https://stackoverflow.com/questions/10035826
复制相似问题