protected function _construct()
{
$this->addData(
[
'cache_lifetime' => false,
'cache_tags' => array('MY_BLOCK'),
]
);
}
public function getCacheKeyInfo()
{
return [];
}
ne marche pas. Pourquoi? Comment désactiver le cache pour le bloc?
Réponses:
Les blocs peuvent être définis comme ne pouvant pas être mis en cache en définissant l'
cacheable
attributfalse
dans les fichiers XML de mise en page. Par exemple<block class="Block\Class" name="blockname" cacheable="false" />
Les pages contenant de tels blocs ne sont pas mises en cache.
Vérifiez également comment désactiver la mise en cache du bloc personnalisé
Modifier: un seul
cacheable="false"
désactivera la mise en cache de la page entière pour toute la page, ce qui rendra les pages à partir de ce fichier de mise en page extrêmement lentes! Vérifiez https://inviqa.com/blog/how-full-page-cache-works-magento-2la source
Il est important de comprendre pourquoi vous ne souhaitez pas mettre en cache le bloc. Si cela est destiné à afficher des informations spécifiques à la session, vous devriez
Une option non recommandée pourrait également être un contrôleur personnalisé qui renvoie certaines données via ajax-call (avec la méthode POST afin qu'elles ne soient pas mises en cache).
(!) cacheable = "false" ne doit pas être utilisé. Ici suivra, POURQUOI non:
Un bloc avec cacheable = "false" rendra la page entière non mise en cache. Il n'est pas utilisé pour la perforation du cache. La page suivante le dit également ( pour créer une page non mise en cache , marquez tout bloc de cette page comme non mise en cache dans la mise en page en utilisant cacheable = "false" ):
Ce que cela fait, c'est que les modules Varnish / Fastly enverront en raison de cette valeur d'attribut toujours des en-têtes non cachables.
Lorsque nous activons cachable = "false" et lors de l'utilisation de Varnish / Fastly, les en-têtes suivants du navigateur sont envoyés:
Pour cela, vous pouvez déboguer le code de mise en cache des pages de Magento sur
où le premier doit envoyer un Cache-Control public avec TTL et le second doit envoyer des X-Magento-Tags pour Varnish / Fastly.
Les deux utilisent la vérification isCacheable () où cela renvoie toujours FALSE en raison de la vérification suivante (vérifiez si dans la disposition actuelle il y a des attributs: cacheable = "false"):
Lorsque nous supprimons cacheable = "false", nous commençons à obtenir les vérifications isCacheable () comme VRAI et également à obtenir correctement les en-têtes sur les pages de démarrage / catégorie / produit.
la source
J'ai fait
non-cacheable
pour le bloc de prixla source
di.xml
Vous pouvez ajouter un bloc non cacheable uniquement aux pages personnalisées. Dans d'autres cas, magento Page Cache ne fonctionnera pas pour ces pages OU mettra à jour les informations en bloc via ajax (demandes de section magento).
Certaines choses décrites ici https://mirasvit.com/blog/magento-2-page-cache-coverage-rate.html
la source