Question

J'ai un widget de liste de produits inséré dans la zone de contenu de la page d'accueil d'un magasin magento 2.Le widget est inséré à l'aide du code suivant :

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

Lors du passage du site en mode production, les prix des produits ne sont pas rechargés lors du changement de devise.Le rechargement des prix fonctionne en mode développeur ainsi que sur les pages de catégories habituelles.Les prix sont rechargés après avoir actualisé le cache BLOCK_HTML dans le backend, mais mettront ensuite en cache la devise choisie lors de la première page vue.définir le TTL du cache des widgets sur null n'a aucun effet.

J'ai également essayé d'ajouter le widget via layout XML en utilisant ce code :

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

J'ai aussi essayé d'ajouter $this->_isScopePrivate = true; à Magento\CatalogWidget\Block\Product\ProductsList::__construct() qui est censé forcer le chargement d'Ajax, mais sans succès.

Des suggestions pour contourner ce problème, ça vous tente ?

Était-ce utile?

La solution

Deviner:L'ajout d'un argument cache_lifetime de xsi:type null a fait l'affaire.Donc si jamais vous souhaitez ajouter un widget via layout.xml et que vous souhaitez qu'il soit indépendant du cache, procédez comme suit :

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

Autres conseils

Je ne sais pas s'il s'agit d'une fonctionnalité qui a été ajoutée depuis que cette question a été posée, mais il y a une « Durée de vie du cache (secondes) » dans les paramètres lorsque vous créez le widget en tant qu'administrateur.

Si vous avez plusieurs devises, cela semble nécessiter une mise à 0 car cela dure une journée par défaut.

Il semble stupide que le widget ne contienne pas le code permettant de décider si un cache journalier ou pas de cache serait le paramètre par défaut raisonnable - il lui suffirait de compter les devises utilisées pour le savoir.

Vous pouvez également essayer cache_lifetime="1" dans votre bloc, où le widget est appelé.Quelque chose comme ci-dessous,

{{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"}}
Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top