Покупка товара в один клик
Привет всем. На сайте всего несколько товаров и хочется реализовать покупку в один клик без корзины.
То есть человек нажал на кнопку купить и сразу перешёл в платёжную систему.
Возможно это реализовать через Minishop2 или разумнее написать свой сниппет.
Подскажите разумный подход в решении этой задачи.
То есть человек нажал на кнопку купить и сразу перешёл в платёжную систему.
Возможно это реализовать через Minishop2 или разумнее написать свой сниппет.
Подскажите разумный подход в решении этой задачи.
Комментарии: 3
костыль:
1) нажимаем кнопку купить, товар летит в корзину, идет редирект на страницу «тест»
2) страница тест по загрузке делает $('#msOrder').submit(); с левыми полями изначально заполнеными на уровне верстки, с выбранонной платежкой по умолчанию и редиректит на оплату
3) profit
ну или сделать это все грамотно на уровне сниппета через ajaxform
1) нажимаем кнопку купить, товар летит в корзину, идет редирект на страницу «тест»
2) страница тест по загрузке делает $('#msOrder').submit(); с левыми полями изначально заполнеными на уровне верстки, с выбранонной платежкой по умолчанию и редиректит на оплату
3) profit
ну или сделать это все грамотно на уровне сниппета через ajaxform
Потребуется свой сниппет, который запустит всего 2 метода minishop2:
$minishop2->cart->add($productId, $count);
$orderData = array(/* Здесь много полей, имеющихся в стандартной форме заказа */);
$minishop2->order->submit($orderData);
Недавно делал на сайте вот так:
Вызов сниппета через AjaxForm
И вот сам сниппет QuickOrder
JS Callback для отправки формы:
Вызов сниппета через AjaxForm
[[!AjaxForm?
&snippet=`QuickOrder`
&form=`order.form`
]]
И вот сам сниппет QuickOrder
<?php
$errors = array();
if ( empty( trim( $_POST['total'] ) ) OR !is_numeric( trim( $_POST['total'] ) ) ) {
$errors['total'] = 'Вы не заполнили кол-во человек';
}
if ( empty( trim( $_POST['phone'] ) ) ) {
$errors['phone'] = 'Вы не заполнили телефон';
}
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->order->add( 'receiver', trim( $_POST['receiver'] ) );
$miniShop2->order->add( 'email', trim( $_POST['email'] ) );
$miniShop2->order->add( 'delivery', 1 ); // id метода доставки
$miniShop2->order->add( 'payment', 1 ); // id метода оплаты
$miniShop2->cart->add($_POST['id'], $modx->getOption('count', $_POST, 1), $modx->getOption('options', $_POST, array()));
return $AjaxForm->success( 'Форма успешно отправлена. Сейчас вы перейдете на страницу оплаты.' );
}
JS Callback для отправки формы:
$( document ).on('af_complete', function( event, response ) {
if( response.success ) {
response.form[0].submit();
}
})
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.