Liquid、JavaScriptなどに関する質問
テーマは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 -%}
解決済! ベストソリューションを見る。
成功
動作確認をしていないため、うまく機能しないかもしれませんが、
ご参考までに回答いたします。
> また、「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で無理やり変数に格納している部分が、もっとスマートな方法がありそうですが、取り急ぎ考え方だけでも参考になればと思います。
ご参考まで。
(キュー田辺)
成功
動作確認をしていないため、うまく機能しないかもしれませんが、
ご参考までに回答いたします。
> また、「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で無理やり変数に格納している部分が、もっとスマートな方法がありそうですが、取り急ぎ考え方だけでも参考になればと思います。
ご参考まで。
(キュー田辺)
ご教示頂いた内容で正常に動作し、解決しました。
ありがとうございます。
Shopifyの請求書の支払いが失敗したという通知を受け取って驚いたことはありますか。初めての支払いでエラーが発生したり、これまで何の問題もなく支払いできていたのに突然失敗し...
By Minami_ Sep 8, 20242023年2月、Shopifyはcheckout.liquidを廃止し、Checkout Extensibilityに移行することを発表いたしました。この新しいチェックアウト...
By JasonH Aug 15, 2024「味噌の可能性を、とき放つ」をコンセプトに、豊かな自然に恵まれた信州で味噌の製造販売を行う新田醸造。江戸末期に創業した老舗のみそ屋さんですが、2024年春、顧客層や販売範囲の...
By Minami_ Jul 30, 2024