Liquid、JavaScriptなどに関する質問
現在、URLパラメータに日付情報を持たせてその情報の本日日付を比較してページの描画を切り替える処理を実装しております。
しかし、URLパラメータを変更して試してみても画面の描画が切り替わりません。
日付が正常に動作しているか確認するために以下の「today」や「lineRegi」を画面上に描画されるようにしたところなぜか数分に1度しか画面の描画が最新化されませんでした。
URLパラメータを「2023-11-12T00:00:00+0900」でアクセスした後に「2023-11-20T00:00:00+0900」等に変更してアクセスしても画面描画は「2023-11-12T00:00:00+0900」まま変更されません。
「today」を画面描画しても同じで2023-11-11 20:13:20にアクセスした後、2023-11-11 20:13:50にアクセスしても2023-11-11 20:13:20のまま変更されません。
また一番問題なのはアクセスする端末を変えても上記が引き継がれてしまうことです。
端末AでURLパラメータを「2023-11-12T00:00:00+0900」でアクセスした後に端末BでURLパラメータを「2023-11-20T00:00:00+0900」でアクセスすると「2023-11-12T00:00:00+0900」が描画されてしまいます。
上記の原因につきましてご教授いただきたいです。
本来やりたいことは以下になります。
URLパラメータから日付情報を取得
URLパラメータと本日日付を比較し、本日日付がURLパラメータの日付を越えた場合に値段ブロックを表示する。
(本日日付よりURLパラメータの日付の方が大きい場合は値段ブロックを非表示)
日粒度で制御できれば良いため、秒単位での検知がしたいということはありません。
以下のように実装しております。
①スニペットに以下のファイルを作成
ファイル名:function_get_query_value_by_key.liquid
{%- capture contentForQuerystring -%}{{ content_for_header }}{%- endcapture -%} {%- assign pageUrl = contentForQuerystring | split:'"pageurl":"' | last | split:'"' | first | replace:'\/','/' | replace:'%20',' ' | replace:'\u0026','&' -%} {%- assign get_query_value_by_key = '' -%} {%- if pageUrl contains "?" -%} {%- assign pageQuerystring = pageUrl | split:'?' | last | replace:'=','&' -%} {%- assign tmp = pageQuerystring | split:'&' -%} {%- for kv in tmp -%} {%- if kv == key -%} {%- assign get_query_value_by_key = tmp[forloop.index] -%} {%- break -%} {%- endif -%} {%- endfor -%} {%- endif -%}
②main-product-event.liquidをコピーし、main-product-event.liquidを作成
main-product-event.liquid内でfunction_get_query_value_by_key.liquidで取得したURLパラメータを使用し、商品ページの表示を切り替える。
商品ページのjsonファイルもmain-product-event.liquidを参照するように修正。
ファイル名:main-product-event.liquid
{% comment %}本日日付{% endcomment %} {% assign today = 'now' | date: '%s' %} {% comment %}パラメータ{% endcomment %} {%- include "function_get_query_value_by_key" key:"line_regi_date" -%} {% assign lineRegi = get_query_value_by_key | date: '%s' %} {% assign status = '販売停止' %} {% comment %}現在の販売状態の確認{% endcomment %} {%- if today >= lineRegi -%} {% assign status = '販売中' %} {%- endif -%} {%- when 'price' -%} {%- if status == '販売中' -%} <div class="no-js-hidden" id="price-{{ section.id }}" role="status" {{ block.shopify_attributes }}> {%- render 'price', product: product, use_variant: true, show_badges: true, price_class: 'price--large' -%} </div> {%- if shop.taxes_included or shop.shipping_policy.body != blank -%} <div class="product__tax caption rte"> {%- if shop.taxes_included -%} {{ 'products.product.include_taxes' | t }} {%- endif -%} {%- if shop.shipping_policy.body != blank -%} {{ 'products.product.shipping_policy_html' | t: link: shop.shipping_policy.url }} {%- endif -%} </div> {%- endif -%} <div {{ block.shopify_attributes }}> {%- form 'product', product, id: 'product-form-installment', class: 'installment caption-large' -%} <input type="hidden" name="id" value="{{ product.selected_or_first_available_variant.id }}"> {{ form | payment_terms }} {%- endform -%} </div> <span class="_paidy-promotional-messaging" data-amount="{{product.price | money}}"></span> {%- endif -%}
解決済! ベストソリューションを見る。
成功
> しかし、URLパラメータを変更して試してみても画面の描画が切り替わりません。
Liquidは都度実行されるわけではなく、キャッシュされたものが返されますので、それが原因だと思われます。(Liquidの実行結果に変更を及ぼすパラメータでない場合)
> また一番問題なのはアクセスする端末を変えても上記が引き継がれてしまうことです。
こちらも引き継がれてしまうわけではなく、キャッシュされているためだと思われます。
また、日付に応じて値段ブロックを出し分けをしたいという本来やりたいことから考えますと、URLパラメータではなく、JavaScript等で制御すべきだと思います。
成功
> しかし、URLパラメータを変更して試してみても画面の描画が切り替わりません。
Liquidは都度実行されるわけではなく、キャッシュされたものが返されますので、それが原因だと思われます。(Liquidの実行結果に変更を及ぼすパラメータでない場合)
> また一番問題なのはアクセスする端末を変えても上記が引き継がれてしまうことです。
こちらも引き継がれてしまうわけではなく、キャッシュされているためだと思われます。
また、日付に応じて値段ブロックを出し分けをしたいという本来やりたいことから考えますと、URLパラメータではなく、JavaScript等で制御すべきだと思います。
ご回答ありがとうございます。
JavaScriptで制御するように修正したらタイムラグなくできました。
ありがとうございます。
Shopifyの請求書の支払いが失敗したという通知を受け取って驚いたことはありますか。初めての支払いでエラーが発生したり、これまで何の問題もなく支払いできていたのに突然失敗し...
By Minami_ Sep 8, 20242023年2月、Shopifyはcheckout.liquidを廃止し、Checkout Extensibilityに移行することを発表いたしました。この新しいチェックアウト...
By JasonH Aug 15, 2024「味噌の可能性を、とき放つ」をコンセプトに、豊かな自然に恵まれた信州で味噌の製造販売を行う新田醸造。江戸末期に創業した老舗のみそ屋さんですが、2024年春、顧客層や販売範囲の...
By Minami_ Jul 30, 2024