2012-04-05 71 views
0

我已经创建了一个简单的“创建一个帐户”的形式在html中与一些java的interspire绑定为双选择加入方法。我还希望这个表单在Joomla中创建用户,并在点击创建帐户按钮后登录。Joomla 2.5新的注册用户PHP脚本与dbl选择在java

双选择工作正常,但新的joomla 2.5用户脚本不起作用,没有错误,但它只是不注册用户。我试过把stackoverflow上的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(); 

回答

2

我想你正试图创建一个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.请检查#_ 用户(用户详细信息),# _book_user_usergroup_map(图组ID和用户ID),#__usergroups表保存登记

+0

一个小的修复后受着组键的表中,否则“不要阻塞用户“应该是$ data ['block'] = 0 – Maksee 2012-04-26 10:54:39

+0

”设置激活散列(不要忘记发送激活电子邮件)“ **您如何在代码中发送激活电子邮件?** – dawoodman71 2016-06-06 14:19:35