Pergunta

Eu tenho um widget de lista de produtos inserido na área de conteúdo da página inicial de uma loja magento 2.O widget é inserido usando o seguinte código:

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

Ao mudar o site para modo de produção, os preços dos produtos não são recarregados ao mudar de moeda.A recarga de preço funciona no modo de desenvolvedor e também nas páginas de categoria normais.Os preços são recarregados após atualizar o cache BLOCK_HTML no back-end, mas armazenarão em cache a moeda escolhida na primeira visualização da página.definir o TTL do cache de widgets como nulo não tem efeito.

Também tentei adicionar o widget via layout xml usando este código:

<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>

Eu também tentei adicionar $this->_isScopePrivate = true; para Magento\CatalogWidget\Block\Product\ProductsList::__construct() que deveria forçar o carregamento do Ajax, mas sem sucesso.

Sugestões de como contornar isso, alguém?

Foi útil?

Solução

Descobri:Adicionar um argumento cache_lifetime de xsi:type null resolveu o problema.Portanto, se você quiser adicionar um widget via layout.xml e quiser que ele seja independente do cache, faça o seguinte:

<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>

Outras dicas

Não tenho certeza se é um recurso adicionado desde que esta pergunta foi feita, mas há um "Vida útil do cache (segundos)" nos parâmetros quando você cria o widget como administrador.

Se você tiver várias moedas, parece ser necessário definir como 0, pois dura um dia por padrão.

Parece idiota que o widget não contenha o código para decidir se um cache diário ou nenhum cache seria a configuração padrão sensata - bastaria contar as moedas que estão sendo usadas para descobrir.

Além disso, você pode tentar cache_lifetime="1" no seu bloco, onde o widget é chamado.Algo como abaixo,

{{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"}}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a magento.stackexchange
scroll top