Тема: Как сделать запрос к корзине и её обновить.

Здравствуйте, интересует вопрос по корзине. Создал свою тему для сайта. В любом месте где есть добавить товар в корзину стоит кнопка <a href="{$router->getUrl('shop-front-cartpage', ["add" => $product.id])}" class="button button--h35 button--pink button--to-cart">В корзину</a>

Сама корзина реализована модальным окном которая присутствует на всех страницах

{if ModuleManager::staticModuleExists('shop')}
{static_call var=cart callback=['\Shop\Model\Cart','currentCart']}

{* Корзина *}
{moduleinsert name="\Shop\Controller\Block\Cart" }
{/if}
т.е. выводится кол-во и сумма. при нажатии на кнопку открыть корзину открывается модалка с товарами. Дак вот собственно вопрос. если я добавляю товар в корзину. то он как бы добавляется но изменения в корзине происходят только после обновления страницы. Интересует вопрос как реализовать это чтоб без обновления было

Повысить оценку Понизить оценку

2 Отредактировано Александр (25.06.2015 14:07:31)

Re: Как сделать запрос к корзине и её обновить.

Вам надо запросить блок контроллер корзины Аяксом, система поймёт, что это аякс и ответит содержимым блок контроллера, он сгенерирует html и ответит json ответом, где будет как раз тот html.

Как запросить данный блок контроллер?

url на блок контроллер корзины будет такой:

{$router->getUrl('shop-block-cart')}

Соответственно его надо записать в шаблоне. Я предлагаю записать его в атрибут data-url у оборачивающего контейнера Вашего блока с краткой корзиной. Например:

<div id="cartBlockWrapper" data-url="{$router->getUrl('shop-block-cart')}">
...
</div>

Вот из этого дива можно будет потом взять значение из data-url
За отправку запроса на добавление товара отвечает скрипт с именем common.js. Как только запрос с добавлением корзины будет успешно выполнен, Вам надо будет отослать запрос на получение корзины.
Самая последняя функция которая срабатывает в данном скрипте это updateCartBlock. Она как раз ловит ответ от корзны с краткими сведениями. Вот в конце неё надо будет Вам вызвать этот ajax запрос. Адрес можно взять из оборачивающего контейнера, для приведённого нашего случаю это будет так:

var url = $("#cartBlockWrapper").data('url'); 

Отработать его и заменить содержимое оборачивающего контейнера блока корзины Вашей (cartBlockWrapper как оговаривалось выше).
Для того, чтобы увидеть, что приходит от сервера воспользуйтесь командой console.log(); и панелью консоли в FireFox например.

3 Отредактировано Николай (25.06.2015 14:09:21)

Re: Как сделать запрос к корзине и её обновить.

хотел уточнить

shop-block-cart

это что? стиль id ?? или системное имя какое то?

{$router->getUrl('shop-block-cart')}"

вот тут вот которое

Повысить оценку Понизить оценку

Re: Как сделать запрос к корзине и её обновить.

это id маршрута. У нас используется система маршрутов. Т.е. по маршрутам запрашивается определённый блок. Или фронт контроллер.
Маршруты в ReadyScript

shop-block-cart = /modules/shop/contoller/block/cart.inc.php

Вы же когда ссылку на купить товар подставляете у Вас используется

{$router->getUrl('shop-front-cartpage', ["add" => $product.id])}

shop-front-cartpage = /modules/shop/controller/front/cartpage.inc.php
Просто для фронт контроллер есть свои псевдонимы, иначе бы в ссылке оказалось бы shop-front-cartpage