Последние темы


Автоматическая регистрация покупателя при оформлении заказа

  • Тема со старого форума.

    Хук для FormIt.
    Как использовать:

    [[!FormIt?
    &hooks=`spam,register_fihook,email,FormItAutoResponder,redirect`
    &registerGroupsList=`Покупатели`
    ...
    ]]
    

    Код сниппета "register_fihook":

    <?php
    
    /*
    
    Hook for FormIt. Registration on sent mail.
    
    Author: munk
    http://modx-shopkeeper.ru/forum/viewtopic.php?id=2260
    
    Changed by Andchir
    
    [[!FormIt?
    &hooks=`spam,register_fihook,email,FormItAutoResponder,redirect`
    &registerGroupsList=`Покупатели`
    ...
    ]]
    
    */
    
    $hook->setValues(array('password' => ''));
    
    //Если пользователь залогинен выходим
    if($modx->getLoginUserID()) return true;
    
    $emailField = $modx->getOption('fiarToField',$hook->config,'email');
    $registerGroupsList = $modx->getOption('registerGroupsList',$hook->config,'');
    
    //получаем данные формы
    $form_fields = $hook->getValues();
    $username = !empty($form_fields[$emailField]) ? $form_fields[$emailField] : '';//username = email
    $email = !empty($form_fields[$emailField]) ? $form_fields[$emailField] : '';
    $fullname = !empty($form_fields['fullname']) ? $form_fields['fullname'] : '';
    $phone = !empty($form_fields['phone']) ? $form_fields['phone'] : '';
    $address = !empty($form_fields['address']) ? $form_fields['address'] : '';
    
    //проверяем  есть ли такой пользователь в базе
    $count = $modx->getCount('modUser', array('username' => $username));
    if($count > 0) return true;  // пользователь с таким именем есть - выходим
    
    // создаем пользователя и сохраняем
    $user = $modx->newObject('modUser');
    $password = $user->generatePassword($modx->getOption('password_generated_length',null,8));
    $user->set('username', $username);
    $user->set('password', $password);
    $user->save();
    
    // создаем профиль, добавляем к пользователю и сохраняем
    $profile = $modx->newObject('modUserProfile');
    
    $profile->set('email',    $email);
    $profile->set('fullname', $fullname);
    $profile->set('phone',    $phone);
    $profile->set('address',  $address);
    
    $user->addOne($profile);
    
    $profile->save();
    $user->save();
    
    
    //Добавляем пользователя в группу
    $registerGroupsList = $registerGroupsList ? explode(',',$registerGroupsList) : array(); //Список групп в уоторые добавить пользователя.
    
    $groups = array();
    foreach($registerGroupsList as $groupName){
        // получаем группу по имени
        $group = $modx->getObject('modUserGroup', array('name' => $groupName));
        // добавляем пользователя в группу
        if(is_object($group)) $user->joinGroup($group->id, 1);
    }
    
    //Авторизуем пользователя
    $logindata = array(
        'username' => $username,
        'password' => $password,
        'rememberme' => true
    );
    // сам процесс авторизации
    $response = $modx->runProcessor('/security/login', $logindata);
    // проверяем, успешно ли
    if ($response->isError()) {
        
        // произошла ошибка
        $modx->log(modX::LOG_LEVEL_ERROR, 'Ошибка авторизации в $register-on-order. Message: '.$response->getMessage());
        
    } else {
        
        //Отправляем пароль в письмо
        $hook->setValues(array(
            'password' => $password
        ));
        
    }
    
    return true;
    

    На сколько я понял первоначально отправлялось два письма, одно с данными авторизации, другое с данными заказа (через FormItAutoResponder). Теперь пользователю отправляется одно письмо через хук "FormItAutoResponder" в чанке письма пользователю (параметр &fiarTpl) доступен плейсхолдер:

    Пароль: [[+password]]
    

    Можно делать так:

    [[+password:ne=``:then=`
    <p>Ваши данные для входа на сайт:</p>
    <p>Логин: [[+email]]</p>
    <p>Пароль: [[+password]]</p>
    `:else=``]]
    
 

Последние комментарии

  • M

    @Andchir , спасибо. Проблема и правда была в одном из плагинов, который на другом сайте нормально работает

    Читать далее
  • Что нового в Shopkeeper 4.0.3:

    Исправлено некорректное определение языка по умолчанию В настройках в админке скрываются пароли. Добавлена возможность загружать картинки для категорий. shopkeeper.js - добавлена функция updateProductsPrice() для поддержки текстовых полей для цены. Twig-функции contentList() и includeContent() вынесены в отдельный класс. Добавлено событие "order.before_create". Сортировка всех полей типа контента перетаскиванием. Автоматическое сохранение сортировки полей при сохранении типа контента (не нужно нажимать на отдельную кнопку). В интерфейсе админа добавлено поле поиска для списка Composer-пакетов.

    Скачать можно на главной странице https://modx-shopkeeper.ru/

    Читать далее
  • Вот этот плагин:
    0_1550334109280_screenshot_022.png

    Вроде по умолчанию он выключен. Надо включить. Но плагин работает только на редактирование товаров, при удалении он делалать ничего не будет. Только что проверил кнопку, всё работает корректно, фильтры удаляются и добавляются, когда нужно. Но нужно очищать корзину после удаления товаров (возможно баг).

    Читать далее
  • J

    @Andchir Если нажимаю кнопочку "Обновить значения", то в фильтрах появляются как раз те самые удаленные значения фильтра.. Потом приходится Ручками выбирать эти удаленные значения.
    вот так выглядит Управление фильтрами когда удаляешь ручками: https://yadi.sk/i/_zw64CGkZ_sAYg
    А вот так выглядит когда просто нажимаешь "Обновить значения": https://yadi.sk/i/7WFbXC6xV5sQAw (красным выделено, то что приходится постоянно удалять

    Читать далее