Page magasin : ce qu'il faut faire dans PrestaShop
Maquette : Marseille - Plan de Campagne. Tout ce qui suit a été relevé dans le dépôt prestashop-foot.fr (PrestaShop 8.1.5, thème foot2) le 05/11/2026.
1. Ce qui existe déjà
/magasinsn'est pas une page CMS, c'est le contrôleur natifstores.- Le module
rocketextrastoreajoute un champ « Page CMS associée » dans BO > Magasins. Une fois la page associée :- la carte du magasin sur
/magasinsdevient cliquable ; - la page CMS s'affiche avec le gabarit
themes/foot2/templates/cms/page-store.tpl, qui reçoit toute la fiche magasin dans$cms.store.
- la carte du magasin sur
- Aujourd'hui, aucune page n'est associée.
- Le gabarit actuel a plusieurs défauts :
- le nom du magasin est dans un
<p class="u-h1">, la page n'a donc pas de H1 ; - il n'affiche pas le téléphone ;
- la carte est la même image
foot/map.jpgpour tous les magasins ; - il n'y a pas de balisage schema.org ;
- avec le CSS de prod, la photo (375 px) déborde de son cadre de 240 px et recouvre le bloc horaires. C'est corrigé dans les ajouts SCSS.
- le nom du magasin est dans un
2. Où va chaque élément
| Élément | Où | Comment |
|---|---|---|
| Nom, adresse, téléphone, horaires, photo, GPS | Fiche magasin (BO > Paramètres de la boutique > Contact > Magasins) | Déjà saisi. À corriger (section 4). |
| H1, téléphone, bouton itinéraire, carte, « Fermé » | cms/page-store.tpl | Fichier fourni |
JSON-LD du magasin (SportingGoodsStore) et fil d'Ariane « Accueil > Nos magasins > … » | override/controllers/front/CmsController.php | Fichier fourni |
| Styles des nouveaux éléments | components.cms-store.scss | Ajouts fournis |
| Texte de la page | Contenu de la page CMS (WYSIWYG) | HTML à coller (bouton « Code » de TinyMCE) |
FAQ et son JSON-LD FAQPage | Module Rich FAQ (rocketrichfaq), rattaché à la page CMS | Questions fournies. Le module ajoute le JSON-LD lui-même. |
| Title, meta description, URL | Champs de la page CMS | Voir section 3 |
| Carte | themes/foot2/assets/img/foot/stores/map-{id}.jpg | Image fixe, sans iframe Google Maps, donc sans cookie avant consentement. Carte de Plan (id 1), script pour les 7 autres. |
Lien depuis /magasins | Automatique | Dès que la page est associée au magasin |
3. Champs de la page CMS
| Champ | Valeur | Pourquoi |
|---|---|---|
| Catégorie | Accueil (racine) | Sinon, la catégorie CMS s'ajoute au fil d'Ariane. |
Titre de la page (meta_title) | Marseille - Plan de Campagne | Il sert au fil d'Ariane et à la liste déroulante du BO Magasins. Il faut donc un nom court. |
Titre SEO (head_seo_title) | Magasin de foot à Marseille Plan de Campagne, ouvert le dimanche | Foot.fr | Quand il est rempli, il remplace meta_title dans le <title> (Meta::getCmsMetas). |
| Meta description | Magasin Foot.fr de Plan de Campagne : chaussures de foot, maillots et équipement Nike, adidas, Puma. Ouvert du mardi au dimanche, 10h-19h, aux Pennes-Mirabeau. | |
| URL simplifiée | magasin-foot-marseille-plan-de-campagne | L'URL sera /content/{id}-magasin-foot-marseille-plan-de-campagne. Une URL en /magasins/marseille obligerait à changer la route CMS de tout le site. Ce n'est pas recommandé. |
| Indexation | Non pendant le test, Oui à la mise en ligne | Sur Non, CmsController ajoute noindex. |
4. Contraintes PrestaShop relevées dans le code
- Le contenu du WYSIWYG est filtré.
CMS::$definitionvalide le contenu avecValidate::isCleanHtml. Sont refusés :<script>, les attributson…et toute chaînescript:;iframe,form,input,embedetobject, sauf si « Autoriser les iframes » est activé.
- Le nettoyage HTML. TinyMCE accepte tout (
valid_elements: '*[*]'), mais si HTMLPurifier est actif (PS_USE_HTMLPURIFIER), il peut retirer des attributs. Pour ne pas dépendre de ce réglage, le contenu n'utilise queh2,p,ul,aetmark, sans style en ligne. - Le gabarit magasin ne s'applique qu'après l'association au magasin (hook
displayOverrideTemplatederocketextrastore). - Piège : dès l'association,
/magasinsaffiche le lien, même si la page CMS est désactivée. Les visiteurs tomberaient alors sur une 404. Il faut tester sur la préprod, ou associer la page en tout dernier. - Licence :
rocketextrastoreest sous licence Prestarocket, qui interdit de le modifier. Tout passe donc par le thème et un override, comme les autres overrides deoverride/controllers/front/. Après le dépôt de l'override, supprimervar/cache/prod/class_index.php. - Les horaires sont du texte libre, saisis dans 6 formats différents selon le magasin :
10H00-19H00,10H00-19H,10H-19H;10h-19h,10h30-19h;10h-12h30/14h-18h30,10h-12h / 14h-19h.
- Le pays est stocké en « France Métropolitaine et Corse ». L'override envoie le code ISO
FRau JSON-LD. - Pas de note moyenne dans le JSON-LD : Google ignore les avis qu'une entreprise affiche sur son propre site pour ses magasins. Les avis restent sur la fiche Google.
- La FAQ ne donne plus de résultat enrichi Google pour un site marchand depuis 2023. Elle reste utile aux visiteurs et aux réponses des IA.
- Non testé en vrai : je n'ai pas de PHP sur mon poste, donc l'override n'a pas tourné. Sa logique a été reproduite et testée en Python. À vérifier sur la préprod avec le test des résultats enrichis.
5. Fiches magasins à corriger avant de faire les pages
- Avignon a les coordonnées GPS de Lyon (45.7533, 4.8463). Sa carte et son JSON-LD pointeraient sur Lyon.
- Plan de Campagne : l'adresse est « Z.I Plan de Campagne », sans rue. Il faut reprendre l'adresse exacte de la fiche Google.
- Lyon : la note dit « FERMÉ TEMPORAIREMENT », mais les horaires sont toujours remplis. Le JSON-LD ne les publie pas, mais le bloc visible les affiche encore.
- Avignon : la ville est « Sorgues ». À aligner sur la fiche Google.
- Photos : elles font 375 × 375 px seulement. Il faudrait une vraie photo de façade plus grande pour chaque magasin.
- Horaires : autant les harmoniser en
10h-19h.
6. Mise en ligne, dans l'ordre
- Corriger les fiches magasins (section 5).
- Déposer
page-store.tpl, l'override et le SCSS, rebuild du thème, puis supprimerclass_index.php. - Déposer
map-1.jpgdansthemes/foot2/assets/img/foot/stores/. - Créer la page CMS (section 3, indexation sur Non) et coller le contenu. Remplacer ou retirer les passages surlignés « à confirmer ».
- Saisir la FAQ dans Rich FAQ sur cette page.
- Sur la préprod : associer la page au magasin, vérifier le rendu sur mobile et passer le test des résultats enrichis.
- En prod : associer la page au magasin et passer l'indexation sur Oui.
- Mettre l'URL de la page dans le champ « site web » de la fiche Google Business du magasin.
- Faire la même chose pour les 7 autres magasins.