xandeadx.ru Блог музицирующего веб-девелопера

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

Опубликовано в

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

$product_ids = array();
if (($order_id = commerce_cart_order_id($GLOBALS['user']->uid)) != FALSE) {
  $order = entity_metadata_wrapper('commerce_order', $order_id);
  $line_item_types = commerce_product_line_item_types();
  foreach ($order->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
Похожие записи

Комментарии RSS

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

  $GLOBALS['user']->uid;

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

  global $user;
  $user->uid;

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

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

global $user;

Эквивалентна записи:
$user = &GLOBALS['user'];

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

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

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

global $user;

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

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

Лирика?

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

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

Лирика?

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

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

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании