ページに独自セクションを追加したのですが、、、

下記サイトを参考にして、ページに独自セクションを追加しました。

https://note.com/osamuiwasaki/n/n1c8813bab083

「Shop List1」というページで独自セクションに情報を入力しました。

次に、「Shop List2」という別のページを作成して、そのページに「Shop List1」でも利用している独自セクションが記載されているtemplateを割り当てました。

すると、「Shop List1」で入力した情報が、「Shop List2」のページにも表示されるのですが、これはSchemaの仕様なのでしょうか?

一つのセクションを汎用的に他のページにも利用したいのですが、良い方法はありますでしょうか?

セクションは、各セクションごとに情報を保存し、その内容を他の場所でも出力するためのものだと思いますので、この場合セクションを増やすのが想定された方法かと思います。

この件に関しましては以下が該当するかなと思います(少々自信ありません)。

https://shopify.dev/docs/themes/sections/content-schema

The Content Schema is a formula for representing online store content. Its purpose is to standardize how themes model merchant-generated content in content sections, enabling content made with a section of one theme to be rendered by a section of a different theme. It also serves to provide a consistent editing experience to merchants.

上記を踏まえた上で「どうしても一つのセクションに作った各ブロックを出しわけたい」というのであれば以下の方法などが思い浮かびます。
※試作したわけではないので未検証です

  • テキスト欄を一つ追加してそこにShop List1やShop List2などと入力し、for文内で入力した値とpage.handleなどを比較し合致すれば表示させる

基本的に「for文の中で任意のブロックを特定し表示させる」という動作ができればよいので、上記以外でも分岐条件さえ作れれば動作するはずです。

一応サンプルコードは書いてみましたが、こちらも未検証のためその点ご了承ください。


 {% for block in section.blocks %}
  {% if block.settings.handle == page.handle %}
   - {% comment %} 中略 {% endcomment %}
   
  {% endif %}
 {% endfor %}

{% schema %}
{
 {% comment %} 中略 {% endcomment %}
      "setting":[
       {
        {% comment %} 中略 {% endcomment %}
        {
         "id":"handle",
         "type":"text",
         "label":"Page Handle"
        }
       {% comment %} 中略 {% endcomment %}
{% endschema %}

なお、コードに関しまして最も確実なのは記事を書いた方に質問することかなと思いますので、noteの作者にご相談されることもお勧めします。

2 Likes

ありがとうございます!

セクションは、各セクションごとに情報を保存し、その内容を他の場所でも出力するためのものだと思いますので、この場合セクションを増やすのが想定された方法かと思います。

理解いたしました。そういうことなのですね。Shopifyでできることとできないことというのが、だんだんと分かってきたような気がします。

ご提示いただいたアイデアですが、今回のケースではすこし無理がありそうだったので、(Shoplist1、Shoplist2…各リストに入るデータが多いので)

リストごとに対応するセクションを手動で増やす方法で対応したいと思います。

ありがとうございました!

1 Like

上記の方のご説明が最適かと思いますが、補足すると、マーチャントがセクションに対して行った設定の値は、テーマ内で1箇所に保存されるのでこういった動作になります。ただし、セクションのliquid内で、例えば、{{template}} などの変数で、今どのページが表示されているかも、表示の分岐に利用すれば、使われているページによって、同一セクションでも表示を切り替えることはできると思います。後はトリッキーですが、スキーマの名称に利用されるページの名前を入れてしまうか。。