Стоит задача после вывода и выбора товара сразу, без перезагрузки страницы, выводить форму обратной связи с параметрами товара.
Поскольку добавление товара в корзину реализовано аяксом, то вроде как для этого нет препятствий.
Логика такая - товар добавили в корзину, после этого проверили есть ли добавление и есть ли сам объект в корзине, если есть, то загружаем форму заказа. Для этих целей использую вот этот блок:
div data-smodx-data="cost" class="order_data" {if $basket_result.success && $basket_result.object} {include file="blocks/order-form.tpl"} {else} div class="sum" span class="num" span span class="text"Корзина пуста/span span style="white-space:nowrap;"> div {/if} div
Но вместо ожидаемого вывода формы ОС непосредственно после клика на кнопке "купить", выводится строка с количеством и суммой товара. Если страницу перегрузить, то тогда выводится и сама форма.
Подскажите, плиз, откуда берется строка, если в шаблоне ее нет? Какой скрипт ее туда всобачивает?
Привет.
Подскажите, плиз, откуда берется строка, если в шаблоне ее нет? Какой скрипт ее туда всобачивает?
За отображение измененных данных отвечает скрипт shopmodx._basket.widget.js. Там есть метод resetBasket. Он то и отвечает за визуализацию корзины.
Пока я читал пост и пытался понять логику твоих действий, у меня сложилось ощущение, что ты путаешь белое с черным. Сделаю одну поправку: мы говорим о базовом функционале сборки (в частности фронтенда).
Но вместо ожидаемого вывода формы ОС непосредственно после клика на кнопке "купить", выводится строка с количеством и суммой товара. Если страницу перегрузить, то тогда выводится и сама форма.
Ожидать появление формы тут не стоит в принципе. При добавлении товара срабатывает событие и вызывается метод обновления корзины (js). И все.
Ты же прописываешь условие для отображения в смарти-шаблоне. Но это бэкенд! При рендеринге страницы, когда еще ни одного товара не добавлено, этой формы не будет в принципе. Так что тут хоть волосы рви, а ничего не появится, даже если ты бы модифицировал метод обновления корзины…
При рендеринге страницы, когда еще ни одного товара не добавлено, этой формы не будет в принципе.
Ну это само-собой, откуда ей появиться, если товаров нет. Это понятно. Но что мешает ей появится сразу же после его добавления? Данные товара грузятся в корзину аяксом, т.е. их можно получить без перезагрузки страницы по событию добавления товара в корзину. Рендерится же количество и сумма заказа по этому событию.
Но что мешает ей появится сразу же после его добавления?
Вопрос не в том, что мешает, а в том как ты ее собираешься получить/отобразить. Я твоего кода вызова формы не видел, так что мне больше сказать по этому вопросу нечего.
Данные товара грузятся в корзину аяксом, т.е. их можно получить без перезагрузки страницы по событию добавления товара в корзину. Рендерится же количество и сумма заказа по этому событию.
Ну да, у нас в сборке получаются данные товаров и корзины (сырые данные, не html), но это все. Следует ознакомится с тем, какие данные и каким образом получаются. Потом уже придет понимание, как реализовать поставленную задачу.
Все же, спасибо за наводку. Теперь понятно в какую сторону копать
Понятно что не html, его я и сам могу вставить. Т.е. по событию добавления товара вместо вставки цены и количества, я вставлю html код корзины как innerhtml() блока, а из $basket_result.object вытащу нужные данные.
Думаю, должно получиться