web-dev-qa-db-ja.com

商取引は製品の数量を1に制限します

特定の商品の数量を制限したい。カートに商品を一度だけ追加したい。これを達成する方法は?

私のストアには3つの商品があり、ユーザーが一度にカートに追加できる商品は1つだけです。

どのフックを使用する必要がありますか?

4
Harkamal

やりたいことは、カートに追加イベントにイベントサブスクライバーを追加することです( https://github.com/drupalcommerce/commerce/blob/8.x-2.x/modules/cart/src/ Event/CartEvents.php#L )。

以下は、そのイベントに反応するコードの例です。これは、Drupal Commerceサイト用で、一度に1つの製品を1つの数量でしか購入できませんでした。

/**
 * Sets quantity to 1 and ensures only one product in the cart.
 *
 * @param \Drupal\commerce_cart\Event\CartEntityAddEvent $event
 *   The cart event.
 */
public function onProductAdded(CartEntityAddEvent $event) {
  // We only want 1 quantity.
  $cart = $event->getCart();
  $added_order_item = $event->getOrderItem();
  $cart_items = $cart->getItems();
  foreach ($cart_items as $cart_item) {
    if ($cart_item->id() != $added_order_item->id()) {
      $cart->removeItem($cart_item);
      $cart_item->delete();
    }
  }

  $quantity = $cart_items[0]->getQuantity();
  if ($quantity > 1) {
    $cart_items[0]->setQuantity(1);
  }

  $cart->save();
}
3
Matt Glaman

https://www.drupal.org/project/commerce_xquantity をインストールし、maxプロパティを/ admin/commerce/config/order-item-types/YOUR_TYPE/edit/form-display/add_to_cartページを1またはその他の値に変更します。したがって、一度にカートに追加ボタンをクリックするか、/ cartで数量を編集します顧客がmaxを超えて追加できないページ。

ただし、全体的に一部のバリエーションの数量を制限する場合は、上記のモジュールのサブモジュールであるCommerce Extended Quantity Stockをインストールします。詳細: https://github.com/drugan/commerce_xquantity/tree/8.x-1.x/modules/xquantity_stock#commerce-extended-quantity-stock

1
drugan