shate 14 октября 2014 0 5
Стоит задача после вывода и выбора товара сразу, без перезагрузки страницы, выводить форму обратной связи с параметрами товара.
Поскольку добавление товара в корзину реализовано аяксом, то вроде как для этого нет препятствий.
Логика такая - товар добавили в корзину, после этого проверили есть ли добавление и есть ли сам объект в корзине, если есть, то загружаем форму заказа. Для этих целей использую вот этот блок:

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


Но вместо ожидаемого вывода формы ОС непосредственно после клика на кнопке "купить", выводится строка с количеством и суммой товара. Если страницу перегрузить, то тогда выводится и сама форма.
Подскажите, плиз, откуда берется строка, если в шаблоне ее нет? Какой скрипт ее туда всобачивает?
5 комментариев
proxyfabio1
proxyfabio 14 октября 2014г в 18:41 #
Привет.

Подскажите, плиз, откуда берется строка, если в шаблоне ее нет? Какой скрипт ее туда всобачивает?

За отображение измененных данных отвечает скрипт shopmodx._basket.widget.js. Там есть метод resetBasket. Он то и отвечает за визуализацию корзины.

Пока я читал пост и пытался понять логику твоих действий, у меня сложилось ощущение, что ты путаешь белое с черным. Сделаю одну поправку: мы говорим о базовом функционале сборки (в частности фронтенда).

Но вместо ожидаемого вывода формы ОС непосредственно после клика на кнопке "купить", выводится строка с количеством и суммой товара. Если страницу перегрузить, то тогда выводится и сама форма.

Ожидать появление формы тут не стоит в принципе. При добавлении товара срабатывает событие и вызывается метод обновления корзины (js). И все.
Ты же прописываешь условие для отображения в смарти-шаблоне. Но это бэкенд! При рендеринге страницы, когда еще ни одного товара не добавлено, этой формы не будет в принципе. Так что тут хоть волосы рви, а ничего не появится, даже если ты бы модифицировал метод обновления корзины…
s
shate 14 октября 2014г в 19:02 #
При рендеринге страницы, когда еще ни одного товара не добавлено, этой формы не будет в принципе.


Ну это само-собой, откуда ей появиться, если товаров нет. Это понятно. Но что мешает ей появится сразу же после его добавления? Данные товара грузятся в корзину аяксом, т.е. их можно получить без перезагрузки страницы по событию добавления товара в корзину. Рендерится же количество и сумма заказа по этому событию.

proxyfabio1
proxyfabio 14 октября 2014г в 19:13 #
Но что мешает ей появится сразу же после его добавления?

Вопрос не в том, что мешает, а в том как ты ее собираешься получить/отобразить. Я твоего кода вызова формы не видел, так что мне больше сказать по этому вопросу нечего.

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

Ну да, у нас в сборке получаются данные товаров и корзины (сырые данные, не html), но это все. Следует ознакомится с тем, какие данные и каким образом получаются. Потом уже придет понимание, как реализовать поставленную задачу.

s
shate 14 октября 2014г в 19:33 #
Понятно что не html, его я и сам могу вставить. Т.е. по событию добавления товара вместо вставки цены и количества, я вставлю html код корзины как innerhtml() блока, а из $basket_result.object вытащу нужные данные.
Думаю, должно получиться
s
shate 14 октября 2014г в 19:18 #
Все же, спасибо за наводку. Теперь понятно в какую сторону копать
Авторизуйтесь или зарегистрируйтесь (можно через соцсети ), чтобы оставлять комментарии.