同じ商品タイプを同時に購入できないようにしたい

下記の書き方で商品グループAと商品グループBが一緒にカートに入ったときに
チェックアウトが表示されないようにしてるのですが、
それにプラスして商品グループB同士の違う商品がカートに入ったときでもチェックアウトが表示されないようにすることは可能でしょうか?

{%- for item in cart.items -%}
{%- if item.product.type == ‘商品グループA’ -%}
{% assign typeA = true %}
{%- endif -%}
{%- if item.product.type == ‘商品グループB’ -%}
{% assign typeB = true %}
{%- endif -%}
{%- endfor -%}
{%- unless typeA == true and typeB == true -%}
購入ボタン
{%- endunless -%}

@20220314

初めまして。新垣です。

こちらはいかがでしょうか。

{% assign typeA_count = 0 %}
{% assign typeB_count = 0 %}

{%- for item in cart.items -%}
  {%- if item.product.type == '商品グループA' -%}
    {% assign typeA_count = typeA_count | plus: 1 %}
  {%- elsif item.product.type == '商品グループB' -%}
    {% assign typeB_count = typeB_count | plus: 1 %}
  {%- endif -%}
{%- endfor -%}

{%- if typeA_count > 0 and typeB_count > 0 -%}
  #AタイプとBタイプの商品が同時に1点以上ある場合チェックアウトを非表示にする
{%- elsif typeB_count > 1 -%}
  #商品グループBが2つ以上ある場合もチェックアウトを非表示にする
{%- else -%}
  購入ボタン
{%- endif -%}

参考になりましたら幸いです。

1 Like

参考になりましたありがとうございます。

商品グループB同士の同じproduct_idの場合はチェックアウトを表示したいのですが可能でしょうか?

下記のコードをお試しください。

{% assign typeA_count = 0 %}
{% assign typeB_count = 0 %}
{% assign typeB_unique_products = '' %}

{%- for item in cart.items -%}
  {%- if item.product.type == '商品グループA' -%}
    {% assign typeA_count = typeA_count | plus: 1 %}
  {%- elsif item.product.type == '商品グループB' -%}
    {% assign typeB_count = typeB_count | plus: 1 %}
    {% unless typeB_unique_products contains item.product.id %}// typeB_unique_productsにカート内itemのidが含まれていない場合
      {% assign typeB_unique_products = typeB_unique_products | append: item.product.id | append: ',' %} // typeB_unique_productsにカート内itemのidを格納
    {% endunless %}
  {%- endif -%}
{%- endfor -%}

// カートに含まれる商品グループBの異なる商品の数を計算
{%- assign typeB_unique_count = typeB_unique_products | split: ',' | size | minus: 1 -%}

{%- if typeA_count > 0 and typeB_count > 0 -%}
  #AタイプとBタイプの商品が同時に1点以上ある場合チェックアウトを非表示にする
{%- elsif typeB_unique_count > 1 -%}
  #商品グループBの異なる商品が2つ以上ある場合もチェックアウトを非表示にする
{%- else -%}
  購入ボタン
{%- endif -%}

// カートに含まれる商品グループBの異なる商品の数を計算の部分でminus:1をしているのは、splitメソッドによって追加される余分な空の要素を除外するためです。

ありがとうございます。

試してみたのですが

typeBの商品が入ったときはidに関わらずチェックアウトが出る状態になってしまいました、、