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


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

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

    Хук для 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=``]]
    
 

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

  • Z

    Спасибо, действительно проще создать отдельно.

    Читать далее
  • Но проблема в том, что эта старая цена "дублируется" в плесхолдер "Дополнительных услуг" - [[+addit_data]].

    Можно не использовать [[+addit_data]], а выводить параметры по-отдельности.

    Цитата из документации:

    [[+shk_любой доп.параметр]] - любой доп. параметр, выбранный при добавлении товара в корзину (из [[+addit_data]]), например [[+shk_param1]].
    Если параметры сделаны в виде чекбоксов, то чтобы вывести отдельно каждый из них, нужно добавлять индекс (номер от нуля) для параметров следующих за первым.
    Пример: [[+shk_param1]], [[+shk_param1_1]], [[+shk_param1_2]] ...
    [[+shk_любой доп.параметр_price]] - цена доп.параметра. Пример: [[+shk_param1_price]].

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

    Доброго времени суток. Не могу разобраться, как передать данные migx-поля в корзину в плейсхолдер без "дублирования" в [[+addit_data]]
    Суть в чем: У меня есть 2 цены у товара (со скидкой и без скидки) Форма для отправки в корзину:

    <form action="[[~[[*resource_id]]? &scheme=`abs`]][[*alias]].html" method="post"> <input type="hidden" name="shk-id" value="[[*id]]" /> <input type="hidden" name="shk-name" value="[[*pagetitle]]" /> <input type="hidden" name="price_old__[[*id]]__add" value="[[*price_old]]" /> <input type="hidden" name="shk-count" value="1" /> <div class="product-price"> Цена: <span class="shk-price">[[!*price:shk_curr_rate:num_format]]</span> Старая цена - <span class="shk-price-old">[[+price_old]]</span> [[!+shk_currency]] </div> <div class="padding-lr-30"> <h5>Дополнительные услуги</h5> [[*param1]] </div> <div class="product-price"> <button class="btn btn-lg btn-primary" type="submit" class="shk-but">В корзину</button> </div> </form>

    Данные со "старой ценой" в корзину попадают нормально и выводится в нужном месте в плейсхолдере:
    [[+shk_price_old]]
    Но проблема в том, что эта старая цена "дублируется" в плесхолдер "Дополнительных услуг" - [[+addit_data]]. Как сделать чтобы старая цена не выводилась в [[+addit_data]]? Или может я как то не правильно передаю MIGX-параметр в корзину ? Заранее спасибо.

    Читать далее
  • Фотографии, как я понял, это второй вопрос. Я по нему пока ничего не отвечал и не просил информации. Это не отменяет того, что в вашем конфиге есть ошибка, о которой я писал выше. Не нужно задавать разные вопросы в одной теме, чтобы не было путаницы.
    http://forum.modx-shopkeeper.ru/topic/15/рекомендации-по-оформлению-темы-с-вопросом

    Читать далее