Liquid、JavaScriptなどに関する質問
いつもお世話になっております。
Dawnを使用しています。
バリエーションにメタフィールドを設定して表示させ、バリエーション選択した際に表示を切り替える、といったことが可能でしたら行いたいです。
JavaScriptを使用し、バリエーション選択ボタンにchangeイベントが発生した際にテキスト内容を下記のように変更してみましたが、うまくいきませんでした。
{{ product.selected_or_first_available_variant.metafields.custom.value }}
おそらくページ読み込みをしないと
selected_or_first_available_variant
の部分がうまく反応してくれないのかなと思っています。
金額の表示は、バリエーションの選択を変更すると自動的に変更されるので、金額の実装方法がわかればヒントになるかもしれないと思っているのですが、コードをよく見てみても、勉強不足で私にはわかりませんでした。
金額の実装方法だけでもわかる方がいらっしゃいましたら、教えてください。
よろしくお願いいたします。
解決済! ベストソリューションを見る。
成功
るんさん、返信遅れてすみません。
> 金額のすぐ近くに表示したい場合はこの方法で実装できたのですが、金額から表示を離したい場合はどのようにすれば良いでしょうか?
Dawnの場合、price.liquid以外でやるにはJSの実装が必要です。
Dawnでバリエーションが変わった場合にprice.liquid部分が再レンダリングされる仕組みはassets/global.js内にあるVariantSelectsクラスで行われています。
ざっくりとした説明ですが、
によって金額の動的な変更がされています。
price.liquid以外の部分でも動的に変更するには、
上記で説明したVariantSelectsクラスのrenderProductInfoメソッド内で、動的に変更したい部分のHTMLを入れ替える処理を追加する
でできると思います。
一応別解として、こちらもJSによる実装が必要ですが、
バリエーションごとに切り替えたい要素をすべて非表示の状態でレンダリングさせておき、VariantSelectsクラスで選択されていない要素は非表示に切り替える(非表示のCSSをあてる等)
などでも対応できると思います。
るんさん、はじめまして。
Tsunの小笠原と申します。
Dawnをお使いの場合、バリエーションごとの価格表示はSnipets/price.liquid内で行われています。
price.liquidの上部でprice変数をselected_or_first_available_variantから取得して設定している箇所があります。
assign price = target.price | default: 1999
の箇所です。(targetには直前でproduct.selected_or_first_available_variantが代入されています)
price変数と同様に
assign test_metafield = target.metafields.custom.test_metafield.value
とすることで、バリエーションごとにtest_metafieldの値が変更されませんでしょうか?
手元の環境ではDawn v7.0.1で確認しています。
株式会社Tsun
小笠原様
ご回答ありがとうございます。
確かにこの方法でしたら、バリエーションを切り替えるとメタフィールドの表示も切り替えることができますね!
金額のすぐ近くに表示したい場合はこの方法で実装できたのですが、金額から表示を離したい場合はどのようにすれば良いでしょうか?
こちらもよろしければ教えていただけると助かります。
よろしくお願いいたします。
成功
るんさん、返信遅れてすみません。
> 金額のすぐ近くに表示したい場合はこの方法で実装できたのですが、金額から表示を離したい場合はどのようにすれば良いでしょうか?
Dawnの場合、price.liquid以外でやるにはJSの実装が必要です。
Dawnでバリエーションが変わった場合にprice.liquid部分が再レンダリングされる仕組みはassets/global.js内にあるVariantSelectsクラスで行われています。
ざっくりとした説明ですが、
によって金額の動的な変更がされています。
price.liquid以外の部分でも動的に変更するには、
上記で説明したVariantSelectsクラスのrenderProductInfoメソッド内で、動的に変更したい部分のHTMLを入れ替える処理を追加する
でできると思います。
一応別解として、こちらもJSによる実装が必要ですが、
バリエーションごとに切り替えたい要素をすべて非表示の状態でレンダリングさせておき、VariantSelectsクラスで選択されていない要素は非表示に切り替える(非表示のCSSをあてる等)
などでも対応できると思います。
株式会社Tsun
小笠原様
お返事遅くなりまして申し訳ございません。
詳しく教えていただきましてありがとうございました。
まだコードの中身をきちんと理解できてはいないですが、教えていただいたことを参考にコードをよく見てみようと思います。
ありがとうございました。
るんさん、参考になってよかったです。
JavaScriptでの実装部分もあるので、大変かと思いますが、またわからないことがあれば聞いてください!
ユーザー | ランク |
---|---|
35 | |
11 | |
7 | |
6 | |
6 |
すべてのShopifyアカウントはデフォルトではmyshopify.comのURLと関連付けられており、これはアカウント設定時に使用したビジネス名に基づいて作成されます。しかし、オ...
By Nina_13 Nov 26, 2023このトピックは英語版コミュニティの投稿:Shopify Web Pixel Manager Sandbox FAQの日本翻訳です。
By Mirai Nov 19, 2023Shopifyの管理画面では、商品ごとや配送元のロケーション(倉庫)ごとにカスタム配送料を設定することができます。特に購入金額による送料無料設定は、顧客の購買意欲を高める効果的な手...
By Alex06 Nov 5, 2023