1. Приветствуем Вас на неофициальном форуме технической поддержки XenForo на русском языке. XenForo - коммерческий форумный движок от бывших создателей vBulletin, написанный на PHP.

Создание пользователей форума через XenForo API

Тема в разделе "Статьи по XenForo Framework", создана пользователем FractalizeR, 02.07.2014.

Загрузка
  1. FractalizeR

    FractalizeR XenForo Addicted

    Регистрация:
    27.09.10
    Сообщения:
    1 085
    Симпатии:
    832
    Версия XF:
    1.3.2
    Предположим, что данные пользователя находятся в массиве $userData.

    PHP:
    <?php
    require(__DIR__ '/../library/XenForo/Autoloader.php');
    set_time_limit(0);

    XenForo_Autoloader::getInstance()
                      ->
    setupAutoloader(__DIR__ '/../library');

    $startTime microtime(true);
    XenForo_Application::initialize(__DIR__ '/../library'__DIR__ '/../');
    XenForo_Application::set('page_start_time'$startTime);
    XenForo_Application::disablePhpErrorHandler();

    foreach (
    $userData as $user) {
        
    /** @var XenForo_DataWriter_User $writer */
        
    $writer XenForo_DataWriter::create('XenForo_DataWriter_User');

        
    $writer->set('username'$user['username']);
        
    $writer->set('email'$user['email']);
        
    $writer->setPassword($newpassword$user['password']);
        
    $writer->set('user_group_id'$user['groupId']);

        try {
            
    $writer->save();
        } catch (
    Exception $e) {
            echo(
    "Ошибка создания аккаунта {$username}{$e->getMessage()}<br />\r\n");
            continue;
        }
    Список полей, которые можно установить через DataWriter можно посмотреть по полям таблицы xf_users в базе данных форума.
     
    GERAsimov, AnGel, Alex Gludo и 3 другим нравится это.
  2. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    В догонку, чтобы вместе информация была об этом.

    Для дополнительных полей пользователя применяется следующий вызов $writer:
    Код:
    $writer->setOption(XenForo_DataWriter_User::OPTION_ADMIN_EDIT, true);
    $writer->setCustomFields(array('FieldName' => $fieldValue), array('FieldName'));
    Первая строка нужна для принудительной записи в поле, если для пользователя отключено редактирование этого поля.
     
    AnGel, Romchik® и Mirovinger нравится это.
  3. FractalizeR

    FractalizeR XenForo Addicted

    Регистрация:
    27.09.10
    Сообщения:
    1 085
    Симпатии:
    832
    Версия XF:
    1.3.2
    Отлично! Спасибо за замечания!
     
  4. vyache

    vyache Местный

    Регистрация:
    24.06.14
    Сообщения:
    37
    Симпатии:
    11
    Версия XF:
    1.3.3
    Я вообще не в курю, что это? и куда вставлять? :)
    Насколько я понимаю для упрощенного создания пользователей?
     
  5. FractalizeR

    FractalizeR XenForo Addicted

    Регистрация:
    27.09.10
    Сообщения:
    1 085
    Симпатии:
    832
    Версия XF:
    1.3.2
    Это для разработчиков.
     
    Patriarh нравится это.
  6. gunpowder

    gunpowder Активный пользователь

    Регистрация:
    17.09.13
    Сообщения:
    116
    Симпатии:
    1
    Версия XF:
    1.2.1
    Добавился один аккаунт из списка. При повторной загрузке почему-то выдает ошибку.

    Код:
    $nicknames = file("nn.txt");
    for ($i=0; $i<count($nicknames); $i++)
    {
    
      $writer->set('username', $nicknames[$i]);
      $writer->set('email', "dsadsadasd".rand(1,9999)."@google.com");
      $writer->setPassword("123123", "123123");
      $writer->set('user_group_id', XenForo_Model_User::$defaultRegisteredGroupId); // $user['groupId']); // XenForo_Model_User::$defaultRegisteredGroupId
      try {
      $writer->save();
      } catch (Exception $e) {
      echo("Ошибка создания аккаунта {$username}: {$e->getMessage()}<br />\r\n");
      continue;
      }
    }

    Файл nn.txt выглядит следующим образом:

    DUBLYOR
    NASTRADAMUS
    Иннoчкa_-MAMBO
    ....
    ....
    ....

    Добавлен только первый ник.

    Ошибка:
    аžбˆаИаБаКаА баОаЗаДаАаНаИб аАаКаКаАбƒаНб‚аА : User names must be unique. The specified user name is already in use.
    An unexpected error occurred. Please try again later.


    p.s. continue; вроде стоит, но почему-то цикл после этого останавливается
     
    Последнее редактирование: 26.03.2015
    AnGel нравится это.
  7. akinak

    akinak Местный

    Регистрация:
    12.02.13
    Сообщения:
    259
    Симпатии:
    243
    Версия XF:
    1.1.3
    Лучше по другому проверять
    $writer->preSave();
    if (!$writer->getErrors())
    {
    $writer->save();
    }
     
    AnGel нравится это.
  8. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Налицо ошибка кодировки. То есть у вас где-то CP1251, а где-то utf-8. Сначала разберитесь с кодировкой.
    Уберите continue.
     
  9. gunpowder

    gunpowder Активный пользователь

    Регистрация:
    17.09.13
    Сообщения:
    116
    Симпатии:
    1
    Версия XF:
    1.2.1
    Убирал брат. А кодировка здесь вообще не причем.
    --- добавлено : 26 мар 2015 в 05:07 ---

    An unexpected error occurred. Please try again later.

    P.S. Есть подозрение, что нужно каждый раз новый объект создавать при добавлении нового пользователя. Да, так и есть , теперь все ок.

    Только странно, что пользователи добавленные не отображаются в index.php?members/

    Там есть

    Но там нет списка. Есть еще Newest members, но весь их список тоже почемуто нельзя посмотреть

    Или так и должно быть? В XenForo вообще чтоли нельзя полностью весь список пользователей вывести?
     
    Последнее редактирование модератором: 02.04.2015
  10. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    В настройках можете включить "Настройки" - "Настройки пользователя" - "Включить список пользователей". Тогда будет отображаться весь список пользователей.
     
    gunpowder нравится это.
  11. Sergey№1

    Sergey№1 Местный

    Регистрация:
    09.07.15
    Сообщения:
    6
    Симпатии:
    1
    Версия XF:
    1.4.4
    А как добавлять такую информацию как "Адрес", "ICQ", "Skype" ? Такая информация хранится в таблице xf_user_profile в базе данных.
     
  12. FractalizeR

    FractalizeR XenForo Addicted

    Регистрация:
    27.09.10
    Сообщения:
    1 085
    Симпатии:
    832
    Версия XF:
    1.3.2
    Насколько я помню, точно так же. DataWriter там один. Посмотрите на определение полей в DataWriter.
     
  13. GERAsimov

    GERAsimov Новичок

    Регистрация:
    02.09.16
    Сообщения:
    8
    Симпатии:
    0
    Версия XF:
    1.5.9
    Может кто пробовал так же поточно и аватарки добавлять при регистрации.

    Подскажите, реально ли в тот же цикл включить добавление аваторок при регистрации так, что бы сразу создавались s m l размеры.

    Благодарю!
     
  14. akinak

    akinak Местный

    Регистрация:
    12.02.13
    Сообщения:
    259
    Симпатии:
    243
    Версия XF:
    1.1.3
    Это за пределами цикла
    Код:
            $avatarModel = XenForo_Model::create('XenForo_Model_Avatar'); //статический вызов, чтобы в сторонних файлах работало. Естественно должы быть подключены классы xenforo
    
    Это в циклe, после $writer->save();



    Код:
          
    $fileName  = 'название файла';
    $fileTmpName = 'путь к файлу на сервере, с учетом где ксенфоро развернут';
    
    $user = $writer->getMergedData(); // для того, чтобы получить ай-ди юзера, которого создали
    $avatar = new XenForo_Upload($fileName, $fileTmpName);
            if ($avatar)
            {
                $avatarModel->uploadAvatar($avatar, $user['user_id'], false);
            }
    
    Как-то так, набирал на коленке и могут быть ошибки синтаксические
     
    Последнее редактирование: 02.09.2016
    Ulibka, Mirovinger и GERAsimov нравится это.
  15. GERAsimov

    GERAsimov Новичок

    Регистрация:
    02.09.16
    Сообщения:
    8
    Симпатии:
    0
    Версия XF:
    1.5.9
    Все работает, Благодарю!
     
  16. Voenniy

    Voenniy Местный

    Регистрация:
    12.12.12
    Сообщения:
    6
    Симпатии:
    2
    Тоже самое для 2й версии
    PHP:
    <?php

    $dir 
    __DIR__;
    require(
    $dir '/src/XF.php');

    XF::start($dir);
    $app XF::app();
    /**
     * @var \XF\Entity\User $user
     */
    $user $app->repository('XF:User')->setupBaseUser();

    $user->username "ttt1";
    $user->email "asd@mail.ru";
    $user->Auth->setPassword("asdPassw");
    $user->save();
     
    Ulibka нравится это.
  17. Ulibka

    Ulibka Активный пользователь

    Регистрация:
    02.11.17
    Сообщения:
    16
    Симпатии:
    0
    Версия XF:
    1.5.15
    Спасибо akinak за аватарки!
    Пришлось немного поломать голову что обозначают параметры.
    В $fileTmpName необходимо записать имя файла включая путь к нему, например c:\temp\1.jpg
    Обратите внимание - при вызове методов так, как указано сам первоначальный файл с аватаркой будет удален.
    Зачем нужен параметр $fileName - так и не понял :), я его задал просто как имя файла, например "1.jpg"
     
  18. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Дело в том, что при загрузке файл может быть загружен во временную папку с произвольным именем, которое ему дает система. А в самом движке сохраняется указанное имя. То есть $fileName затем и используется при отображении. А $fileTmpName может при этом быть абсолютно любым, так как указывает лишь на источник, откуда ксен возьмет содержимое файла. После того, как ксен сохранит у себя содержимое этого файла, этот временный файл удаляется.
     
    Ulibka нравится это.

Поделиться этой страницей