В корзине ($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. Было бы здорово реализовать также функционал для работы с комплектами товаров :)