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での実装部分もあるので、大変かと思いますが、またわからないことがあれば聞いてください!
山田繊維株式会社(むす美)は京都の地で風呂敷製造卸売業:山田貫七商店として昭和12年に創業。メイン商材は1000年以上前から使われているという記録がある風呂敷で、その他ハンカチや袱...
By Nanami Jan 12, 2023過去に失われた売り上げを回復するには?Shopifyの新しい自動化機能を活用し、失われた売り上げを簡単に回復する方法を学びましょう!
By Mirai Jan 10, 2023オンラインストアの構築が完了しましたら、一般公開をする前にいくつかのテスト注文を行い、チェックアウトプロセスを確認することが大事です。Shopifyペイメントをご利用いただいている...
By rinaflora Dec 4, 2022