Заказ в 1 клик на minishop2

Простое решение для реализации заказа в 1 клик для minishop2 через AjaxForm.

Добавляем способ доставки «Заказ в 1 клик» (ниже в вызове id 2).
Добавляем способ оплаты «Заказ в 1 клик» (ниже в вызове id 3).

Добавляем сниппет «oneClickOrder» — это будет хук для AjaxForm.
<?php
$errors = array();

if ( empty( trim( $_POST['phone'] ) ) ) {
    $errors['phone'] = 'Вы не заполнили телефон';
}
if ( empty( trim( $_POST['receiver'] ) ) ) {
    $errors['receiver'] = 'Вы не заполнили Имя';
}

if ( !empty( $errors ) ) {
    return $AjaxForm->error( 'В форме содержатся ошибки!', $errors );
} else {
    $miniShop2 = $modx->getService( 'minishop2','miniShop2', MODX_CORE_PATH . 'components/minishop2/model/minishop2/', $scriptProperties );

    if ( !( $miniShop2 instanceof miniShop2 ) ) {
        return $AjaxForm->error( 'Ошибка скрипта!' );
    }
    
    $miniShop2->initialize($modx->context->key, $scriptProperties);
    
    $miniShop2->cart->clean();
    $miniShop2->order->clean();
        
    $miniShop2->order->add( 'receiver', trim( $_POST['receiver'] )  );
    $miniShop2->order->add( 'email', trim( $_POST['phone'].'@'.$modx->getOption('http_host') ) );
    $miniShop2->order->add( 'phone', trim( $_POST['phone'] ) );
    $miniShop2->order->add( 'delivery', 2 ); // id метода доставки
    $miniShop2->order->add( 'payment', 3 ); // id метода оплаты
    
    $res = $miniShop2->cart->add($modx->resource->get('id'), 1);
    
    return $AjaxForm->success( 'Форма успешно отправлена. Сейчас вы перейдете на страницу оплаты.' );
}


Теперь сама форма
Вызов
{$_modx->runSnippet('!AjaxForm', [
        'snippet'=>'FormIt',
        'formName' => 'Заказ в 1 клик',
        'validationErrorMessage' => 'Форма содержит ошибки',
        'formSelector' => 'af_quick_buy',
        'emailTo'=> $doc.emailto,
        'emailSubject'=> $_modx->config.http_host ~ ' - Заказ в 1 клик',
        'form'=>'tpl.form.quick_buy.form',
        'emailTpl'=>'tpl.form.quick_buy.emailTpl',
        'hooks'=>'spam,email,oneClickOrder',
        'validate'=>'name:required,phone:required,work-email:blank',
])}

Чанк tpl.form.quick_buy.form
Содержимое:
<div class="quick_buy" id="quick_buy">
    <form class=" ajax_form af_quick_buy quick_buy-form" method="post">
        <div class="quick_buy-fields">
                <input type="text" class="qb-input" placeholder="Имя" name="receiver">
                <input type="text" class="qb-input" placeholder="Телефон" name="phone">
                <input type="hidden" class="qb-input" name="workemail">
                <input type="hidden" class="qb-input" name="pagetitle" value="{$doc.pagetitle}">
                <input type="hidden" class="qb-input" name="product_id" value="{$doc.id}">
                <input type="hidden" class="qb-input" name="price" value="{$doc.price}">
        </div>
        <div class="quick_buy-info">
            <p>Заполните форму и наши менеджеры свяжутся с вами в течение часа.</p>
            <button type="submit" class="button">Заказать</button>
        </div>
    </form>
</div>

Чанк tpl.form.quick_buy.emailTpl
<p>На сайте {$_modx->config.http_host} совершен заказ в 1 клик</p>
<p>
Имя: {$name ?: 'не указано'}<br />
Телефон: {$phone ?: 'не указано'}<br /><br />
Название товара: {$phone}<br />
Цена: {$price}<br />
</p>
<p>Адрес страницы: {$_modx->resource.id | url : ['scheme' => 'full']}</p>

Нет комментариев