Nasıl bir komut dosyası içinde yeni bir Joomla kullanıcı hesabı oluşturabilirsiniz?

6 Cevap php

Biz ortak siteleri sitemizde kullanıcıları için yeni bir hesap oluşturmanızı sağlar Joomla için bir XML API yaratıyoruz.

Biz API isteği işler ve doğrular bağımsız bir PHP komut dosyası oluşturduk, ama şimdi biz aslında yeni hesaplar oluşturmanız gerekir. Biz aslında sadece kayıt formu göndermek için bir CURL çağrı yaptığını düşünüyorduk, ama biz kullanıcı belirteci ile ilgili bir sorun olduğunu fark etti. Joomla cesareti girmeden bir kullanıcı hesabı oluşturmak için başka bir temiz bir yolu var mı? Bazı ameliyat yapmak zorunda yaparsanız, bu yaklaşım için en iyi yolu nedir?

6 Cevap

Sen orada beri juser gibi Joomla iç sınıflar, örneğin şifre tuzlama gibi iç mantık çok kullanmak gerekir. API isteği değerlerini kullanır ve Joomla Kullanıcı Sınıflarında yöntemler kullanarak veritabanı kullanıcıları kaydeder özel bir komut dosyası oluşturun.

Two ways to add joomla users using your custom code harika bir öğretici olduğunu. Yaklaşım works. Bazı projelerde bu yaklaşımı kullandım.

Joomla Framework outside Joomla, erişmek varsa check this resource instead.

Just go to documentation page: http://docs.joomla.org/JUser

Ayrıca Joomla yeni kullanıcı kayıt tek sayfa örnek yarıştı:

<?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     */

 // get the ACL
 $acl =& JFactory::getACL();

 /* get the com_user params */

 jimport('joomla.application.component.helper'); // include libraries/application/component/helper.php
 $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

 // get the default usertype
 $usertype = $usersParams->get( 'new_usertype' );
 if (!$usertype) {
     $usertype = 'Registered';
 }

 // set up the "main" user information

 //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
 $data['gid'] = $acl->get_group_id( '', $usertype, 'ARO' );  // generate the gid from the usertype

 /* no need to add the usertype, it will be generated automaticaly from the gid */

 $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
 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/>';
 register_user($email, $password);
 //echo '<br/>'.'User registration is completed'.'<br/>';
?>

Sadece e-posta ve şifre kullanılan kayıt için lütfen unutmayın.

The sample of call: localhost/joomla/test-reg-user-php?email=test02@test.com&password=pass or just create simple form with appropriate parameters

Düzgün giriş yapmış kullanıcılar için çalışmıyor waitinforatrain, gelen cevap dayanarak (eğer arka-uç kullanıyorsanız eğer gerçekten tehlikeli), ben bunu biraz değiştirilmiş ve burada tamamen benim için çalışmaktadırlar. Konuyu, 1.5 için başlangıçta yukarıdaki dolayısıyla cevaplar iken bu, Joomla 2.5.6 için olduğuna dikkat edin:

    function addJoomlaUser($name, $username, $password, $email) {
      jimport('joomla.user.helper');
      $salt   = JUserHelper::genRandomPassword(32);
      $crypted  = JUserHelper::getCryptedPassword($password, $salt);
      $cpassword = $crypted.':'.$salt;

      $data = array(
          "name"=>$name,
          "username"=>$username,
          "password"=>$password,
          "password2"=>$password,
          "email"=>$email,
          "block"=>0,
          "groups"=>array("1","2")
      );

      $user = new JUser;
      //Write to database
      if(!$user->bind($data)) {
          throw new Exception("Could not bind data. Error: " . $user->getError());
      }
      if (!$user->save()) {
          throw new Exception("Could not save user. Error: " . $user->getError());
      }

  return $user->id;
}

http://joomlaportal.ru/content/view/1381/68/

INSERT INTO jos_users( `name`, `username`, `password`, `email`, `usertype`, `gid` )
VALUES( 'Иванов Иван', 'ivanov', md5('12345'), 'ivanov@mail.ru', 'Registered', 18 );

INSERT INTO jos_core_acl_aro( `section_value`, `value` )
VALUES ( 'users', LAST_INSERT_ID() );

INSERT INTO jos_core_acl_groups_aro_map( `group_id`, `aro_id` )
VALUES ( 18, LAST_INSERT_ID() );

