Проблема с кэшем виджета списка продуктов Magento2 - цены не перезагружаются

magento.stackexchange https://magento.stackexchange.com/questions/115720

Вопрос

У меня есть виджет списка продуктов, вставленный в область содержимого главной страницы магазина magento 2.Виджет вставляется с помощью следующего кода:

{{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`;]]"}}

При переводе сайта в производственный режим цены на товары при смене валют не перезагружаются.Перезагрузка цен работает в режиме разработчика, а также на обычных страницах категорий.Цены перезагружаются после обновления кэша BLOCK_HTML на серверной стороне, но затем кешируется валюта, выбранная при первом просмотре страницы.установка нулевого значения TTL кэша виджетов не имеет никакого эффекта.

Я также попробовал добавить виджет через 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>

Я также попробовал добавить $this->_isScopePrivate = true; к Magento\CatalogWidget\Block\Product\ProductsList::__construct() который должен принудительно загрузить Ajax, но безуспешно.

Есть предложения, как это обойти?

Это было полезно?

Решение

Догадаться:Добавление аргумента cache_lifetime xsi: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>

Другие советы

Не уверен, что эта функция была добавлена ​​после того, как был задан этот вопрос, но в параметрах есть «Время жизни кэша (секунды)», когда вы создаете виджет от имени администратора.

Если у вас несколько валют, возможно, для этого потребуется установить значение 0, поскольку по умолчанию оно длится один день.

Кажется глупым, что виджет не содержит кода, позволяющего решить, будет ли дневной кеш или его отсутствие разумной настройкой по умолчанию - для этого нужно просто подсчитать используемые валюты.

Также вы можете попробовать 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"}}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top