Accueil

Référence développeur · PrestaShop

Websource Reassurance pour PrestaShop — référence développeur

Hooks, widget, API PHP, bloc Builder, tables, variables CSS et points d'extension du module Websource Reassurance.

Version 1.3.0 · PrestaShop 1.7.7 à 9.x, PHP 7.4+ · Mis à jour le 09/10/2026

Guide utilisateur

Cette extension existe aussi pour : WordPress

Vue d'ensemble

  • Module websourcereassurance, classe WebsourceReassurance, espace de noms Websource\Reassurance (PSR-4 dans src/, autoloader Composer embarqué dans vendor/).
  • Implémente PrestaShop\PrestaShop\Core\Module\WidgetInterface (renderWidget, getWidgetVariables).
  • Un seul écran d'administration : contrôleur AdminWebsourceReassurance (onglet « Réassurance » sous AdminParentThemes, c'est-à-dire Apparence en PrestaShop 8). getContent() redirige vers ce contrôleur.
  • Rendu mis en cache fichier dans var/cache/<env>/websourcereassurance/ (clé : groupe + boutique + langue + surcharges, durée 3600 s) ; vidé à chaque enregistrement, duplication, suppression, et à la désinstallation.

Hooks

Hooks d'affichage greffés

HookEmplacement dans l'éditeurPage imposée
displayHomePage d'accueilhome
displayReassuranceFiche produit, sous le bouton d'achatproduct
displayShoppingCartFooterPaniercart
displayPaymentTopTunnel de commande, au-dessus du paiementcheckout
displayNavFullWidthSous l'en-tête, en haut des pagesau choix
displayFooterBeforeJuste au-dessus du pied de pageau choix
displayFooterDans le pied de pageau choix
tout display*Emplacement avancé (volet « Pour les utilisateurs avancés »)au choix