Test ve 2.5 üzerinde çalışıyor.

function addJoomlaUser($name, $username, $password, $email) {
        $data = array(
            "name"=>$name, 
            "username"=>$username, 
            "password"=>$password,
            "password2"=>$password,
            "email"=>$email
        );

        $user = clone(JFactory::getUser());
        //Write to database
        if(!$user->bind($data)) {
            throw new Exception("Could not bind data. Error: " . $user->getError());
        }
        if (!$user->save()) {
            throw new Exception("Could not save user. Error: " . $user->getError());
        }

        return $user->id;
}

Eğer Joomla ortamı dışında iseniz, önce bunu yapmak zorunda olacak, ya da bir bileşeni yazma değilseniz, @ GMonC yanıtında bağlantı birini kullanın.

<?php
if (! defined('_JEXEC'))
    define('_JEXEC', 1);
$DS=DIRECTORY_SEPARATOR;
define('DS', $DS);

//Get component path
preg_match("/\\{$DS}components\\{$DS}com_.*?\\{$DS}/", __FILE__, $matches, PREG_OFFSET_CAPTURE);
$component_path = substr(__FILE__, 0, strlen($matches[0][0]) + $matches[0][1]);
define('JPATH_COMPONENT', $component_path);

define('JPATH_BASE', substr(__FILE__, 0, strpos(__FILE__, DS.'components'.DS) ));
require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once JPATH_BASE .DS.'includes'.DS.'framework.php';
jimport( 'joomla.environment.request' );
$mainframe =& JFactory::getApplication('site');
$mainframe->initialise();

Benim bileşeni birim test için kullanabilirsiniz.

Güncelleme: oh senin 1,5 istedim görmek ddin't ancak bunun yerine benzer ancak 1.5 API wth yapabilirdi.

Bu benim Anter amaçla usng edildi şeyin parçası ama sabit komut satırından JUserHelper kullanarak bir sorunu kadar yerine varsayılan grup kullanmak gerekir ya da bir web uygulaması yapmak istiyorum.

<?php
/**
 *
 * @copyright  Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved.
 * @license    GNU General Public License version 2 or later; see LICENSE.txt
 */

if (!defined('_JEXEC'))
{
    // Initialize Joomla framework
    define('_JEXEC', 1);
}

@ini_set('zend.ze1_compatibility_mode', '0');
error_reporting(E_ALL);
ini_set('display_errors', 1);

// Load system defines
if (file_exists(dirname(__DIR__) . '/defines.php'))
{
    require_once dirname(__DIR__) . '/defines.php';
}

if (!defined('JPATH_BASE'))
{
    define('JPATH_BASE', dirname(__DIR__));
}

if (!defined('_JDEFINES'))
{
    require_once JPATH_BASE . '/includes/defines.php';
}

// Get the framework.
require_once JPATH_LIBRARIES . '/import.php';


/**
 * Add user
 *
 * @package  Joomla.Shell
 *
 * @since    1.0
 */
class Adduser extends JApplicationCli
{
    /**
     * Entry point for the script
     *
     * @return  void
     *
     * @since   1.0
     */
    public function doExecute()
    {
        // username, name, email, groups are required values.
        // password is optional
        // Groups is the array of groups

        // Long args
        $username = $this->input->get('username', null,'STRING');
        $name = $this->input->get('name');
        $email = $this->input->get('email', '', 'EMAIL');
        $groups = $this->input->get('groups', null, 'STRING');

        // Short args
        if (!$username)
        {
            $username = $this->input->get('u', null, 'STRING');
        }
        if (!$name)
        {
            $name = $this->input->get('n');
        }
        if (!$email)
        {
            $email = $this->input->get('e', null, 'EMAIL');
        }
        if (!$groups)
        {
            $groups = $this->input->get('g', null, 'STRING');
        }

        $user = new JUser();

        $array = array();
        $array['username'] = $username;
        $array['name'] = $name;
        $array['email'] = $email;

        $user->bind($array);
        $user->save();

        $grouparray = explode(',', $groups);
        JUserHelper::setUserGroups($user->id, $grouparray);
        foreach ($grouparray as $groupId)
        {
            JUserHelper::addUserToGroup($user->id, $groupId);
        }

        $this->out('User Created');

        $this->out();
    }

}

if (!defined('JSHELL'))
{
    JApplicationCli::getInstance('Adduser')->execute();
}