Drupal → Программно получить список товаров в корзине Drupal Commerce

31.05.2013

Пример получения идентификаторов товаров в корзине текущего пользователя:

$product_ids = array();
if (($order_id = commerce_cart_order_id($GLOBALS['user']->uid)) != FALSE) {
  $order_wrap = entity_metadata_wrapper('commerce_order', $order_id);
  $line_item_types = commerce_product_line_item_types();
  foreach ($order_wrap->commerce_line_items as $line_item) {
    if (in_array($line_item->type->value(), $line_item_types)) {
      $product_ids[] = $line_item->commerce_product->product_id->value();
    }
  }
}

Аналогичный filter handler для Views — Commerce Views Product in Cart filter.

Написанное актуально для
Drupal Commerce 1
Похожие записи

Комментарии

Андрей
03.06.2013, 11:40

Вопрос на счет id пользователя

  $GLOBALS['user']->uid;

Не правильней будет вытянуть его так;

  global $user;
  $user->uid;

без разницы
первый вариант просто короче

dansamara
04.06.2013, 21:28

Андрей, запись:

global $user;

Эквивалентна записи:

$user = &GLOBALS['user'];

Другими словами это синтаксический сахар. global $user; имеет смысл использовать, если $user будет в дальнейшем использоваться ещё. А так, зачем лишняя переменная?

(хотя в PHP, с его миллионом переменных и массивов, сидящих в памяти, одна переменная - мелочь...)

Андрей
04.06.2013, 23:40

dansamara, в общем согласен. Но вопрос у меня возник потому что
запись такого типа

global $user;

В Друпале используется практически во всех модулях, и в ядре тоже

Гость
05.06.2013, 03:56

(хотя в PHP, с его миллионом переменных и массивов, сидящих в памяти, одна переменная - мелочь...)

Лирика?

dansamara
05.06.2013, 08:23

global $user; В Друпале используется практически во всех модулях, и в ядре тоже

Так сексуальнее же ;)
Если серьёзно, то считаю, что в сниппетах надо обязательно использовать $GLOBALS['user'], ибо неизвестно, куда приведённый код вставят. У меня был случай, когда я в своём модуле переносил код из одного места в другой и global $user у меня оказался в середине кода, переопределив существующую переменную $user. В результате получил красивый баг - все, кто заходил в профиль пользователя становился этим пользователем. Ошибка обнаружилась не сразу :)

Лирика?

Плач Ярославны )

О_о, вроде, знакомый код. Если не ошибаюсь, то вы это делали для задачи, где нужно было достать зависимые товары по энтити рефернс для товаров из корзины. Ваш, конечно, намного правильней - с использованием обвертки энтити. Интересно смогли вы достать ему определенную вариацию товара без писания своего кода? Из-за того, что с коммерс работал в первый раз, и еще не уловил все, я так и не допер как это сделать из админки.
Все это конечно если я не ошибаюсь, возможно, вы делали это для другой задачи.

Добавить комментарий