Les hooks sont greffés et dégreffés par boutique par Hook\HookSynchronizer selon les emplacements réellement utilisés (syncAll() à l'installation, sync($shopId) après chaque modification). Un hook libre inconnu de PrestaShop est créé à la volée. Les méthodes hookDisplayXxx manquantes sont servies par __call().

Le type de page est détecté par Placement\PageDetector à partir de php_self du contrôleur : home, category, product, brand (manufacturer), cms, search, login (authentication, password), account (my-account, identity, addresses, history, order-detail…), cart, checkout (order), contact, notfound (pagenotfound).

Hooks techniques greffés

HookRôle
actionFrontControllerSetMediaAjoute views/css/front.css à la page seulement si au moins un groupe doit s'y afficher. En dehors de ce cas (widget, Builder), la balise <link> est insérée une fois avec le premier rendu.
actionWebsourceBuilderRegisterBlocksDéclare le bloc « Réassurance » au Websource Builder (voir plus bas).
actionWebsourceThemeExport / actionWebsourceThemeImportParticipation aux paquets .wsxtheme de Websource Theme Config, section reassurance, version 1 (groupes, éléments, icônes en adresse absolue, liens CMS en cms:slug). Import avec analyse à blanc (dry_run), remplacement exact ou fusion par identifiant.
actionObjectShopAddAfterGreffe les hooks pour une boutique créée après l'installation.
actionShopDataDuplicationCopie groupes et images vers une boutique créée « à partir d'une autre ».
actionObjectShopDeleteAfterNettoie les données de la boutique supprimée.

Widget Smarty

{widget name='websourcereassurance' group='demo-b-confiance'}
{widget name='websourcereassurance' group='3'}
ParamètreRôle
groupIdentifiant texte du groupe (identifier, dérivé du nom, affiché dans le volet avancé de l'éditeur) ou identifiant numérique. Sans group, le widget rend les groupes rattachés au hook courant.

Seuls les groupes actifs (active = 1) de la boutique courante sont rendus ; un groupe inconnu ou vide rend une chaîne vide. getWidgetVariables() renvoie un tableau vide : le rendu passe par le template du module.

API PHP

// Rendu d'un groupe actif par identifiant numérique (chaîne vide si inconnu ou module inactif).
echo WebsourceReassurance::renderGroupById(3);

// Avec surcharges : layout box|wide|list, columns 1 à 6, langue.
$module = Module::getInstanceByName('websourcereassurance');
echo $module->renderGroup(3, ['layout' => 'list', 'columns' => 1], (int) $languageId);

Services accessibles via $module->services() (Websource\Reassurance\Services) : groups() (Repository\GroupRepository), items(), images(), views() (Render\GroupViewProvider), cache(), sanitizer(), synchronizer($module), dispatcher(), uploadGuard(), advisor() (contraste WCAG), catalog() (emplacements).

Bloc Websource Builder

Classe Builder\ReassuranceBlock, enregistrée seulement si l'interface Websource\Builder\Block\BlockInterface existe.

ChampValeurs
Groupe à afficherListe des groupes de la boutique.
DispositionComme dans le groupe (vide), box Cartes séparées, wide Bandeau horizontal pleine largeur, list Liste verticale.
Colonnes (0 = comme dans le groupe)0 à 6.

Quand un bloc Réassurance est présent sur la page d'accueil du Builder, le module ne regreffe pas displayHome (évite le doublon) ; l'éditeur l'indique.

Contrôleur d'administration (AJAX)

Toutes les actions passent par index.php?controller=AdminWebsourceReassurance&token=…&ajax=1&action=<action> en POST, réponse JSON. Elles exigent un contexte de boutique explicite (sauf keepData) ; sinon réponse d'erreur 400 « Choisissez d'abord une boutique précise ».

ActionParamètresRéponse
createname, preset (starter ou empty){ id, url }
draftid, payload (JSON du groupe), langétat du brouillon + aperçu HTML + conseils de contraste
saveid, payload, langgroupe publié, aperçu, feedback
toggleid, active (0/1){ active }
enableDefaultsidemplacements accueil + produit + panier ajoutés
deleteid{ ok }
duplicateid{ id, url }
uploadfichier(s) files[] (multipart)images créées (id, url) ou message d'erreur
deleteImageid{ ok } ou erreur si l'image est utilisée
keepDatakeep (0/1){ ok } — réglage global

Exemple de requête :

POST /admin-xxx/index.php?controller=AdminWebsourceReassurance&token=…&ajax=1&action=toggle
id=3&active=1

Réponse : {"active":true}.

Le payload est nettoyé côté serveur par Group\GroupSanitizer, Design\DesignSanitizer (couleurs par expression régulière stricte, valeurs énumérées) et Url\UrlSanitizer.

Données

Tables (préfixe _DB_PREFIX_)

TableContenu
websourcereassurance_groupid_group, id_shop, identifier (unique par boutique), name, active, titles (JSON par langue), settings (JSON : disposition, colonnes, design), placements (JSON), draft (JSON du brouillon), date_add, date_upd.
websourcereassurance_itemBlocs d'un groupe : id_item, id_group, position, icon_type (library ou image), icon_value, titles, texts, urls (JSON par langue), url (héritage 1.0).
websourcereassurance_imageImages envoyées : id_image, id_shop, filename (nom aléatoire), original_name, mime, width, height, size, date_add.

Les fichiers envoyés sont dans modules/websourcereassurance/uploads/ (protégé par .htaccess, aucune exécution).

Configuration

CléRôle
WEBSOURCEREASSURANCE_KEEP_DATAGlobale (toutes boutiques). 1 = conserver tables et images à la désinstallation.

Mises à jour

upgrade/upgrade-1.1.0.php (colonne urls, réglage global, rebranchement de toutes les boutiques), upgrade-1.2.0.php (forme square → rounded), upgrade-1.3.0.php (hooks d'export/import de thème).

Template et CSS

Template : views/templates/hook/group.tpl, surchargeable dans themes/<theme>/modules/websourcereassurance/views/templates/hook/group.tpl. Variable Smarty assignée : $wsr_view avec les clés identifier, classes, style (attribut style contenant les variables --wsr-*), title, items[] (icon HTML, title, text, url).

Feuille de style : views/css/front.css (mobile d'abord, propriétés logiques, prefers-reduced-motion). Conteneur .wsr, variantes de disposition box, wide, list.

Variable CSSRôle
--wsr-bg, --wsr-text, --wsr-titleFond, texte, titres (surcharges de couleur du groupe).
--wsr-border, --wsr-border-w, --wsr-border-style, --wsr-radius, --wsr-shadowBordure, arrondi et ombre du bloc.
--wsr-icon-color, --wsr-icon-bg, --wsr-icon-bc, --wsr-icon-bw, --wsr-icon-sizeIcône : couleur, fond, bordure (couleur, épaisseur), taille.
--wsr-c, --wsr-c-sm, --wsr-c-md, --wsr-c-lgNombre de colonnes (base, téléphone, tablette, ordinateur).

Valeurs « thème » reprises avec repli neutre : --color-brand-600, --color-brand-50, --color-ink, --color-line, --color-surface, --radius-xl, --wst-card-shadow.

Sécurité

Requêtes préparées/échappées ; SVG reconstruits par liste blanche (ni <script>, ni attributs on*, ni javascript:, ni foreignObject, ni référence externe) ; type réel du fichier vérifié ; 1 Mo maximum (200 Ko pour un SVG, 4000 px maximum) ; noms de fichiers aléatoires ; uploads/.htaccess.

Tests

php tests/run.php (sans PrestaShop) : nettoyage SVG, contrôle des images, couleurs et contraste, CSS, liens par langue, traductions, cohérence multiboutique, paquet de thème (tests/themepackage_test.php).