1C-Битрикс. Как сделать на одной странице корзину и оформление заказа, чтобы пересчитывалось «Итого» везде?
Добавить оформление заказа туда, где корзина оказалось не сложно - просто добавил компонент "оформление заказа" на страницу корзины.
Но проблема в том, что при изменении количества товара в корзине, перерасчет идет только в компоненте корзины, а оформление заказа, только после перезагрузки страницы.
Как сделать перерасчет на лету везде?
Самый костыльный метод.
Ловишь jquery событие прерасчета цены в корзине по изменению элемента и вписываешь это значение в цену заказа.
А по уму находишь у корзины функцию инициирующую перерасчет и добавляешь туда ajax запрос обновляющий область "оформления заказа"
Вячеслав Климов, ну вот я в теории так и представлял на событие. А сами не сталкивались, не приходилось искать функцию инициирующую перерасчет? Я попробовал поискать, но по времени был ограничен и пока не удалось найти, сегодня собираюсь продолжить поиск, но вдруг Вы знаете.
dikey58, я думал вопрос из разряда где мне галочку поставить, чтобы все заработало как я хочу))
Начал ковырять код и офигеть, оказывается такая галочка есть. Ставишь на одну страницу sale.basket.basket и sale.order.ajax, у sale.basket.basket ставишь параметр BASKET_WITH_ORDER_INTEGRATION = Y и офигеваешь от того что битриксоиды нигде даже не задокументировали такую фишку
Эк сурово забрались. лезть в код компонента если не хочешь кастомизировать дело безблагодатное. Лучше поискать события в шаблоне компонента sale.basket.basket. например в дефолтном шаблоне в файле js\component.js есть подходящая функция applyPriceAnimation в которую можно подцепится и конечную сумму ттам же считать.
Вячеслав Климов, так наоборот - решение нашли максимально простое. Осталось только с удалением товаров разобраться. Или Вы в последнем комментарии как раз про удаление говорите?
dikey58, Нет я в целом про обходной путь. Как сказал PetrPo то решение сыроватое. А лично я с сырыми решениями битрикса не рискую связываться, баги случаются в самых неожиданных местах. Но если это решит ваши задачи, то и отлично.
Всё гениальное просто как оказывается!
У компонента "Корзина" есть вот такой параметр, который эту проблему решает: "BASKET_WITH_ORDER_INTEGRATION" => "Y"
При этом компонент "Оформление заказа" должен быть добавлен на страницу корзины cart/index.php
Одно мне не понравилось - при удалении всех элементов корзины форма оформления заказа остается неизменной. Если кто найдет решение этой проблемы - отпишитесь, пожалуйста.
Есть ещё один неприятный нюанс - если при оформлении заказа применяются скидки, зависящие от опций заказа, например от службы доставки, то при смене службы доставки, пересчёт цен идёт только в компоненте заказа, а в компоненте корзины остаются исходные цены. Недопиленная немного интеграция. Я не нашёл, как это исправить, пришлось допиливать вручную.