Magento2製品一覧ウィジェットキャッシュ問題 - 価格は再ロードされません
-
29-09-2020 - |
質問
Magento 2 Store FrontPageのコンテンツ領域に挿入された製品リストウィジェットがあります。ウィジェットは次のコードを使用して挿入されています。
{{widget type="Magento\CatalogWidget\Block\Product\ProductsList" products_count="12" template="product/widget/content/grid.phtml" conditions_encoded="a:2:[i:1;a:4:[s:4:`type`;s:50:`Magento|CatalogWidget|Model|Rule|Condition|Combine`;s:10:`aggregator`;s:3:`all`;s:5:`value`;s:1:`1`;s:9:`new_child`;s:0:``;]s:4:`1--1`;a:4:[s:4:`type`;s:50:`Magento|CatalogWidget|Model|Rule|Condition|Product`;s:9:`attribute`;s:12:`category_ids`;s:8:`operator`;s:2:`==`;s:5:`value`;s:2:`19`;]]"}}
.
現場を製造モードに切り替えるときは、通貨を変えるときに商品価格が再ロードされません。価格リロードは開発者モードで、そして通常のカテゴリページでも機能します。 BackendのBlock_HTMLキャッシュを更新した後、価格は再ロードされますが、最初のページビューで選択した通貨をキャッシュします。ウィジェットCache TTLをNULLに設定すると効果がありません。
私はこのコードを使ってレイアウトXMLを介してウィジェットを追加しようとしました:
<referenceContainer name="content.bottom">
<block class="Magento\CatalogWidget\Block\Product\ProductsList" template="product/widget/content/grid2.phtml" cacheable="false"><!-- -->
<arguments>
<argument name="products_count" xsi:type="number">12</argument>
<argument name="conditions_encoded" xsi:type="string">a:2:[i:1;a:4:[s:4:`type`;s:50:`Magento|CatalogWidget|Model|Rule|Condition|Combine`;s:10:`aggregator`;s:3:`all`;s:5:`value`;s:1:`1`;s:9:`new_child`;s:0:``;]s:4:`1--1`;a:4:[s:4:`type`;s:50:`Magento|CatalogWidget|Model|Rule|Condition|Product`;s:9:`attribute`;s:12:`category_ids`;s:8:`operator`;s:2:`==`;s:5:`value`;s:2:`19`;]]</argument>
</arguments>
</block>
</referenceContainer>
.
私はまた、Ajaxの荷重を強制することになっているが成功しないような$this->_isScopePrivate = true;
にMagento\CatalogWidget\Block\Product\ProductsList::__construct()
を追加しようとしました。
提案これを回避する方法、誰も?
解決
はそれを考え出した:xsiの引数cache_lifetimeを追加する:type nullはトリックをしました。そのため、Layout.xmlを介してウィジェットを追加してキャッシュに依存しないようにしたい場合は、次のようにしてください。
<referenceContainer name="content.bottom">
<block class="Magento\CatalogWidget\Block\Product\ProductsList" template="product/widget/content/grid2.phtml">
<arguments>
<argument name="products_count" xsi:type="number">12</argument>
<argument name="conditions_encoded" xsi:type="string">a:2:[i:1;a:4:[s:4:`type`;s:50:`Magento|CatalogWidget|Model|Rule|Condition|Combine`;s:10:`aggregator`;s:3:`all`;s:5:`value`;s:1:`1`;s:9:`new_child`;s:0:``;]s:4:`1--1`;a:4:[s:4:`type`;s:50:`Magento|CatalogWidget|Model|Rule|Condition|Product`;s:9:`attribute`;s:12:`category_ids`;s:8:`operator`;s:2:`==`;s:5:`value`;s:2:`19`;]]</argument>
<argument name="cache_lifetime" xsi:nil="true" xsi:type="null">null</argument>
</arguments>
</block>
</referenceContainer>
. 他のヒント
この質問が尋ねられてから追加された機能であるかどうかわからないが、adminとしてウィジェットを作成するときにパラメータに「キャッシュライフタイム(秒)」がある。
複数の通貨がある場合は、デフォルトで1日持続するため、0に設定する必要があるようです。
ウィジェットには、1日のキャッシュやキャッシュが賢明なデフォルト設定になるかどうかを決定するためのコードが含まれていないように見えます。
ウィジェットが呼び出されるブロックでcache_lifetime="1"を試すこともできます。
のようなもの{{widget type="Magento\Catalog\Block\Product\Widget\NewWidget" cache_lifetime="1" display_type="all_products" products_count="8" template="Magento_Catalog::product/widget/new/content/new_grid.phtml"}}
.