Drupal Commerce — мощный модуль для создания интернет-магазинов на основе Drupal. Однако, многие новички могут столкнуться с вопросом, как добавить товар в корзину и изменять количество товаров в корзине со страницы товара. В этой статье мы рассмотрим основные шаги для решения этой задачи и предоставим примеры кода для вашего удобства.

1. Добавление товара в корзину

Для добавления товара в корзину со страницы товара, вам потребуется создать ссылку или кнопку, которая будет инициировать этот процесс. Ниже приведен пример кода для создания кнопки «Добавить в корзину».


<a href="/cart/add/{product_id}" class="btn-add-to-cart">Добавить в корзину</a>

В данном примере, {product_id} — это идентификатор товара, который должен быть заменен на фактический идентификатор вашего товара. Когда пользователь нажимает на кнопку «Добавить в корзину», товар будет добавлен в корзину, а страница будет перенаправлена на страницу корзины.

2. Изменение количества товаров в корзине

Чтобы изменить количество товаров в корзине, вам нужно вызвать функцию Drupal Commerce для обновления количества товаров в корзине. Ниже приведен пример кода для изменения количества товаров.


/**
 * Изменяет количество товаров в корзине.
 */
function mymodule_update_cart_quantity($order_id, $product_id, $quantity) {
  $order = commerce_order_load($order_id);
  if ($order) {
    $wrapper = entity_metadata_wrapper('commerce_order', $order);
    $line_items = $wrapper->commerce_line_items->value();

    foreach ($line_items as $line_item) {
      if ($line_item->line_item_label == $product_id) {
        $line_item->quantity = $quantity;
        $line_item->save();
        break;
      }
    }
  }
}
mymodule_update_cart_quantity($order_id, $product_id, $new_quantity);

В этом примере, $order_id — это идентификатор заказа, $product_id — это идентификатор товара, а $new_quantity — это новое количество товара, которое вы хотите установить. Когда функция вызывается, она обновляет количество товаров в корзине.

Дополнительные вопросы и ответы

1. Как удалить товар из корзины?

Чтобы удалить товар из корзины, вы должны вызвать функцию Drupal Commerce для удаления соответствующего товара. Ниже приведен пример кода для удаления товара из корзины.


/**
 * Удаляет товар из корзины.
 */
function mymodule_remove_product_from_cart($order_id, $line_item_id) {
  $order = commerce_order_load($order_id);
  if ($order) {
    $line_item = commerce_line_item_load($line_item_id);
    if ($line_item) {
      $line_item_wrapper = entity_metadata_wrapper('commerce_line_item', $line_item);
      $line_item_wrapper->delete();
    }
  }
}
mymodule_remove_product_from_cart($order_id, $line_item_id);

В этом примере, $order_id — это идентификатор заказа, а $line_item_id — это идентификатор элемента линии товара, который вы хотите удалить.

2. Как получить общее количество товаров в корзине?

Чтобы получить общее количество товаров в корзине, вам нужно запросить соответствующую информацию из объекта заказа. Ниже приведен пример кода для получения общего количества товаров в корзине.


$order = commerce_order_load($order_id);
if ($order) {
  $wrapper = entity_metadata_wrapper('commerce_order', $order);
  $line_items = $wrapper->commerce_line_items->value();
  $total_quantity = 0;
  
  foreach ($line_items as $line_item) {
    $total_quantity += $line_item->quantity;
  }
  
  print 'Общее количество товаров в корзине: ' . $total_quantity;
}

В этом примере, $order_id — это идентификатор заказа. Когда код выполняется, он выводит общее количество товаров в корзине.

3. Как очистить корзину полностью?

Чтобы очистить корзину полностью, вам нужно удалить все элементы линии товара из объекта заказа. Ниже приведен пример кода для очистки корзины.


/**
 * Очищает корзину полностью.
 */
function mymodule_clear_cart($order_id) {
  $order = commerce_order_load($order_id);
  if ($order) {
    $wrapper = entity_metadata_wrapper('commerce_order', $order);
    $line_items = $wrapper->commerce_line_items->value();
    
    foreach ($line_items as $line_item) {
      $line_item_wrapper = entity_metadata_wrapper('commerce_line_item', $line_item);
      $line_item_wrapper->delete();
    }
  }
}
mymodule_clear_cart($order_id);

В этом примере, $order_id — это идентификатор заказа. При выполнении функции, она удаляет все элементы линии товара из корзины.