Mes modifications ne s'affichent pas sur PrestaShop : vider vraiment tous les caches
Le bouton « Vider le cache » ne vide pas tout : voici ce qu'il efface réellement, et les caches qu'il faut purger à la main.
Le symptôme
Vous modifiez un fichier de thème, une feuille de style, un module ou un réglage du back office. Vous rechargez la boutique, et rien n'a changé. Parfois la modification apparaît chez vous mais pas chez un collègue, ou l'inverse.
La cause
Entre votre fichier et l'écran du visiteur, PrestaShop et son environnement empilent plusieurs couches de cache : des copies déjà préparées, servies pour gagner du temps. Tant qu'une de ces couches garde l'ancienne version, la modification reste invisible. Le bouton Vider le cache du back office en traite plusieurs, mais pas toutes. La méthode consiste à les passer en revue dans l'ordre, de la plus proche du code à la plus proche du visiteur.
La solution, couche par couche
1. Le bouton « Vider le cache » du back office
Il se trouve en haut de la page Paramètres avancés > Performances. Voici ce qu'il efface réellement, d'après le code de PrestaShop :
| Cache effacé | Emplacement | 1.7.8 | 8 | 9 |
|---|---|---|---|---|
| Cache Symfony | var/cache/<env>/ |
environnement courant | prod et dev |
prod et dev, pour chaque partie (admin, front, API) |
| Gabarits Smarty compilés et en cache | var/cache/<env>/smarty/ |
oui | oui | oui |
| Fichiers CSS/JS combinés (CCC) | themes/<thème>/assets/cache/ |
oui | oui | oui |
| Index des classes (overrides) | var/cache/<env>/class_index.php |
oui | oui | oui |
| Listes XML des modules | config/xml/ |
oui | oui | oui |
| Cache Doctrine | interne | non | oui | oui |
Le « CCC » (Combine, Compress and Cache) désigne l'option qui regroupe et compresse les feuilles de style et scripts du thème. Lors du vidage, PrestaShop incrémente aussi un numéro de version intégré au nom de ces fichiers (PS_CCCCSS_VERSION, PS_CCCJS_VERSION). C'est ce qui force les navigateurs à télécharger la nouvelle version.
Ce que le bouton n'efface pas : le cache de code PHP du serveur (OPcache), le cache de votre navigateur, celui d'un CDN ou d'un proxy (Cloudflare, Varnish), et le cache propre à certains modules (modules de cache de pages notamment). Ces couches sont traitées aux étapes 4 à 6.
2. Vérifier les réglages Smarty
Smarty est le moteur de gabarits des thèmes. Sur la même page Performances, bloc Smarty, le réglage Compilation des templates propose trois valeurs :
- Ne jamais recompiler les fichiers de templates : vos modifications de fichiers
.tplsont ignorées tant que le cache n'est pas vidé ; - Recompiler les fichiers de templates s'ils ont été mis à jour : la valeur installée par défaut, adaptée à la plupart des boutiques ;
- Forcer la compilation à chaque appel : utile pendant un développement, mais lent.
Si quelqu'un a choisi « Ne jamais recompiler » pour gagner en performances, c'est souvent l'explication complète du problème. Pendant vos modifications, repassez sur « Recompiler les fichiers de templates s'ils ont été mis à jour ».
3. Vider le cache à la main, quand le back office ne répond plus
Si le back office est inaccessible, connectez-vous en FTP et supprimez le dossier cache qui se trouve dans le répertoire var (var/cache/). C'est la méthode la plus simple et la plus sûre : elle efface d'un coup les caches de production et de développement, y compris, en version 9, les sous-dossiers admin/, front/ et admin-api/. PrestaShop recrée le dossier et reconstruit l'ensemble à la visite suivante. Cette première visite est donc plus lente.
En SSH, la console Symfony fait le même travail :
# Depuis la racine de la boutique — PrestaShop 1.7.8 et 8
php bin/console cache:clear --env=prod
# Depuis la racine de la boutique — PrestaShop 9 : un appel par partie
php bin/console cache:clear --env=prod --app-id=admin
php bin/console cache:clear --env=prod --app-id=front
php bin/console cache:clear --env=prod --app-id=admin-api
Attention à l'option --env=prod : sans elle, la console vide l'environnement dev, qui n'est pas celui de votre boutique en production. En version 9, sans --app-id, seul le cache du back office est vidé. Ces commandes ne touchent ni Smarty ni les fichiers CCC : après un vidage par la console, utilisez aussi le bouton du back office dès qu'il refonctionne.
4. Le cache de code PHP (OPcache)
La plupart des hébergements activent OPcache, qui garde en mémoire la version compilée des fichiers PHP. Selon sa configuration, un fichier PHP modifié par FTP peut continuer à s'exécuter dans son ancienne version pendant un moment, voire jusqu'au redémarrage de PHP. PrestaShop ne vide jamais OPcache en entier : aucune version ne le fait. Si une modification de fichier PHP (module, override, classe) reste sans effet, redémarrez PHP depuis votre panneau d'hébergement ou demandez-le à votre hébergeur.
5. Le navigateur
Rechargez la page en forçant le téléchargement : Ctrl + F5 sous Windows, Cmd + Maj + R sur Mac. Mieux, ouvrez une fenêtre de navigation privée : elle part sans cache ni cookies, et vous voyez la boutique comme un nouveau visiteur.
6. CDN, proxy et modules de cache
Si votre boutique passe par Cloudflare, un autre CDN ou un proxy Varnish, les pages et fichiers statiques y sont conservés selon leurs propres règles. Purgez ce cache depuis l'interface du service. De même, un module de cache de pages installé sur la boutique dispose en général de son propre bouton de vidage, dans sa page de configuration.
Ce qu'il faut vérifier après
- Ouvrez la page en navigation privée.
- Si la modification concerne une feuille de style avec l'option CCC active, affichez le code source de la page : le nom du fichier
theme-….cssdoit avoir changé. - Si rien ne bouge, activez temporairement le mode debug : une erreur dans votre modification peut l'empêcher de s'exécuter, et le mode debug vous l'affichera.
Pièges connus
- Vous ne modifiez pas le bon fichier. C'est la cause la plus fréquente, avant tout problème de cache. Un thème enfant (thème qui hérite d'un autre), un module qui surcharge un gabarit dans
themes/<thème>/modules/ou une copie de sauvegarde du thème peuvent servir un autre fichier que celui que vous éditez. - Le mauvais thème est modifié en multiboutique : chaque boutique peut utiliser un thème différent.
- Une erreur de droits après la suppression de
var/cache/: PrestaShop doit pouvoir recréer le dossier. Si la boutique affiche une erreur d'écriture, vérifiez que le dossiervar/est accessible en écriture pour l'utilisateur sous lequel tourne PHP. - Désactiver le cache Smarty pour « régler » le problème : la boutique devient plus lente pour tous les visiteurs. Repassez les réglages de production une fois vos modifications terminées.
cachevider le cacheSmartyvar/cacheCCCOPcache