FROM CACHE - jp_header
解決済

スニペットファイルで、セクションファイル内の特定のブロックの有無で条件を分ける記述方法

nishi-ec
Shopify Partner
35 2 4

テーマはDawnを使用しています。

sectionsフォルダの「main-product.liquid」にて、snippetsフォルダのファイル「buy-buttons.liquid」が下記の通り読み込まれています。

{%- render 'buy-buttons', block: block, product: product, product_form_id: product_form_id, section_id: section.id, show_pickup_availability: true -%}

また、「main-product.liquid」には下記のブロックを追加してあります。

 {
      "type": "custom-checkbox",
      "name": "チェックボックス",
      "limit": 1,
      "settings": [
        {
          "type": "checkbox",
          "id": "show_custom-checkbox",
          "default": true,
          "label": "チェックボックスエリアを表示する",
          "info": "info"
        },
        {
          "type": "checkbox",
          "id": "show_custom-checkbox02",
          "default": true,
          "label": "ラベル",
          "info": "info"
        }
      ]
    }

上記のブロックが存在する時だけ、「buy-buttons.liquid」内で表示したい内容があるのですが、

「buy-buttons.liquid」内で以下のように記述しても、「チェックボックスのブロックが存在しなければ実行」が表示されてしまいます。(「チェックボックスのブロックが存在したら実行」が表示されてほしい。)

{%- if block.settings.show_custom-checkbox != blank -%}
    チェックボックスのブロックが存在したら実行
{%- else -%}
    チェックボックスのブロックが存在しなければ実行
{%- endif -%}
 

ifの表記を下記に変更しても同じ結果でした。

{%- if block.settings['show_custom-checkbox'] != blank -%}

もしお気づきの点がありましたらアドバイスいただけますと幸いです。

よろしくお願いいたします。

 

追記:ifの表記を下記に変更しても同じ結果でした。

{%- if block.settings.show_custom-checkbox -%}
1 件の受理された解決策

Qcoltd
Shopify Partner
1051 429 414

成功

@nishi-ec 様

 

動作確認をしていないため、うまく機能しないかもしれませんが、

ご参考までに回答いたします。

 

また、「main-product.liquid」には下記のブロックを追加してあります。

 

こちらは、main-product.liquidの下記の「たくさんのblockの記述」の1つとして追加された、ということですね。

{% schema %}
{
  "name": "t:sections.main-product.name",
  "tag": "section",
  "class": "section",
  "blocks": [
  // たくさんのblockの記述
  ]

 

buy-buttons.liquid内のblockに渡されているのは、

section.blocks['buy-buttons']だけなので、

section.blocks['custom-checkbox']を明示的に、

buy-buttons.liquidに渡してあげる必要がありそうです。

 

まず、

{%- render 'buy-buttons', block: block, product: product, product_form_id: product_form_id, section_id: section.id, show_pickup_availability: true -%}

こちらの記述を、下記のように変更します。

{%- assign custom_checkbox_block = '' -%}
{%- for block in section.blocks -%}
  {%- case block.type -%}
    {% when "custom-checkbox" %}
      {%- assign custom_checkbox_block = block -%}
  {%- endcase -%}
{%- endfor -%}
{%- render 'buy-buttons', block: block, product: product, product_form_id: product_form_id, section_id: section.id, show_pickup_availability: true, custom_checkbox_block: custom_checkbox_block -%}

 

こうすることで、

buy-buttons.liquidの中で、

custom_checkbox_block.settings.show_custom-checkbox

 のようにすれば値を参照できるはずです。

 

custom-checkboxの値を渡すためにfor文とcaseで無理やり変数に格納している部分が、もっとスマートな方法がありそうですが、取り急ぎ考え方だけでも参考になればと思います。

 

ご参考まで。

(キュー田辺)

株式会社Q (キュー)
グラフィックデザイン、アパレル事業、Web制作など色々やっている渋谷区代々木の会社です。ShopifyでのECサイトの運営・開発も行なっています。
私たちについて: https://web.q-co.jp/ テックブログ: https://techlab.q-co.jp/

元の投稿で解決策を見る

2件の返信2

Qcoltd
Shopify Partner
1051 429 414

成功

@nishi-ec 様

 

動作確認をしていないため、うまく機能しないかもしれませんが、

ご参考までに回答いたします。

 

また、「main-product.liquid」には下記のブロックを追加してあります。

 

こちらは、main-product.liquidの下記の「たくさんのblockの記述」の1つとして追加された、ということですね。

{% schema %}
{
  "name": "t:sections.main-product.name",
  "tag": "section",
  "class": "section",
  "blocks": [
  // たくさんのblockの記述
  ]

 

buy-buttons.liquid内のblockに渡されているのは、

section.blocks['buy-buttons']だけなので、

section.blocks['custom-checkbox']を明示的に、

buy-buttons.liquidに渡してあげる必要がありそうです。

 

まず、

{%- render 'buy-buttons', block: block, product: product, product_form_id: product_form_id, section_id: section.id, show_pickup_availability: true -%}

こちらの記述を、下記のように変更します。

{%- assign custom_checkbox_block = '' -%}
{%- for block in section.blocks -%}
  {%- case block.type -%}
    {% when "custom-checkbox" %}
      {%- assign custom_checkbox_block = block -%}
  {%- endcase -%}
{%- endfor -%}
{%- render 'buy-buttons', block: block, product: product, product_form_id: product_form_id, section_id: section.id, show_pickup_availability: true, custom_checkbox_block: custom_checkbox_block -%}

 

こうすることで、

buy-buttons.liquidの中で、

custom_checkbox_block.settings.show_custom-checkbox

 のようにすれば値を参照できるはずです。

 

custom-checkboxの値を渡すためにfor文とcaseで無理やり変数に格納している部分が、もっとスマートな方法がありそうですが、取り急ぎ考え方だけでも参考になればと思います。

 

ご参考まで。

(キュー田辺)

株式会社Q (キュー)
グラフィックデザイン、アパレル事業、Web制作など色々やっている渋谷区代々木の会社です。ShopifyでのECサイトの運営・開発も行なっています。
私たちについて: https://web.q-co.jp/ テックブログ: https://techlab.q-co.jp/
nishi-ec
Shopify Partner
35 2 4

ご教示頂いた内容で正常に動作し、解決しました。

ありがとうございます。