FROM CACHE - jp_header

顧客タグとセクション内設定による条件分岐

ho-jo
Shopify Partner
8 0 1

ログインした顧客を識別し、トップページのスライダー表示を条件分岐させたいです。

(顧客aaaにはaaa用のスライダー画像だけ、タグされていないユーザーには登録したスライダー全て表示など)

 

顧客に追加したタグにより、ログインした顧客の条件分岐についてはわかりました。

({% if tag contains "aaa" or tag contains "bbb" or tag contains "ccc" %}など)
その上で、セクション内で、顧客別のスライダーを設定したいです。
そのセクションはliquid編集し、スライダー画像は1つづつブロックによって追加します。
ブロックでは、どの顧客向けなのかセレクトで選択できるようにして、その値も取得できました。
(タグされたaaa, bbb, cccとタグのついていない顧客を{{ block.settings.member }}で取得
 
そこから、その取得した値によってfor loopの中身をどのように表示さればよいのか困っています。
以下のように振り分けても、スライダー画像となるブロックが同じものであると意味ないのでしょうか?
顧客タグと登録したスライダーの値を判別して、表示することが可能なのかご教示お願いいたします。
{%- case block.settings.member -%}
{%- when 'aaa' -%}
{%- when 'bbb' -%}
{%- when 'ccc' -%}
{%- when 'all' -%}
{%- endcase -%}
 
※テーマは有料テーマで既存のスライダーセクションを複製し、編集しています。
4件の返信4

Jizo_Inagaki
Shopify Partner
1006 380 697

質問内容を把握しかねていますが、おそらく以下のように考えれば良いのではと思います。

 

■前提

  • block.settings.menber からタグ名が取得できる

■概要

  • ブロックに設定したタグ名が、顧客タグに含まれているか否かを判定する
{% if tag contains block.settings.menber %}
 block.settings.menberの値(=指定タグ)がtagに含まれていれば表示
{% endif %}

ブロック設定側でタグと画像を選択済みの状態だと思いますので、liquid側でcase文を書く必要はないのではと思います。

 

 

以上ですが、それほど検討したわけではなく、サンプルコードも適当に書いているので、問題ありましたら申し訳ありません。

Jizo_Inagaki | フリーランスのwebデザイナー
- テーマのカスタム承れます。
- 記載した回答で解決できましたらベストソリューションの承認をお願いします。
- DMや指名による対応はご依頼として有料でのみ承ります。
ho-jo
Shopify Partner
8 0 1

Jizo_Inagaki 様

ご教示ありがとうございます。

上記の条件分岐で十分でした。ややこしく考えすぎていたみたいです。

呼び出す中身についてなのですが、既存のものに当てはめるとなぜかすべて表示されてしまいます。

<ul>
{%- if customer.tags contains block.settings.member -%}
    <li class="member">ブロックで選択したスライダーの1つ(aaa, bbb, cccのどれか)</li>
{%- else -%}
    <li class="guest">ブロックで選択したスライダーの1つ(aaa, bbb, ccc含む顧客すべて)</li>
{%- endif -%}
</ul>

 既存のスライダーブロックはul li のliがブロックになっており、増減ができるようになっています。

こちらの条件分岐にliを埋め込むだけでは不十分なのでしょうか。.memberと.guestは同じものです。

Jizo_Inagaki
Shopify Partner
1006 380 697

コード拝見しましたが全体的な構造、ブロックやif文などに関する理解や扱い方が間違っているように思います。

 

 

■if文

記載しました block.settings.member を用いたif文は以下のいずれかでしか成立せず、else で「aaa, bbb, ccc含む顧客すべて」という条件は満たせません。

  • 指定した値を持つタグが、含まれる場合
  • 指定した値を持つタグが、含まれない場合

 

 

■block.settings.member の値に基づく動作

該当ブロックは以下の動作になるため、block.settings.member によって画像を出し分ける分岐は必要ないはずです。

  • block.settings.member に設定した値が customer.tags 内に含まれていれば、同ブロックで設定された画像が出力される

必要性があるとすると以下などかなと思いますが、そのような記載はなかったと思います。

  • 「指定タグが含まれた時に出力する画像」と「指定タグが含まれなかった時に出力する画像」の2つの画像設定がある場合
  • タグの数に応じた複数の画像設定がある場合

 

 

■構造の見直し

おそらく検討済みかと思いますが、状況によっては問題が起こる可能性があるものの以下の方法が色々簡単かなと思います。

  • セクション数に余裕があれば、スライダー用セクション自体を複数設置して表示非表示の機能を追加する

 

 

以上ですが、状況的に無料で対応する範囲を超えますので回答はここまでにさせていただきたいと思います。

この後他の方が回答される可能性を考え、失礼かと思いますが以下をお勧めします。

  • 質問時には前提/要件/要望などを箇条書きで提示できる程度に整理する
  • 「aaa, bbb, ccc含む顧客すべて」既存のもの」.memberと.guestは同じもの」などの情報が後から出てこないようにする
Jizo_Inagaki | フリーランスのwebデザイナー
- テーマのカスタム承れます。
- 記載した回答で解決できましたらベストソリューションの承認をお願いします。
- DMや指名による対応はご依頼として有料でのみ承ります。
ho-jo
Shopify Partner
8 0 1

Jizo_Inagaki 様

 

ご回答ありがとうございます。

block.settings.member の値の認識は合っているはずなのですが、うまくいかないですね。

上記の構造の見直しを検討したいと思います。

当方、色々な方法でためしてみるものの、整理ができていない状態です。

また、質問の仕方についてご指摘ありがとうございます。おっしゃる通りです。以後気をつけます。