it-swarm.com.de

Erstelle einen Benutzer und setze seine Frontend-Sprache per PHP-Skript

Der folgende Code (geändert von einem anderen Beitrag) funktioniert gut für mich, um einen Benutzer zu erstellen. Aber wie stellen Sie die Frontend-Sprache des neuen Benutzers ein? Im folgenden Code die Zeilen

'frontend-language'=>'de-DE',

'frontend-language'=>$params['frontend-language'],

so habe ich erfolglos versucht, es zu erreichen.

define( '_JEXEC', 1 );
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' );

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

$params = array(
    'name'=>'test1',
    'username'=>'test1_user',
    'email'=>'[email protected]',
    'password'=>'test',
    'frontend-language'=>'de-DE',
);

$udata = array(
    'name'=>$params['name'],
    'username'=>$params['username'],
    'password'=>$params['password'],
    'email'=>$params['email'],
    'groups'=>array(2), // set the usergroup(s) here (id)
    'frontend-language'=>$params['frontend-language'],
);

$user = new JUser;

try{
    echo '<pre>';
    echo 'Bind user data: ';
    var_dump($user->bind($udata));         

    echo 'Save user data: ';
    var_dump($user->save());

    //echo 'Testing login: ';
    //var_dump( $app->login( array('username'=>$params['username'],'password'=>$params['password']) ) );

} catch (Exception $ex) {

    echo 'Exception: ',  $e->getMessage(), '\n';

}
2
Nyuki

Das Frontend-Sprachfeld heißt language, nicht frontend-language. Es hat auch keine eigene Spalte in der Datenbank. Stattdessen ist es JSON-codiert mit anderen Parametern und wird in der Spalte params gespeichert.

Entfernen Sie das Element frontend-language Aus $udata Und fügen Sie stattdessen das Array params mit language als Schlüssel und der ausgewählten Sprache als Wert hinzu:

$udata = array(
    'name' => $params['name'],
    'username' => $params['username'],
    'password' => $params['password'],
    'email' => $params['email'],
    'groups' => array(2), // set the usergroup(s) here (id)
    'params' => array('language' => $params['frontend-language']),
);

Alternativ können Sie JUser::setParam() verwenden, um Parameterwerte festzulegen:

$user = new JUser;
$user->bind($udata);
$user->setParam('language', 'de-DE');
$user->save();
3
Sharky