Shopify テーマ、Liquid、ロゴ、その他の類似トピック
お世話になっております。
ギフトカード の画像について、オプションごとに変更したいのですが方法はありますか?
商品の値段で判定する方法をみつけましたが(以下コードです)、それだと値段が同じ場合に正しく動作しません。
・gift_card.liquid
<div class="giftcard-wrapper">
<main class="giftcard" role="main">
<div class="giftcard__wrap">
{% for variant in gift_card.product.variants %}
{% if variant.price == gift_card.product.price %}
<img class="giftcard-image" src="{{ gift_card.product.images[forloop.index0] | img_url:'1024x' }}">
{% endif %}
{% endfor %}
idみたいな識別子で判断したいのですが、gift_card.productのオブジェクトはそのようなプロパティがないように思えます。
よろしくお願いします。
解決済! ベストソリューションを見る。
成功
調べましたら確かに該当する情報は取れなそうですね...。ギフトカードのことをあまり把握しておらず申し訳ありません。
もしかしましたら取れる方法があるかもしれませんが、興味がありましたのでJSでどうにかする方法を考えてみました。
概要は以下のようなものです。
以下がDebutテーマで動作を確認したサンプルコードですが、テーマごとに違いがあるかもしれませんので、ID名などは適宜差し替える必要があるかもしれません。
product_template.liquidに{% form 'product' %}(実際にはもう少し長い記述ですが)がありますので、この中に以下のようにinputタグを書きます。
JSをここに書く必要はありませんが説明の都合上ここに入れていてます。
{% form 'product' %}
{{ comment }}いろいろ省略{{ endcomment }}
<input id="SelectOptionValue" type="hidden" name="properties[_selectOptionValue]" value="{{product.selected_or_first_available_variant.option1}}" />
<script>
window.addEventListener('DOMContentLoaded', () => {
const selecter = document.getElementById('SingleOptionSelector-0');
const selectOptionValue = document.getElementById('SelectOptionValue');
selectOptionValue.value = selecter.value;
selecter.addEventListener('change',function(){
selectOptionValue.value = event.target.value;
},false);
})
</script>
{{ comment }}いろいろ省略{{ endcomment }}
{% endform %}
あとはgift_card.liquidで以下を書けばproperties[]の値が取れるので、それを用いて分岐を作れるかと思います。
こちらまでは試作していませんのでうまくいくかわかりませんが、properties[]に入れる値を変えて試されるなど応用は効くかなと思います。
{{ gift_card.properties['_selectOptionValue']}}
以上ですがこのコードが必要な商品は全体の一部だと思いますので、タグなりなんなりで商品ページでの出力対象を制限するのもよいかと思います。
冒頭に少し書きましたが、こんなことをせずとも用意された値のみで実現できる方法があるかもしれませんので、その場合は無駄なコードとなり申し訳ありません。
実際に試していないのであっているかわかりませんが、variant objectまで取れているのであれば以下のヘルプにあるidやskuの値も取れると思います。
https://shopify.dev/docs/themes/liquid/reference/objects/variant/
コメントありがとうございます。
{% if variant.price == gift_card.product.price %}
説明不足で申し訳ないのですが、
おっしゃるとおり、`variant`オブジェクトには、idがあり識別できそうです。
しかし`gift_card.product` のオブジェクトの中に、今開いているギフトカードのidがなく、判断ができなそうで困っているという状況です。
gift_card.productについて、何かギフトカード の商品を特定できるプロパティが含まれていますでしょうか?
そのほか、他のやり方で何か方法があればご教示いただけますと幸いです。
成功
調べましたら確かに該当する情報は取れなそうですね...。ギフトカードのことをあまり把握しておらず申し訳ありません。
もしかしましたら取れる方法があるかもしれませんが、興味がありましたのでJSでどうにかする方法を考えてみました。
概要は以下のようなものです。
以下がDebutテーマで動作を確認したサンプルコードですが、テーマごとに違いがあるかもしれませんので、ID名などは適宜差し替える必要があるかもしれません。
product_template.liquidに{% form 'product' %}(実際にはもう少し長い記述ですが)がありますので、この中に以下のようにinputタグを書きます。
JSをここに書く必要はありませんが説明の都合上ここに入れていてます。
{% form 'product' %}
{{ comment }}いろいろ省略{{ endcomment }}
<input id="SelectOptionValue" type="hidden" name="properties[_selectOptionValue]" value="{{product.selected_or_first_available_variant.option1}}" />
<script>
window.addEventListener('DOMContentLoaded', () => {
const selecter = document.getElementById('SingleOptionSelector-0');
const selectOptionValue = document.getElementById('SelectOptionValue');
selectOptionValue.value = selecter.value;
selecter.addEventListener('change',function(){
selectOptionValue.value = event.target.value;
},false);
})
</script>
{{ comment }}いろいろ省略{{ endcomment }}
{% endform %}
あとはgift_card.liquidで以下を書けばproperties[]の値が取れるので、それを用いて分岐を作れるかと思います。
こちらまでは試作していませんのでうまくいくかわかりませんが、properties[]に入れる値を変えて試されるなど応用は効くかなと思います。
{{ gift_card.properties['_selectOptionValue']}}
以上ですがこのコードが必要な商品は全体の一部だと思いますので、タグなりなんなりで商品ページでの出力対象を制限するのもよいかと思います。
冒頭に少し書きましたが、こんなことをせずとも用意された値のみで実現できる方法があるかもしれませんので、その場合は無駄なコードとなり申し訳ありません。
サポートの選択肢が増えていく中、最適となる選択の判断が難しくなっているかと存じます。今回は問題の解決に最適となるサポートの選択方法を、紹介させて頂きます。 選択肢のご紹介...
By Mirai Oct 7, 20242023年初頭、Shopifyペイメントアカウント、及びShopifyアカウント全体のセキュリティを強化する為の変更が適用されました。ユーザーのアカウントセキュリティを強化す...
By Mirai Sep 30, 2024概要: 年末/年明けは、消費者が最もショッピングを行う時期の一つです。特に、ブラックフライデー・サイバーマンデー(BFCM)は、世界中で注目される大規模なセールイベントであ...
By JapanGuru Sep 25, 2024