FROM CACHE - jp_header

画面描画の反映時間のタイムラグについて

解決済

画面描画の反映時間のタイムラグについて

Hiro2040
訪問者
3 0 0

現在、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 -%}

 

1 件の受理された解決策

ogasawarakyohei
Shopify Partner
114 44 42

成功

しかし、URLパラメータを変更して試してみても画面の描画が切り替わりません。

 

Liquidは都度実行されるわけではなく、キャッシュされたものが返されますので、それが原因だと思われます。(Liquidの実行結果に変更を及ぼすパラメータでない場合)

 

また一番問題なのはアクセスする端末を変えても上記が引き継がれてしまうことです。

 

こちらも引き継がれてしまうわけではなく、キャッシュされているためだと思われます。

 

また、日付に応じて値段ブロックを出し分けをしたいという本来やりたいことから考えますと、URLパラメータではなく、JavaScript等で制御すべきだと思います。

小笠原 京平 | 株式会社Tsun | RuffRuff アプリ
・私の回答が役に立ったら、いいね! ボタンをクリックして教えてください!
Shopify 開発で役に立つ情報を発信していますので、テックブログおすすめ Shopifyアプリ もぜひご参照ください。

元の投稿で解決策を見る

2件の返信2

ogasawarakyohei
Shopify Partner
114 44 42

成功

しかし、URLパラメータを変更して試してみても画面の描画が切り替わりません。

 

Liquidは都度実行されるわけではなく、キャッシュされたものが返されますので、それが原因だと思われます。(Liquidの実行結果に変更を及ぼすパラメータでない場合)

 

また一番問題なのはアクセスする端末を変えても上記が引き継がれてしまうことです。

 

こちらも引き継がれてしまうわけではなく、キャッシュされているためだと思われます。

 

また、日付に応じて値段ブロックを出し分けをしたいという本来やりたいことから考えますと、URLパラメータではなく、JavaScript等で制御すべきだと思います。

小笠原 京平 | 株式会社Tsun | RuffRuff アプリ
・私の回答が役に立ったら、いいね! ボタンをクリックして教えてください!
Shopify 開発で役に立つ情報を発信していますので、テックブログおすすめ Shopifyアプリ もぜひご参照ください。
Hiro2040
訪問者
3 0 0

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

 

JavaScriptで制御するように修正したらタイムラグなくできました。

ありがとうございます。