В корзине ($netshop->get_cart_contents() или $netshop->cart->get_items()) и в заказе ($order->get_items()) список товаров представлен в виде коллекции nc_netshop_item_collection.
Коллекция (наследуется от nc_record_collection) реализует интерфейсы Iterator, ArrayAccess, Countable:
$collection = $order->get_items(); $number_of_items = count($collection); foreach ($collection as $item) { echo $item['Name']; } $index = "300:11"; // по умолчанию ключом в коллекции является строка, составленная из ID компонента и ID объекта echo $collection[$index]['ItemPrice'];
Некоторые методы коллекции, которые могут быть полезны:
Метод | Описание |
---|---|
$coll->get_field_sum($property) | Сумма значений по указанному свойству товаров с учётом количества (∑ Field × Qty) |
Следующие методы доступны для всех коллекций nc_record_collection: | |
$coll->where($option_or_method, $value, $comparison_operator = '==', array $method_arguments = null) |
Создаст новую коллекцию, в которой у всех элементов: |
$coll->where_all(array $conditions) |
Вернёт новую коллекцию, в которой элементы удовлетворяют всем условиям $conditions. $collection->where_all(array( array('site_id', 1), array('comment_count', 1, '>=') )); |
$coll->first($option_or_method = null, $value = null, $comparison_operator = '==', array $method_arguments = null) |
Если вызван без параметров — вернёт первый элемент. Если вызван с параметрами — аналогично методу where() |
$coll->any($option_or_method, $value, $comparison_operator = '==', array $method_arguments = null) |
Вернёт истину, если хоть у одного элемента коллекции значение или результат выполнения метода совпадает с указанным значением |
$coll->all($option_or_method, $value, $comparison_operator = '==', array $method_arguments = null) |
Вернёт истину, если у всех элементов коллекции значение или результат выполнения метода совпадает с указанным значением |
$coll->sum($property) |
Сумма значений по указанному свойству элементов коллекции. Например: $cart->get_items()->sum('TotalPrice') — стоимость всех товаров в корзине (со скидкой) |
$coll->min($property), $coll->max($property) | Минимальное / максимальное значение свойства |
$coll->set_index_option($property) | Переиндексировать коллекцию по указанному свойству (должно быть уникальным, иначе элементы коллекции могут быть потеряны). |
Комментарии 4
Может ли этот функционал пригодиться, например, для реализации комплементарных товаров (покупают кофеварку - продаем заодно еще кофе или фильтры), или же данный функционал не подойдет для этого?
Вы можете использовать коллекции товаров по своему усмотрению, если это целесообразно для решения ваших задач.
В целом коллекции по большому счёту заменяют собой массивы с записями об объектах, предоставляя дополнительные возможности для работы с такими списками. Для конкретного приведённого вами примера (список «покупают также») эта функциональность вряд ли будет центральной. Использовать nc_netshop_item_collection будет целесообразно, если вам нужны дополнительные возможности по работе со списком товаров.
p.s. Было бы здорово реализовать также функционал для работы с комплектами товаров :)