Accueil

Référence développeur · PrestaShop

Websource Prestashop Theme — référence développeur

Gabarits, hooks, variables Smarty, variables CSS, feuilles de style par page et points d'extension du thème Prestashop SEO Websource.

Version 0.1.0 · PrestaShop 1.7.0 à 9.x, PHP 7.1+ ; Node.js 18+ uniquement pour recompiler le CSS · Mis à jour le 09/10/2026

Guide utilisateur

Cette extension existe aussi pour : WordPressJoomla

Vue d'ensemble

  • Thème Smarty classique (themes/WebsourcePrestashopTheme), déclaré dans config/theme.yml (name: WebsourcePrestashopTheme, display_name: Websource Prestashop Theme, version: 0.1.0, compatibilité from: 1.7.0.0, to: ~).
  • CSS écrit en Tailwind v4 et compilé en CSS statique : un socle commun assets/css/theme.css chargé partout par PrestaShop, puis un fichier par type de page dans assets/css/pages/*.css. Aucune compilation dans le navigateur, aucune dépendance à un CDN.
  • JavaScript sans jQuery pour le thème lui-même (assets/js/theme.js) ; assets/js/vendor-theme.js conserve les greffons hérités du thème Classic dont dépendent PrestaShop et certains modules natifs.
  • Les réglages (couleurs, variantes d'en-tête et de pied de page, badges, données structurées…) ne sont pas dans le thème : ils sont fournis par le module Websource Theme Config au moyen de variables Smarty et de variables CSS décrites plus bas. Le thème fonctionne sans ce module avec des valeurs de repli.
  • Sources : assets/src/*.css (jetons, socle, en-tête, formulaires, badges, dispositions de fiche produit, variantes, compatibilité Bootstrap), cartographie page → gabarits dans scripts/pages.config.mjs.

Compilation du CSS

cd themes/WebsourcePrestashopTheme
npm install
npm run build

Le script scripts/build-css.mjs produit assets/css/theme.css et assets/css/pages/<page>.css à partir de scripts/pages.config.mjs : pour chaque page, il suit les {include}/{extends} des gabarits racines, ajoute les gabarits des modules surchargés (modules/<nom>) utilisés par la page et conserve une liste blanche de classes ajoutées dynamiquement (baseSafelist, pageSafelist). Un tableau des tailles s'affiche en fin de compilation.

Les classes CSS n'existent que si elles ont été vues à la compilation : une nouvelle classe utilitaire ajoutée dans un gabarit n'a d'effet qu'après npm run build.

Gabarits

Mises en page (templates/layouts/)

FichierNom affichéUsage par défaut (theme_settings)
layout-full-width.tplPleine largeurdefault_layout : accueil, produit, panier, tunnel, compte, CMS…
layout-left-column.tplColonne gauchecategory, best-sales, new-products, prices-drop, contact
layout-right-column.tplColonne droitesur demande
layout-both-columns.tplTrois colonnessur demande (gabarit de base des autres)
layout-content-only.tpl—contenu seul (fenêtres, impression)
layout-error.tpl—pages d'erreur (assets/css/error.css, assets/js/error.js)

Structure commune : <html lang="{$language.locale}" dir="rtl"> si $language.is_rtl, lien d'évitement #content, <header id="header">, <section id="wrapper"> avec #left-column, #content-wrapper > #content, #right-column, <footer id="footer">, barre mobile _partials/tabbar.tpl, scripts du bas.

Blocs Smarty surchargeables dans un thème enfant : head, hook_after_body_opening_tag, product_activation, header, notifications, breadcrumb, left_column, content_wrapper, content, right_column, footer, javascript_bottom, hook_before_body_closing_tag. Dans _partials/header.tpl : header_banner, header_nav, header_top. Dans _partials/footer.tpl : hook_footer_before, hook_footer, copyright_link, hook_footer_after. Dans catalog/product.tpl : page_header_container, product_cover_thumbnails, product_prices, product_description_short, product_variants, product_pack, product_discounts, product_add_to_cart, product_buy, product_customization, product_additional_info, product_refresh, product_tabs, product_description, product_details, product_attachments, product_accessories, product_footer, product_images_modal, hook_display_reassurance, head_microdata_special.

Classes du <body>

Le <body> porte {$page.body_classes} puis la chaîne $wsx_body_classes (fournie par Websource Theme Config). Valeur de repli si le module est absent :

wsx-mn-bottom wsx-mh-icons_right wsx-dh-classic wsx-ft-dark wsx-sw-md wsx-sa-center wsx-ha-main
PréfixeRôleValeurs connues du CSS
wsx-dh-*Variante d'en-tête sur ordinateurclassic, centered, compact, large, split, band, dark, sticky
wsx-mh-*Variante d'en-tête sur mobileicons, icons_right, centered, stacked
wsx-mn-*Menu mobile : barre du bas ou bouton en hautbottom, top
wsx-ft-*Variante de pied de pagedark, light, brand, accent, centered, contrast, minimal, twotone
wsx-sw-*Largeur de la barre de recherchesm, md, lg, full
wsx-sa-*Alignement de la barre de rechercheleft, center, right
wsx-ha-*Position de la recherche dans l'en-têtemain (seule valeur stylée à ce jour)
wsx-ci-*Intensité des couleurssober, balanced, vivid
wsx-co-h-* / wsx-co-f-*En-tête / pied de page du tunnel de commande (sur #header / #footer, page checkout seulement)valeur de $wsx_checkout_header / $wsx_checkout_footer (full, épuré, masqué)

Partials notables (templates/_partials/)

FichierRôle
head.tpltitle, description, canonical, hreflang + x-default, Open Graph, prev/next, inclusion des microdonnées.
header.tplGrille d'en-tête : bandeau (displayBanner), barre utilitaire (displayNav1, displayWebsourceTopbarRight), actions (displayNav2), burger data-wsmm-open, loupe aria-controls="wsx-search", logo (<h1> sur l'accueil seulement), compte, panier avec compteur data-wsx-cart-count, zone de recherche #wsx-search (displayTop), menu (displayNavFullWidth).
footer.tplBloc collé au pied (displayFooterBefore), colonne « informations de la boutique » ($wsx_footer_info), displayFooter, barre du bas : copyright (displayWebsourceCopyright ou © {année} {$shop.name}), lien Cookies (data-ws-cookie-settings), displayFooterAfter, sélecteurs (displayWebsourceFooterLocale).
tabbar.tplBarre de navigation mobile : Accueil, Menu (data-wsmm-open), Compte / Connexion, Panier (compteur), Nouveautés, Contact. Masquée dans le tunnel si l'en-tête du tunnel n'est pas full.
microdata/head-jsonld.tplJSON-LD global (organisation / site, fil d'Ariane, listes de produits).
microdata/product-jsonld.tplJSON-LD Product / Offer, enrichi de shippingDetails et hasMerchantReturnPolicy depuis $wsx_ld_commerce.
microdata/product-list-jsonld.tplItemList des listes de produits.
pagination.tpl, pagination-seo.tplPagination visible et balises prev/next.
helpers.tpl, form-fields.tpl, form-errors.tpl, password-policy-template.tplAides de formulaires natives mises en forme.

Modules surchargés (modules/)

Le thème redessine les gabarits des modules natifs suivants (sans modifier leur code) : blockreassurance, blockwishlist, contactform, ps_advertising, ps_banner, ps_bestsellers, ps_brandlist, ps_categoryproducts, ps_categorytree, ps_contactinfo, ps_crossselling, ps_currencyselector, ps_customeraccountlinks, ps_customersignin, ps_emailalerts, ps_emailsubscription, ps_facetedsearch, ps_featuredproducts, ps_imageslider, ps_languageselector, ps_legalcompliance, ps_linklist, ps_mainmenu, ps_newproducts, ps_productinfo, ps_rssfeed, ps_sharebuttons, ps_shoppingcart, ps_socialfollow, ps_specials, ps_supplierlist, ps_viewedproduct.

Hooks

Hooks d'affichage appelés par les gabarits

Natifs PrestaShop : displayAfterBodyOpeningTag, displayBeforeBodyClosingTag, displayBanner, displayNav1, displayNav2, displayTop, displayNavFullWidth, displayWrapperTop, displayWrapperBottom, displayContentWrapperTop, displayContentWrapperBottom, displayLeftColumn, displayRightColumn, displayLeftColumnProduct, displayRightColumnProduct, displayFooterBefore, displayFooter, displayFooterAfter, displayAfterTitleTag, displayNotFound, displaySearch, displayReassurance, displayProductPriceBlock (13 appels, types before_price, after_price, unit_price, weight, old_price…), displayProductActions, displayProductAdditionalInfo, displayAfterProductThumbs, displayFooterProduct, displayProductListReviews, displayShoppingCart, displayShoppingCartFooter, displayCrossSellingShoppingCart, displayCartExtraProductActions, displayExpressCheckout, displayCheckoutSummaryTop, displayCheckoutSubtotalDetails, displayPersonalInformationTop, displayPaymentTop, displayPaymentByBinaries, displayCustomerLoginFormAfter, displayCustomerAccount, displayAdditionalCustomerAddressFields, displayCMSPrintButton, displayCMSDisputeInformation, actionProductOutOfStock.

Hooks propres au thème (créés par les modules Websource)

HookEmplacementModule qui s'y greffe habituellement
displayWebsourceTopbarRightBarre utilitaire de l'en-tête, à droiteWebsource Link Lists, Websource Locale
displayWebsourceFooterLocaleBarre du bas du pied de page, à droiteWebsource Locale
displayWebsourceCopyrightBarre du bas du pied de page, à gauche (remplace le © par défaut)Websource Theme Config / Link Lists
displayWebsourceReviewsColonne « informations » du pied de pageWebsource Google Reviews
displayWebsourceSocialLoginFormulaires de connexion et de création de compteWebsource Social Login
displayWebsourceProductJsonLdDans le JSON-LD produit (nœuds supplémentaires)modules d'avis

Aucun modules_to_hook n'est déclaré dans theme.yml (PrestaShop remplacerait sinon la liste complète des modules de chaque hook) : chaque module Websource se greffe lui-même à l'installation. Le bouton Rétablir les accroches de Websource Theme Config refait ce greffage.

Variables Smarty lues par le thème

Toutes sont facultatives ; sans elles le thème applique un repli.

VariableFournie parContenu
$wsx_body_classesWebsource Theme ConfigChaîne de classes wsx-* posées sur <body> (voir plus haut).
$wsx_footer_infoWebsource Theme ConfigTableau : logo, logo_light_url, logo_dark_url, bg_light, name, description, social[] (url, label, color, ink, svg). Crée la colonne « À propos » du pied de page.
$wsx_checkout_header, $wsx_checkout_footerWebsource Theme ConfigVariante d'en-tête / pied dans le tunnel (full ou autre) ; tabbar masquée si l'en-tête n'est pas full.
$wsx_subcatWebsource Theme Configmode (image_name, image, image_tooltip, hidden, slider), autoplay, delay : affichage des sous-catégories en haut d'une catégorie.
$wsx_ld_commerceWebsource Theme Configshipping (node, currency, cost, free_from) et return_policy pour le JSON-LD produit.
$wsx_share_networksWebsource Theme ConfigRéseaux des boutons de partage de la fiche produit.
$wsx_product_layoutWebsource Builder (hook displayHeader)zones : disposition de la fiche produit (Classique, Galerie XL, Vitrine, Minimal, Achat toujours visible, Magazine).

Variables natives utilisées sans modification : $page, $shop, $urls, $language, $customer, $cart, $product, $category, $listing, $breadcrumb, $javascript.

Variables CSS

Déclarées dans assets/src/tokens.css (bloc @theme, non inlinées) et surchargées à l'exécution par Websource Theme Config dans un :root{…}. Un module tiers peut donc s'y référer avec une valeur de repli.

VariableRepliRôle
--color-brand, --color-brand-50 … --color-brand-900#0f766e (600)Couleur de marque et sa gamme.
--color-brand-fill, --color-brand-on, --color-brand-textFond des boutons, texte sur ce fond, texte de la couleur de marque.
--color-secondary, --color-secondary-50 … -900, -fill, -on, -text#0b3a5cCouleur secondaire.
--color-accent, --color-accent-50 … -900, -fill, -on, -text#f5b83dCouleur d'accent (badges, mises en avant).
--color-accent-wst#f0556bAccent historique (promotions).
--color-ink, --color-line, --color-page, --color-surface, --color-whiteTexte, filets, fond de page, fond des cartes.
--color-footer, --color-footer-ink, --color-footer-muted, --color-footer-deep, --color-footer-line, --color-footer-hoverPalette du pied de page.
--font-sans, --font-headpolice systèmePolice du texte et des titres.
--container-page80remLargeur maximale (.wsx-container).
--radius-xl, --radius-2xl1rem, 1.5remArrondis des cartes et boutons.
--wst-card-shadownoneOmbre des cartes.
--wsx-tabbar-hHauteur de la barre mobile (réserve l'espace en bas de page).
--wsx-hdr-pt, --wsx-hdr-pb, --wsx-hdr-minHauteurs de l'en-tête (réglables dans Theme Config).
--wsx-swLargeur de la barre de recherche.
--wsx-bd-default-bg, --wsx-bd-default-fg, --wsx-bd-default-bd, --wsx-bdc-bg, --wsx-bdc-fg, --wsx-bdc-bdBadges produit : fond, texte, bordure (par défaut et par type).
--wsx-brand, --wsx-brand-inkPosées en ligne sur chaque icône de réseau social du pied de page.
--wsx-zx, --wsx-zyPoint de zoom de la visionneuse.

Autres règles de style : propriétés logiques uniquement (margin-inline, inset-inline-start, text-align:start), inversion automatique sous [dir=rtl], classe wsx-flip pour les icônes directionnelles, montants isolés (unicode-bidi:isolate), prefers-reduced-motion respecté.

Feuilles de style et scripts déclarés (theme.yml)

Clé php_selfFichierIdentifiant
(toutes)assets/css/theme.csschargé par PrestaShop
indexassets/css/pages/index.csswsx-page-index
categorypages/category.csswsx-page-category
productpages/product.csswsx-page-product
cartpages/cart.csswsx-page-cart
checkout, orderpages/checkout.csswsx-page-checkout
order-confirmationpages/order-confirmation.csswsx-page-order-confirmation
authentication, registration, password, my-account, identityun fichier chacunwsx-page-<clé>
history, order-detail, order-follow, order-slip, order-return, discount, guest-trackingpages/history.csswsx-page-history
addresses, addresspages/addresses.csswsx-page-addresses
cms, contact, searchun fichier chacunwsx-page-<clé>
best-sales, new-products, prices-droppages/best-sales.csswsx-page-best-sales
manufacturer, supplierpages/manufacturer.csswsx-page-manufacturer
sitemap, storespages/sitemap.csswsx-page-sitemap
pagenotfoundpages/pagenotfound.csswsx-page-pagenotfound

Les pages de modules (module-*) ne sont pas listées : leur CSS est servi par Websource Page Styles. Priorité des feuilles de page : 60.

Scripts (position bottom) : wsx-vendor (vendor-theme.js, 150), wsx-theme (theme.js, 200), wsx-categorytree (210), wsx-subcategories (220), wsx-product (230). theme.js se protège contre un double chargement (window.__wsxThemeJs).

Comportements JavaScript (theme.js)

Tout se déclenche par attributs data-*, sans initialisation à écrire :

Attribut / sélecteurComportement
[data-wsx-slider] avec [data-wsx-dir], [data-wsx-to], [data-wsx-pause]Carrousel scroll-snap (flèches, points, pause, autoplay coupé si prefers-reduced-motion). Utilisé par ps_imageslider et les sous-catégories en mode slider.
[data-wsx-gallery], .js-thumb, .js-qv-product-cover, [data-wsx-prev], [data-wsx-next], [data-wsx-open]Galerie de la fiche produit : vignettes, image de couverture, flèches, ouverture de la visionneuse.
.wsx-lightbox, [data-wsx-stage], [data-wsx-close], [data-wsx-lprev], [data-wsx-lnext], [data-wsx-zoom], [data-wsx-count]Visionneuse plein écran avec zoom au pointeur.
[data-wsx-cart-count]Compteurs du panier (en-tête et barre mobile) mis à jour sur l'événement updateCart de PrestaShop.
[data-wsx-dd], .wsx-dd__list, [role=option], [data-wsx-sort-link]Liste déroulante accessible (tri des listes de produits).
[data-wsmm-open]Ouvre le menu « push » de Websource Mega Menu (le thème ne fait que poser l'attribut).
.wsx-loupe[aria-controls="wsx-search"]Déplie la zone de recherche sur mobile.
[data-ws-cookie-settings]Lien Cookies du pied de page, intercepté par un module de consentement s'il est présent.

categorytree.js (arbre des catégories pliable), subcategories.js (carrousel des sous-catégories) et product.js (déclinaisons, quantité, rafraîchissement de la fiche) complètent le socle.

Réglages appliqués à l'activation (global_settings)

  • PS_QUICK_VIEW: false (aperçu rapide désactivé).
  • modules.to_enable : websourcethemeconfig, websourcepagestyles, websourcebuilder, websourcemegamenu, websourcecartblock, websourceaccountblock, websourcelinklists, websourcefacetedsearch, websourcereassurance, websourcenewproducts, websourcesearchbar, websourceslider, websourcebrands, websourcestoreinfo, websourcenewsletter, websourcegooglereviews, websourcesociallogin, websourcebandeau (ignorés s'ils ne sont pas installés).
  • modules.to_disable : ps_mainmenu, ps_shoppingcart, ps_customersignin, ps_linklist, ps_facetedsearch, ps_customeraccountlinks, ps_searchbar, ps_imageslider, ps_newproducts, ps_featuredproducts, ps_bestsellers, ps_specials, ps_brandlist, blockreassurance, ps_contactinfo, ps_emailsubscription, ps_banner, ps_customtext.
  • image_types : cart_default 125×125, small_default 98×98, medium_default 452×452, home_default 250×250, large_default 800×800, category_default 1400×280, stores_default 170×115.

Ces listes ne s'appliquent qu'à la boutique active au moment de l'activation (multiboutique : activer boutique par boutique).

Traductions

Toutes les chaînes passent par {l s='…' d='Shop.Theme.*'}, Shop.Forms.*, Shop.Notifications.* (domaines du thème Classic) : les traductions existantes de PrestaShop sont réutilisées. Deux chaînes propres au thème sont à traduire dans International > Traductions > Traductions du thème, domaine Shop.Theme.Global : « Nouveautés » (barre mobile) et « Pause » (carrousel).

Thème enfant

Créez un thème enfant depuis Apparence > Thème et logo > Personnalisation avancée ou à la main (themes/<enfant>/config/theme.yml avec parent: WebsourcePrestashopTheme). Un gabarit placé au même chemin dans l'enfant remplace celui du parent ; les blocs Smarty listés plus haut permettent de ne surcharger qu'une zone ({extends file='parent:catalog/product.tpl'}). Pour du CSS seul, préférez le module Websource Page Styles, qui évite la création d'un thème enfant.

Export / import complet (.wsxtheme)

Le thème lui-même ne contient aucune donnée de boutique. L'export complet d'une configuration (réglages, mises en page, menus, contenus, catalogue de démonstration) est assuré par Websource Theme Config 1.11+ (schéma wsxtheme/1, fichiers .wsxtheme.json / .wsxtheme.zip) : voir la référence développeur de ce module.