Можно посмотреть как это сделано в стандартном магазине - там это сделано на мой взгляд заморочено, понять трудновато. Я до конца не понимаю, тем не менее какие-то изменения вношу. :)
Получается, что нужно отпарсить общее количество товаров и общую сумму.
Для этого нужно отпарсить udata/emarket/cart как xml или json, достать оттуда summary.ammount и summary.price.actual (ну и может ещё валюта нужна будет и т.п.).
localhost/udata/emarket/cart.json
Получается, что после добавления товара в корзину, при обработке ответа, нужно сделать ещё один запрос к корзине и получить описанные выше значения.
Далее пойдёт конкретная отсебятина, возможно это можно сделать иначе:
xhttp=new XMLHttpRequest();
xhttp.open('GET','http://localhost.ru/udata/emarket/cart.json',true);
xhttp.send();
xhttp.onreadystatechange=function(){
if (xhttp.readyState==4){
var json=eval( '('+xhttp.responseText+')' );
Далее нужно смотреть отладчиком как возвращается json и соответственно обрабатывать. К примеру json.summary.amount можно получить прямо так, а внутри price возможно придётся погулять - я что-то забыл как правильно получить доступ к элементам в таком случае..
Для вывода property протокола upage я запускал дважды цикл. первый цикл у меня бегал по group, а второй уже собственно по property. путь к конечному элементы выглядел где-то так: test.page.properties.group[key].property[key1].value.item.name , где test этот json
Нет) Вам не нужна отдельная страница. Вам нужен кастомный макрос. И совсем не нужен json, абсолютно не нужен.
Рассуждаем еще раз. Вы работаете в tpl. Шаблон корзины у вас уже есть. Этот шаблон отрабатывает при перезагрузке страницы и встроен в шаблон страницы.
Логично, что обновить содержимое корзины аяксом можно вызвав тот же самый шаблон корзины, получить от него готовый html (НЕ json), и этот html вставит в div-обертку.
Как это сделать.
Возможно, вы знаете, но повторюсь. В ЮМИ можно обращаться к макросам как к url. Например, %emarket cart()% равен /emarket/cart/
Т.о., необходимо всего лишь аяксом отправить запрос на определенный url и получить ответ. url вам известен - это макрос.
К сожалению, штатный макрос корзины принимает имя шаблона только как параметр функции, по http его передать нельзя. Более того, результат будет отдан в оформлении основного шаблона дизайна. Нам это не подходит.
Поэтому напишем совй кастомный макрос-обертку. Он будет делать:
- принять имя шаблона как GET-параметр
- вызвать штатный макрос
- вернуть результат в чистом виде, без внешнего дизайна.
Выглядеть такой макрос может так:
public function simpleCart(){
$template = htmlspecialchars(getRequest('template'));
if(!$template) $template = 'default';
$mMarket = cmsController::getInstance()->getModule('emarket');
$cart = $mMarket->cart($template);
def_module::flush($cart);
}
Далее добавить для него разрешения в файл permissions.php (или permissions.custom.php, смотря по тому используете ли вы старый или новый шаблонизатор) в ветку purchasing.
Обращаетесь /emarket/simpleCart/?template=top_cart
Задача решена.
Как отправить запрос на квери я не знаю, но раз вы ее используете, проблем у вас быть не должно
Демо http://autonomno.ru/emarket/simpleCart/?template=top_cart
З.Ы.
Что мне здесь не нравится, что при указании неверного имени шаблона раскрывается полный путь на сервере. Было бы интересно узнать как по имени шаблона в юми версии 2.8.5 узнать полный путь к нему и проверить на существование.
Vladimir, по поводу узнать полный путь к шаблону по его имени
$resourcesDir = cmsController::getInstance()->getResourcesDirectory()
в $resourcesDir будет путь к /templates/название_шаблона/ если у текущей страницы назначен именной шаблон иначе данная переменная будет пуста
volchov, по поводу вашей проблемы, на самом деле для tpl абсолютно точно также можно применить механизм /js/site/__common.js. Ну чтобы самому не придумывать. загляните сюда, там выложены материалы с моего курса по езд http://education.umi-cms.ru/information/tpl_advanced/. Скачайте презентацию с курса , там первая же тема описывает как это сделать или может даже на видео видно, что я там рассказывал по поводу подключения данного скрипта к сайту