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での実装部分もあるので、大変かと思いますが、またわからないことがあれば聞いてください!
サポートの選択肢が増えていく中、最適となる選択の判断が難しくなっているかと存じます。今回は問題の解決に最適となるサポートの選択方法を、紹介させて頂きます。 選択肢のご紹介...
By Mirai Oct 7, 20242023年初頭、Shopifyペイメントアカウント、及びShopifyアカウント全体のセキュリティを強化する為の変更が適用されました。ユーザーのアカウントセキュリティを強化す...
By Mirai Sep 30, 2024概要: 年末/年明けは、消費者が最もショッピングを行う時期の一つです。特に、ブラックフライデー・サイバーマンデー(BFCM)は、世界中で注目される大規模なセールイベントであ...
By JapanGuru Sep 25, 2024