Liquid、JavaScriptなどに関する質問
データ管理をjsonでやりたいと考えています(特にloops処理が課題になっています)
assetsフォルダにdata.jsonを準備してsectionのコンポーネントから以下のようにjsonをimportしようとしたところただの文字列になってしまいできませんでした。
liquidの中にJSONを読み込み、それをオブジェクトとして扱いたい、ということかと思いますが、
それは現時点では難しいようです。
参考:
https://github.com/Shopify/liquid/issues/432
https://stackoverflow.com/questions/57601890/is-it-possible-to-initiate-object-as-variable-in-liquid
有志の方が、
liquidの中で、JSONを扱えるようにするための工夫を下記にアップしてくれていますが、
https://github.com/culturekings/shopify-json-parser
We have found when looping over products in a collection can slow the liquid render time to greater than 5 seconds.
ページの表示速度が悪化するかもしれませんし、
現在、非推奨となっているincludeを使用する点も継続利用という観点では看過できないかもしれません。
ご存知だとは思いますし、
質問者様の要望にはそぐわない可能性が高いですが、
質問者様が扱おうとしているJSONの階層が浅いようでしたら、
split filterで配列として扱うという道もあるかもしれません。
例えば、snippets/array.liquidを用意し、
その中に、hoge,fuga,piyoと記載します。
下記のコードを準備します。
{%- capture array_string -%}
{% render "array" %}
{%- endcapture -%}
{% assign array = array_string | split: "," %}
{{ array[0] }}
このコードで、arrayの一番目の要素であるhogeが出力されます。
また、こちらについても、質問者様はご存知だと思いますが、
JavaScriptを利用する方法がよく紹介されています。
ブラウザ上ではなく、liquidの中で処理されたいということだとは思うので、
JavaScriptを使用する方法はお気に召さないかもしれませんが、
例えば、下記のようにすることでブラウザ上であればJSONを参照してページの表示を動的に変更することもできます。
{%- capture json_string -%}
{% render "json" %}
{%- endcapture -%}
<script>
const json_string = `{{ json_string }}`;
const obj = JSON.parse(json_string);
</script>
snippets/json.liquidを用意し、JSONを記載すると、
JavaScript変数のobjにそのJSONがobjectとして格納されます。
大した情報がなく恐縮です。
(キュー田辺)
ありがとうございます。
やはり現時点では難しいのですね。。。
split filterで配列生成は行なっているのですが、あくまで簡単なデータのみです。
複雑なオブジェクトをもつ配列を上記の方法で生成するとなると可読性もとても悪く、現実的ではないと感じておりました。
回答ありがとうございました!
オンラインストアを運営する中で、商品の返品や交換は重要なプロセスとなります。Shopify管理画面を通して簡単に返品や交換が行えることをご存知でしょうか?希望する場合は、お客...
By Mirai Sep 15, 2024Shopifyの請求書の支払いが失敗したという通知を受け取って驚いたことはありますか。初めての支払いでエラーが発生したり、これまで何の問題もなく支払いできていたのに突然失敗し...
By Minami_ Sep 8, 20242023年2月、Shopifyはcheckout.liquidを廃止し、Checkout Extensibilityに移行することを発表いたしました。この新しいチェックアウト...
By JasonH Aug 15, 2024