В ajax не силен, посему вопросы. Как смотреть по какому адресу уходит запрос? В форме для добавления одного товара action="" Как перехватить нажатие submit. По событию onsubmit или onclick?
когда давишь на submit, форма отправляет get или post — запрос. можно перехватить это нажатие, пройтись по форме и по каждому из выбранных товаров (чей чекбокс включен) сформировать отдельный ajax-запрос. т.е. на сервер не один запрос уйдет, а несколько. Посмотри, по какому адресу уходит запрос при добавлении одного товара, составляющие запроса и просто в цикле повторяешь столько раз, сколько надо.
можно и javascript цикл сделать, с последовательным добавлением нескольких товаров, через ajax . Можно этот момент поподробнее описать. Я вот в упор не понимаю, как там оно с помощью ajax обрабатывается (товар в корзину добавляется). Набор опций к каждому товару индивидуален и галочек может как не быть вовсе, так и отмечены могут быть все покупателем.
Так это процессоры для вывода содержимого корзины, мне же надо добавить в корзину несколько товаров с 1 нажатия. Я так понимаю, что это процессор add.class.php и все с ним связанные. Как оно работает до меня немного не доходит — особенно в связке с ajax. А что касается MODxSDK — действительно очень удобная вещь, я теперь в нем только и работаю, благодаря вебинарам Fi1osof-а
за добавление товаров отвечает процессор web/orders/products/add.class.php, namespace basket. на самом деле, можно и javascript цикл сделать, с последовательным добавлением нескольких товаров, через ajax, нужно только при формировании формы прописать в нее коды сопутствующих товаров и их количества. Вообще, если эти товары добавляются по умолчанию, то проще тогда оформить набор как самостоятельный товар и не греть голову.
Сам процессор корзины лежит тут, если не ошибаюсь: Filesystem/Core/components/basket/processors/basket/mgr/orders/products/getdata.class.php Его на финальной стадии расширяет следующий процессор: Filesystem/Core/components/basket/processors/basket/web/orders/products/getdata.class.php И всё это упирается в итоге в smarty-шаблоны вывода корзины. Редактировать, полагаю, надо mgr-процессор, расширяющий базовый процессор getdata. Сам с xPDO не работал, тут не помогу. Если где ошибся — гуру, поправьте = ) Но хоть направление для изысканий задам. Кстати, если еще не взято на вооружение — в редактировании очень помогает ModxSDK из репозитория Fi1osof, очень уж классный там редактор кода = )
А там уже можете добавить условия поиска. К примеру, хотите в условие добавить товары в ценовой вилке 100 — 5000 рублей. Добавляете условие: $q->where(array( "Product.sm_price between 100 and 5000", )); или $q->where(array( "sm_price:>=" => 100, "sm_price:<" => 5000, ));
Вообще проще всего использовать процессор web/resources/getdata. Но если у вас задача перебрать большое количество товаров, то да, надо запрос делать на чистом xPDO. Но надо для этого четко понимать что есть что. ShopmodxResourceProduct — производный от modResource класс документа товара. ShopmodxProduct — дополнительный класс товара. По сути, чтобы получить только товары, надо в запросе таблицы этих объектов объединить джоином. Вот пример выборки: $q = $modx->newQuery('modResource'); $q->innerJoin('ShopmodxProduct', 'Product'); $q->where(array( "deleted" => 0, "published" => 1, )); $q->select(array( "modResource.*", )); $s = $q->prepare(); $s->execute(); while($row = $s->fetch(PDO::FETCH_ASSOC)){ // Ваш код }
Не знаю где спросить… Не подскажите как сделать поиск по товарам чтобы выводилось через fetch, может где готовый компонент есть =)?