Accueil

Référence développeur · PrestaShop

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

Hooks, widget et ses options, API PHP, bloc Builder, réglages, cache, template et variables CSS du module Websource Brands.

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

Guide utilisateur

Cette extension existe aussi pour : WordPress

Vue d'ensemble

  • Module websourcebrands, classe WebsourceBrands, espace de noms Websource\Brands (PSR-4, vendor/autoload.php fourni).
  • Implémente WidgetInterface. Configuration dans la page Configurer du module (getContent()), avec un contrôleur d'administration AdminWebsourceBrands réservé à l'aperçu AJAX.
  • Aucune table : un seul réglage JSON par boutique, WSBRANDS_SETTINGS.
  • Cache fichier JSON dans var/cache/<env>/websourcebrands/ (10 minutes, séparé par boutique et langue), vidé à l'enregistrement et aux hooks actionObjectManufacturer{Add,Update,Delete}After.

Hooks

Hooks d'affichage (greffés selon les emplacements choisis)

Clé d'emplacementLibelléHookPage imposée
homePage d'accueil, dans le contenudisplayHomehome
under_headerSous l'en-tête (pleine largeur)displayNavFullWidthau choix
page_topEn haut du contenu de la pagedisplayWrapperTopau choix
page_bottomEn bas du contenu de la pagedisplayWrapperBottomau choix
product_footerSous la fiche produitdisplayFooterProductproduct
before_footerJuste au-dessus du pied de pagedisplayFooterBeforeau choix
footerDans le pied de pagedisplayFooterau choix
after_footerTout en bas, sous le pied de pagedisplayFooterAfterau choix
left_column / right_columnColonnes latéralesdisplayLeftColumn / displayRightColumnau choix
customUn autre emplacement (avancé)tout display* saisiau choix

Pages reconnues (Hook\PageDetector) : all, home, category, product, brand, cms, search, cart, contact, notfound. Hook\HookSynchronizer greffe et dégreffe par boutique les hooks nécessaires (Placements::hooksOf()), en plus des hooks fixes.

Hooks fixes

HookRôle
actionFrontControllerSetMediaCharge views/css/front.css et, pour le carrousel et la liste seulement, views/js/front.js, uniquement si le bloc s'affiche sur la page.
displayHeaderJSON-LD schema.org si l'option est active : nœud Brand (<url>#brand) sur la page d'une marque, ItemList de Brand sur la page « liste des marques ».
actionObjectManufacturerAddAfter, …UpdateAfter, …DeleteAfterVident le cache.
actionWebsourceBuilderRegisterBlocksDéclare le bloc « Marques » au Websource Builder.
actionWebsourceThemeExport / actionWebsourceThemeImportSection brands (version 1) des paquets .wsxtheme : disposition, design, emplacements, titres par ISO ; marques par clé stable brand:slug.

Widget Smarty

{widget name='websourcebrands'}
{widget name='websourcebrands' layout='carousel' limit='10' grayscale='0' title='Nos partenaires'}

Options acceptées : toutes les clés de Settings::defaults() et title (qui renseigne title_override et show_title).

CléType / valeursDéfaut
layoutgrid, carousel, listgrid
columns2 à 86
limit0 (toutes) à 6012
sortname, manual, productsname
selectionall, only, exceptall
brand_ids, manual_ordertableaux d'identifiants[]
only_with_products, show_name, show_count, grayscale, autoplay, schema, show_title, inherit_design, bordersbooléensvoir défauts (grayscale, autoplay, only_with_products, schema, show_title, inherit_design, borders vrais)
bg, title_colorcouleur hexadécimale#ffffff, #14282b
radiusnone, small, medium, largelarge
widthbox, widebox
titletexte (vide = pas de titre)titre par langue

Sans option, le widget rend les emplacements du hook courant (renderHook). Dans le widget et le Builder, CSS et JS sont insérés une fois en ligne si l'en-tête ne les a pas chargés.

API PHP

$module = Module::getInstanceByName('websourcebrands');
echo $module->renderWithOptions(['layout' => 'list'], $languageId /* 0 = courante */, $forceAssets /* false */);

Services via $module->services() (Websource\Brands\Services) : dépôt des marques (BrandRepository, une requête agrégée bornée par id_shop), Settings\SettingsStore (load, save, has), Render\BrandViewBuilder, Render\BrandCache, Render\BrandJsonLdBuilder, Domain\BrandSorter, Domain\AlphabetGrouper (repli des accents, écritures non latines, #), Domain\ContrastChecker, Domain\ImageTypePicker, Render\LogoResolver (<picture> WebP/AVIF si disponibles, loading="lazy").

Bloc Websource Builder

Classe Builder\BrandsBlock, enregistrée seulement si Websource\Builder\Block\BlockInterface existe.

ChampValeurs
Titretexte (défaut « Nos marques », vide = aucun titre)
Présentationgrid Grille de logos, carousel Carrousel défilant, list Liste alphabétique
Nombre de marques1 à 60 (défaut 12)
Logos en gris (couleur au survol)interrupteur (défaut activé)

Contrôleur d'administration

index.php?controller=AdminWebsourceBrands&token=…&ajax=1&action=preview (POST, champs du formulaire wsbr[…]) : renvoie { "html": "<section class=\"wsbr …\">…</section>" } pour l'aperçu en direct. L'enregistrement passe par le formulaire classique de la page Configurer (POST wsbr_save, réglages assainis par Settings::sanitize() : choix énumérés, entiers bornés, couleurs validées, emplacements filtrés).

Réglages

Clé de configurationPortéeContenu
WSBRANDS_SETTINGSpar boutique (enregistrée avec son groupe)JSON des clés ci-dessus + titles (id de langue => titre) + placements ([{page, position, hook}]).

Sans contexte de boutique (CLI, AJAX), la boutique par défaut et sa langue par défaut sont utilisées. Mises à niveau : upgrade-1.1.0.php (réglages et hooks par boutique), upgrade-1.2.0.php (displayHeader), upgrade-1.3.0.php (hooks de paquet de thème).

Template et CSS

Template views/templates/hook/brands.tpl, surchargeable dans themes/<theme>/modules/websourcebrands/views/templates/hook/brands.tpl. Variable Smarty $wsbr : uid, layout, classes, style, title, show_title, show_name, show_count, autoplay, schema, brands[] (name, url, logo HTML, products, fold lettre de classement), letters et groups (liste alphabétique).

Classes : .wsbr, .wsbr--grid|--carousel|--list, .wsbr--gray, .wsbr--themed, .wsbr__inner, .wsbr__title, .wsbr__items, .wsbr__item.

Variable CSSRôle
--wsbr-bg, --wsbr-title, --wsbr-ink, --wsbr-line, --wsbr-accent, --wsbr-tintCouleurs du bloc (fond, titre, texte, filets, accent, teinte).
--wsbr-radius, --wsbr-tile-radius, --wsbr-shadowArrondis du bloc et des tuiles, ombre.
--wsbr-colsNombre de colonnes sur ordinateur.

Variables du thème reprises avec repli : --color-brand-600, --color-brand-50, --color-ink, --color-line, --color-surface, --radius-xl, --radius-2xl, --wst-card-shadow, --wst-container. CSS en propriétés logiques (RTL), prefers-reduced-motion respecté (plus d'autoplay ni de transition).

Traductions et tests

Textes sources en français ($this->l(), {l s='…' mod='websourcebrands'}), translations/fr.php et translations/en.php. Tests autonomes : php tests/run.php (tri, regroupement, options, contraste, emplacements, réglages et hooks par boutique, traductions, CSS).