Купон в checkout

Добрый день!

Вывел содержимое корзины (cart.html) в checkout.html через:

{$mycart = $wa->shop->cart()}
{$mycart_items = $mycart->items()}
{$mycart_total = $mycart->total()}
{$mycart_discount = $mycart->discount()}

Проблема с применением купона - никак не получается, он его просто не обрабатывает. Отрывок из checkout.html:

{$checkout_data = $wa->storage('shop/checkout')}
{$coupon_code = $checkout_data.coupon_code}
<form method="post">
    <tr class="no-border" id="discount-row">
        <td colspan="2" id="apply-coupon-code" class="codecoupon no-border">                        
            <input type="text" name="coupon_code" value="{$checkout_data.coupon_code|escape}" class="form-control">
            <input type="submit" value="[`Apply`]">
        </td>                
    </tr>
</form>

Через cart.html всё работает, а в checkout.html не хочет. Как исправить? Не понимаю, как передать значение value и куда? В $wa->storage('shop/checkout') хранится скидка в абсолютной величине без указания купона

cart.js схож с тем, что у темы default

4 ответа

  • 1

    для form сделайте action в cart
    И еще:

    {$mycart = $wa->shop->cart()}
    Эта строка получает достаточно информации о товарах и т.д.
    не дергайте лишний раз базу
    {$mycart|wa_dump} Вам в руки :)



    • +1
      Worker Worker 8 августа 2016 22:54 #

      Точно, забыл про <form action... только возникает другая проблема - после Submit справедливо, но совершенно не нужно перекидывает на /cart/, от которого мне надо избавиться. Я проверял через редирект в nginx: /cart/ -> /checkout/ - скрипты корзины перестают работать, ведь все данные сливаются в /cart/.

      Есть ли более простой способ без костылей использовать данные, подгружаемые в cart.html, в checkout.html?

      Предполагается, что пользователь попадает только в /checkout/ без возможности посещения /cart/ и последующих /checkout/[shipping/payment/confirmation]

      Не совсем понял про достаточность информации, здесь мне не хватает квалификации... $cart = NULL в checkout.html, поэтому приходится запрашивать корзину. Купоны вообще лежат не вне корзины.

      На {$mycart|wa_dump} в checkout.html получил:

      shopCart object
      {
        *code => 'cca6c204b8fbe1e6ee7b31174ec69b6a'
        *model => shopCartItemsModel object { ** skipped as a descendant of waModel ** }
      }

      А вот {$cart|wa_dump} в cart.html выводит полноценный массив данных

      • +1

        именно полноценный массив данных из необходимой переменной
        совет: AJAX отправка форм
        посмотрите кк реализовано добавление в корзину товара без перезагрузки страницы. сделайте то же самое.
        да, много JS надо писать, если хотите все сделать красиво

        еще вариант: load или AJAX загрузка данных со страницы (снова JS)

        но я б остановился на первом варианте. страшно не люблю работать с подгрузкой страниц

        • +1
          Worker Worker 9 августа 2016 02:55 #

          Застрял в cart.js - не знаю, что передавать в $.post для data? coupon_name существует, лог 'test' в консоли есть.

          Для других действий (удаление товара, изменение количества) берется data-id, то здесь мне непонятно, как и что передавать?

          Как запустить updateCart?

          function updateCart(data)
              {
                  $(".cart-total").html(data.total);
                  if (data.discount_numeric) {
                      $(".cart-discount").closest('tr').show();
                  }
                  $(".cart-discount").html('− ' + data.discount);        
              }
          
          $('[name="coupon_code"]').closest('form').find(':submit').on('click', function() {
              var form = $(this).closest('form');
              var coupon_name = $('[name="coupon_code"]').val();
              if (coupon_name) {
                  $.post('/cart/', {html: 1, coupon_code: coupon_name}, function (response) {
                      console.log('test');
                      updateCart(response.data);
                  });
              }
              return false;
          });

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите