Liquid、JavaScriptなどに関する質問
shopifyの初心者です。
bodyタグに商品毎、コレクション毎、固定ページ毎などそれぞれ独自のidもしくはclassを付与したいと考えています。
過去記事を探していた所、下記内容が希望していた内容でした。
https://community.shopify.com/c/Shopify-Design/More-detail-in-body-tags/td-p/241310
ただ、こちらの記述を利用させてもらうと、
タイトルを出力するので、idやclassが日本語表記になってしまいます。
【例】
コレクションが動物
商品名が猫
▼記述
<body id="{{ page_title | handle }}" class="{% if customer %}customer-logged-in {% endif %}template-{{ template | replace: '.', ' ' | truncatewords: 1, '' | handle }} {% if collection %}collection-{{ collection.title | handle }}{% endif %}">
▼出力
<body id="猫" class="template-product collection-動物">
こちらの解決策として、商品毎、コレクション毎、固定ページ毎それぞれ登録する際に、
URLとハンドルの部分を英語表記に変更しようと考えております。
【例】
コレクションが動物 URLとハンドルはanimal
商品名が猫 URLとハンドルはcat
▼出力したい例
<body id="cat" class="template-product collection-animal">
記述の変更を下記ページを確認しながら検証していたのですが、うまく出力できませんでした。
https://shopify.dev/docs/themes/liquid/reference/objects/page
お手数おかけしますが、bodyタグの記述を教えていただけたらと思います。
ご確認どうぞよろしくお願いします。
解決済! ベストソリューションを見る。
成功
申し訳ありません。
最初に記載しましたコードを修正させていただきたいと思います。
ああいう書き方せずとも恐らく以下で簡単に取れますね...。
{% if handle %}
{% assign body_id = handle %}
{% else %}
{% assign body_id = 'other' %}
{% endif %}
<body id="{{ body_id | escape }}">
id="{{ page_title | handle }}"
上記ですが、これは「ページのタイトルをハンドル形式に変換して出力」というコードになるため、ページのハンドルを出力するコードではありません。
handleフィルターに関しては以下を参照ください。
https://shopify.dev/docs/themes/liquid/reference/filters/string-filters#handle-handleize
{{ page_handle }}というオブジェクトはないようなので(ありましたら他の方ご指摘いただけると助かります)、以下のようにページごとにハンドルを取得して出力することになると思います。
{% if request.page_type == 'product' %}
{% assign body_id = product.handle %}
{% elsif request.page_type == 'collection' %}
{% assign body_id = collection.handle %}
{% elsif request.page_type == 'page' %}
{% assign body_id = page.handle %}
{% else %}
{% assign body_id = 'otherpages' %}
{% endif %}
{% capture handle_class %}{{ request.page_type }}-{{ body_id }}{% endcapture %}
<body id="{{ body_id | escape }}" class="{{ handle_class | escape }}" >
上記は、とりあえず商品とコレクションとページとそれ以外で分けており、それ以外の場合はidが「otherpage」と出力されます。
一応classの方もid用の値を利用して作りましたが、コレクションのみに出力したい場合はif文で出力条件を限定してください。
なお下記URLを参照いただければ他のページに対する分岐も作れますので、必要に応じて作成いただければと思います。
https://shopify.dev/docs/themes/liquid/reference/objects/request#request-page_type
ご返答いただきありがとうございます。
内容を確認いたしました。
いただいた記述を試してみたところ、付与されるのは日本語タイトルになってしまいます。
ハンドルを出力 =「URLとハンドル」 の部分だと思っていたのですが、
そもそもが捉え方が違うのでしょうか?
▼URLとハンドル
▼実際の出力
文鳥の商品ページでも、
ページURLは
〇〇.myshopify.com/collections/bird/products/buncho
となっていますが、
<body id="文鳥" class="template-product collection-鳥 ">
と出力されてしまいます。
こちらを、
<body id="buncho" class="template-product collection-bird ">
と出力する方法はありますでしょうか?
基本的な理解不足で考え方が違うのかもしれませんが、引き続きご教授いただければ幸いです。
お手数おかけいたしますが、ご確認よろしくお願いいたします。
確認いただきありがとうございます。
ハンドルを出力 =「URLとハンドル」 の部分だと思っていたのですが、そもそもが捉え方が違うのでしょうか?
ご指摘の「URLとハンドル」の部分が出力対象です。
そのため、スクリーンショットをみる限りハンドルは「buncho」になっていますので、先ほどの私の投稿で前提としていた状態になっていると思います。
確認するために、以下を書いてどう出力されるのか見ていただけますでしょうか?
<p>handle: {{ collection.handle }}</p>
<p>title: {{ collection.title }}</p>
<p>url: {{ collection.url }}</p>
想定するのは以下の状態です。
成功
申し訳ありません。
最初に記載しましたコードを修正させていただきたいと思います。
ああいう書き方せずとも恐らく以下で簡単に取れますね...。
{% if handle %}
{% assign body_id = handle %}
{% else %}
{% assign body_id = 'other' %}
{% endif %}
<body id="{{ body_id | escape }}">
ご返信ありがとうございます。
handleの間違ってはいなかったので、安心いたしました。
そして、
<p>handle: {{ collection.handle }}</p>
で出力を確認してから、頂いた記述を記入したところ、
無事にbodyに独自idを付与出来ました。
この度はご対応いただきありがとうございました。
とても助かりました。
また、不明点が出た際にご縁がありましたら、どうぞよろしくお願いします。
サポートの選択肢が増えていく中、最適となる選択の判断が難しくなっているかと存じます。今回は問題の解決に最適となるサポートの選択方法を、紹介させて頂きます。 選択肢のご紹介...
By Mirai Oct 7, 20242023年初頭、Shopifyペイメントアカウント、及びShopifyアカウント全体のセキュリティを強化する為の変更が適用されました。ユーザーのアカウントセキュリティを強化す...
By Mirai Sep 30, 2024概要: 年末/年明けは、消費者が最もショッピングを行う時期の一つです。特に、ブラックフライデー・サイバーマンデー(BFCM)は、世界中で注目される大規模なセールイベントであ...
By JapanGuru Sep 25, 2024