Перейти к содержанию

Рекомендуемые сообщения

Здравствуйте. При изменении количества товара в корзине нужно нажать на кнопку обновить и страница перезагружается. Подскажите пожалуйста приблизительный алгоритм как можно реализовать этот функционал БЕЗ перезагрузки страницы. чтобы можно было ввести новое количество, нажать кнопку и обновилась итоговая цена заказа. заранее спасибо за ответы

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Такое всегда делается ajax запросами. Добавьте свой экшн в какой нибудь контроллер (в принципе на самом деле даже не важно в какой но лучше в контроллер корзины наверное) куда будете сбрасывать идентификатор товара в корзине и количество, а возвращать будете либо новые данные корзины (общая стоимость и количество) либо весь HTML код корзины, а дальше JS кодом меняете соответствующий фрагмент HTML кода страницы на новый.

  • +1 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

прошу прощения. но что за экшн? и и в какое место catalog/controller/checkout/cart.php его необходимо добавить?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ваша задача, которая достаточно просто выглядит на первый взгляд, решается не очень не просто.

Попытаюсь несколько прояснить то, что вам посоветовали выше.

1) используя javascript вам нужно на клик по кнопке обновления повесить обработчик, который будет посылать ajax запрос на обновление содержимого корзины и возвращать результат

2) полученный результат с корзиной (JSON или HTML) нужно отобразить на странице, вместо существующего

 

 

php обработчик можете добавить в файл catalog/controller/checkout/cart.php в виде нового метода, назвав его, например, cart_update(). По сути он должен выполнять то же,что и имеющийся метод index(), а именно обновлять число товаров в корзине и вычислять total по всем правилам. Отличие в том, что он должен уметь работать с ajax.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

спасибо за ответ хоть что то немного понятно. но у меня вопрос. а как сделать так, чтобы данные посылаемые через аякс обрабатывал именно метод cart_update?

 

В cart.tpl я пока что добавил вот такой вот тестовый скрипт (здесь для инпута количества и кнопки обновления я добавил классы для удобства)

 

<script type="text/javascript">

  $(document).ready(function() {
    $(".update-btn").bind("click", function() {
      $.ajax({
          url: 'index.php?route=checkout/cart&quantity=' + $('input.quantity-field').val(), 
          type: 'post',
          data: 'quantity=' + $('input.quantity-field').val(), 
          dataType: "json",
          beforeSend: alert('Ожидание данных...'),
          success: alert('DONE')
      });
    });
  });
</script>
 
Но что то не работает.  я с аяксом знаком только со вчерашнего вечера, так что пожалуйста не судите строго

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вам же написали, что метод  index() не умеет работать с ajax. Надо писать свой метод, который будет обрабатывать именно аякс запросы.

В url надо просто "index.php", а в data строку запроса - data: "route=checkout/cart&quantity=" + $('input.quantity-field').val() (лучше в двойные кавычки брать)

Посмотрите в браузере, какой уходит запрос и какой приходит ответ.

Вставьте обработчик error или complete, чтобы хоть знать что запрос завершился

 

И отключите кеш, cache: false (по умолчанию включен)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Похожий контент

    • От BeTep2
      Всем привет. Хочу реализовать плавное открытие\закрытие корзины на главной. В javascript полный ноль.
      Стоит дефолтная корзина.
      Вот код comon.js:
       
      $('#cart > .heading a').live('mouseenter', function() { $('#cart').addClass('active'); $('#cart').load('index.php?route=module/cart #cart > *'); $('#cart').live('mouseleave', function() { $(this).removeClass('active'); }); }); Пробовал добавлять задержку к addClass и removeClass но выглядит это ужасно.
      По скольку, само появление реализовывается чем что без класса active блок content - display: none;, пробовал реализовать через команду FadeIn и FadeOut. Получилось вот так:
       
      $('#cart').live('mouseenter', function() { $('active').fadeIn(slow); $('#cart').load('index.php?route=module/cart #cart > *'); $('#cart').live('mouseleave', function() { $('active').fadeOut(slow); }); }); В чем ошибка с этой командой? И как вы у себя реализовывали это?
       
      ЗЫ. смотрел эту тему, но решение там - с ошибкой.
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.