Другим разумным способом было бы использовать метод класса /component/com_users/models/registration.php, называемый register, поскольку он действительно позаботится обо всем.
Сначала вы добавляете эти методы в свой вспомогательный класс
/**
* Get any component's model
**/
public static function getModel($name, $path = JPATH_COMPONENT_ADMINISTRATOR, $component = 'yourcomponentname')
{
// load some joomla helpers
JLoader::import('joomla.application.component.model');
// load the model file
JLoader::import( $name, $path . '/models' );
// return instance
return JModelLegacy::getInstance( $name, $component.'Model' );
}
/**
* Random Key
*
* @returns a string
**/
public static function randomkey($size)
{
$bag = "abcefghijknopqrstuwxyzABCDDEFGHIJKLLMMNOPQRSTUVVWXYZabcddefghijkllmmnopqrstuvvwxyzABCEFGHIJKNOPQRSTUWXYZ";
$key = array();
$bagsize = strlen($bag) - 1;
for ($i = 0; $i < $size; $i++)
{
$get = rand(0, $bagsize);
$key[] = $bag[$get];
}
return implode($key);
}
Затем вы добавляете следующий метод создания пользователя также к классу вспомогательных компонентов
/**
* Greate user and update given table
*/
public static function createUser($new)
{
// load the user component language files if there is an error
$lang = JFactory::getLanguage();
$extension = 'com_users';
$base_dir = JPATH_SITE;
$language_tag = 'en-GB';
$reload = true;
$lang->load($extension, $base_dir, $language_tag, $reload);
// load the user regestration model
$model = self::getModel('registration', JPATH_ROOT. '/components/com_users', 'Users');
// set password
$password = self::randomkey(8);
// linup new user data
$data = array(
'username' => $new['username'],
'name' => $new['name'],
'email1' => $new['email'],
'password1' => $password, // First password field
'password2' => $password, // Confirm password field
'block' => 0 );
// register the new user
$userId = $model->register($data);
// if user is created
if ($userId > 0)
{
return $userId;
}
return $model->getError();
}
Тогда в любом месте вашего компонента вы можете создать такого пользователя, как этот
// setup new user array
$newUser = array(
'username' => $validData['username'],
'name' => $validData['name'],
'email' => $validData['email']
);
$userId = yourcomponentnameHelper::createUser($newUser);
if (!is_int($userId))
{
$this->setMessage($userId, 'error');
}
Выполнение этого таким образом избавит вас от всех проблем, связанных с обработкой электронных писем, которые должны быть отправлены, поскольку при этом автоматически будут использоваться системные настройки по умолчанию. Надеюсь, это кому-то поможет :)