[РЕШЕНО] Drupal commerce Coupon Rules, правило на минимальную сумму заказа

Главные вкладки

Аватар пользователя АлександрБолт АлександрБолт 2 декабря 2013 в 15:31

Добрый день, добавил правило что купон не принимал если сумма заказа меньше 2000 тыс р.

и вопрос, а как сделать чтобы при попытке ввода купона выдавалось сообщение что минимальна сумма заказа должна быть больше 2000 тыс.р.

а данный момент он просто обновляет страницу и все...ничего не происходит.

спасибо...

Комментарии

Аватар пользователя Niklan Niklan 2 декабря 2013 в 18:21

"АлександрБолт" wrote:
Добрый день, добавил правило что купон не принимал если сумма заказа меньше 2000 тыс р.
и вопрос, а как сделать чтобы при попытке ввода купона выдавалось сообщение что минимальна сумма заказа должна быть больше 2000 тыс.р.

Писать кастомный модуль.

Делается через hook_form_alter() и hook_checkout_form_validate()

~40 строк кода

Аватар пользователя Niklan Niklan 3 декабря 2013 в 11:34

"АлександрБолт" wrote:

Там писать тои нечего.

В хуке форм ловим 3 нужные для нас (на которых завязана корзина и оформление)

<?php
/**
 * Implements hook_form_alter().
 */
function hook_form_alter(&$form, &$form_state$form_id) {
    if (
$form_id == 'views_form_commerce_cart_form_default') {
      
$form['actions']['checkout']['#validate'][] = 'hook_checkout_form_validate';
    } elseif (
$form_id == 'commerce_checkout_form_checkout') {
      
$form['buttons']['continue']['#validate'][] = 'hook_checkout_form_validate';
    } elseif (
$form_id == 'commerce_checkout_form_review') {
      
$form['buttons']['continue']['#validate'][] = 'hook_checkout_form_validate';
    }
}
?>

А затем пишем hook_checkout_form_validate в котором банальными if условиями сравниваем цену заказа, мин цену заказа, а также проверяем на наличие купона. В случае если оно не прокатит вешать form_set_error() и писать юзеру в нем что он должен еще накинуть или не юзать купон

Аватар пользователя Niklan Niklan 3 декабря 2013 в 23:58

https://github.com/Niklan/Commerce-CRE
Создал небольшой модуль, который добавляет новое событие в Rules. Называется 'On checkout page'
Срабатывает когда юзер находится на странице корзины, оформления заказа, или его подтверждении.

Пример использования для задания минимальной суммы покупки для определенной роли.

Аватар пользователя Niklan Niklan 4 декабря 2013 в 11:01

Кароче событие 'On checkout page' сработает когда юзер будет на одной из страниц оформления.
В моём случае я поставил отрицание на страницу корзины, что в ней не срабатывало. Ибо я сделал редирект на корзину и вывод ошибки в случае перехода на страницу оформления\проверки и не соблюдения условий.

Если бы я не добавил это отрицание, у меня бы при несоблюдения условиня страница cart циклически грузилась.

'views_form_commerce_cart_form_default' - страница корзины
'commerce_checkout_form_checkout' - страница оформления (телефоны и т.д.)
'commerce_checkout_form_review' - страница проверки заполненных данных

Я в отрицание поставил первую.

Для сравнения цен используйте Price comparsion, он учитывает валюту.
А то сейчас ограничение для всех валют 100000 будет. а 100000 руб != 100000$

Аватар пользователя igorek igorek 16 апреля 2015 в 13:00

"Niklan" wrote:
Создал небольшой модуль, который добавляет новое событие в Rules. Называется 'On checkout page'

Спасибо за модуль!!!
Поставил его, так как он лучше настраивается.
Хотелось просто включить и быстро настроить, но Commerce Minimum & Maximum Order Amount - оказался очень не гибким. Сразу же подбесил вывод копеек, они у меня отключены, не лезть же в чужой официальный модуль и править, делать хук для хука модуля - это уж извращение, проще свой модуль по подобию написать.
Niklan - ваш сайтик к себе в закладки поставим Wink
И расширил форм id
$form_id_list = array(
'views_form_commerce_cart_form_default',
'commerce_checkout_form_checkout',
'commerce_checkout_form_shipping',
'commerce_checkout_form_review',
);