1 Отредактировано Александр (10.06.2015 18:28:09)

Тема: Как получить в блоке выводящем корзину товары

Поступил вот такой вопрос от пользователя:
Добрый день, подскажите.
Есть макет сайта. По задумке справа должна быть корзина с превью товаров которые, пользователь положил в корзину. Не получается туда их вытащить. Кол-во и итоговую сумму сделал а сами товары не
могу. Пытался сделать как в Шаблоне молодежная. Но при нажатии на ссылку Корзина открывается отдельная страница, а не всплывающее окно

Ответ:
В молодёжной теме когда вы нажимаете купить, то к запросу передаётся параметр floatCart=1 на фронт контроллер, который находится в /modules/shop/controller/front/cartpage.inc.php. В шаблон данный параметр попадает как переменная $floatCart.
Для молодёжной темы оформления, срабатывает шаблон /templates/fashion/moduleview/shop/cartpage.tpl.
Так вот если Вы обратите внимание на верх этого шаблона, то там проверяется данная переменная и если floatCart есть, то шаблон выводится по другой ветке данного шаблона.
Также когда вы обрабатываете нажатие купить, то скрипт который его обрабатывает, знает о том, что нужно отобразить благодаря floatCart. И если это floatCart установлен, то html который возвращается тупо заменяет нижнюю панель.
Посмотреть запрос можно с помощью firebug в FireFox на панели Консоль.
Для того, чтобы понять как работает скрипт вы можете открыть файл /templates/fashion/resource/js/common.js
Для того, чтобы отследить весь ход в javascript с помощью команды console.log();

Теперь, что касается получения товара в шаблоне корзины:
В шаблоне перебираются товары с помощью данной конструкции...

{foreach from=$cart_data.items key=index item=item}

А сам товар, после этого можно получить так:

{assign var=product value=$product_items[$index].product}

$product будет являться объектом класса \Catalog\Model\Orm\Product, т.е. ему доступны все функции из файла /modules/catalog/model/orm/product.inc.php

\Shop\Controller\Block\Cart
это блок контроллер в который передаются только общие данные, посмотреть это можно в /modules/shop/controller/block/cart.inc.php

Так вот получить в шаблоне саму корзину вы можете с помощью публичного статического метода из апи корзины.
Само апи лежит в /modules/shop/model/cart.ini.php
А именно \Shop\Model\Cart::currentCart();

Но так как это шаблон, то нужно воспользоваться нашим плагином для вызова статических методов static_call.
Он расписан здесь:
static_call

Т.е. Вам надо прописать так:

{static_call var=cart callback=['\Shop\Model\Cart','currentCart']}

После чего Вам будет доступна корзина в переменной $cart.
Получить товары можно так:

{assign var=product_items value=$cart->getProductItems()}

Сведения о элементах в корзине так:

{assign var=cart_data value=$cart->getCartData()}

А дальше как в шаблоне отображения корзины:
/templates/fashion/moduleview/shop/cartpage.tpl