Accueil

Référence développeur · PrestaShop

Websource Theme Config pour PrestaShop — référence développeur

Hooks, variables Smarty et CSS, contrôleurs, commandes console, clés de configuration et format d'export du module Websource Theme Config.

Version 1.11.1 · PrestaShop 1.7.7 à 9.x, PHP 7.1+, thème Websource Prestashop Theme · Mis à jour le 09/10/2026

Guide utilisateur

Cette extension existe aussi pour : WordPress

Vue d'ensemble

  • Module websourcethemeconfig, onglet front_office_features, espace de noms Websource\ThemeConfig\ (PSR-4 dans src/, autoload Composer embarqué, aucune dépendance exigée chez le client).
  • Un seul réglage JSON WSTC_SETTINGS, propre à chaque boutique (repli : groupe, puis valeur globale), lu et écrit par Settings\SettingsRepository (load(), save(ThemeSettings), shopsWithOwnSettings(), delete()). Settings\ThemeSettings porte les valeurs par défaut (defaults()), les listes de choix (constantes *_CHOICES), get(), with(), color(), layoutClasses().
  • Aucun cache propre ; les tables créées : wstc_demo_item (entités de catalogue marquées « démo », depuis 1.11.0).
  • Médias : uploads/fonts (polices importées, noms uniques par contenu, Font\UploadedFontStorage), uploads/footer (logos du pied de page, Footer\FooterLogoStorage), uploads/theme (médias importés d'un paquet).

Hooks

Hooks greffés à l'installation

HookRôle
displayHeaderAssigne les variables Smarty (ci-dessous) et émet dans le <head> : <style id="wstc-vars"> (variables CSS), liens Google Fonts, preconnect / dns-prefetch / preload, balises Open Graph / Twitter / theme-color, lien alternate RSS, JSON-LD Organization + WebSite, balises libres.
displayWebsourceCopyrightTexte du copyright du pied de page (hook propre au thème).
displayBeforeBodyClosingTagSélecteur de palettes pour les administrateurs (si admin_palette = 1 et super administrateur authentifié) ; sélecteur de démos (sites .websrc.fr multiboutique uniquement).
actionPresentProductListingAjoute à chaque produit présenté la clé paresseuse wsx_variants (déclinaisons et stock chargés en une requête pour toute la page).
actionWebsourceThemeExport, actionWebsourceThemeImportParticipation au paquet de thème (sections theme, layout, cms, catalog).

Hooks personnalisés exposés

actionWebsourceThemeExport(array $params): array et actionWebsourceThemeImport(array $params): array : tout module Websource peut y répondre pour être inclus dans l'export / import. Le module appelle directement les méthodes hookActionWebsourceThemeExport / hookActionWebsourceThemeImport des modules installés et actifs (isolation des erreurs).

public function hookActionWebsourceThemeExport(array $params): array
{
    // $params['ctx'] : Websource\ThemeConfig\Package\PackageContext
    return ['key' => 'megamenu', 'version' => 1, 'label' => $this->l('Méga menu'), 'data' => [/* … */]];
}

public function hookActionWebsourceThemeImport(array $params): array
{
    // $params : section, version, data, mode (replace|merge), dry_run (bool), ctx
    return ['action' => 'replace', 'counts' => ['create' => 0, 'update' => 1, 'delete' => 0, 'skip' => 0], 'messages' => []];
}

PackageContext : idShop(), baseUrl(), option($clé, $défaut), toIso(array $parIdLang), langMap(array $parIso), refTo($type, $id) / refResolve($ref), mediaLocalPath($url), warn($message). Règles : aucune écriture en dry_run, replace = l'état du module devient exactement celui du paquet, pas de transaction propre (le hub en gère une), invalider ses caches.

Variables Smarty assignées (hook displayHeader)

VariableContenu
wsx_body_classeswsx-mn-<mobile_nav> wsx-mh-<mobile_header> wsx-dh-<desktop_header> wsx-ft-<footer_variant> wsx-sw-<search_width> wsx-sa-<search_align> wsx-ha-<header_actions> wsx-ci-<color_intensity> (ThemeSettings::layoutClasses()).
wsx_footer_infologo, logo_light_url, logo_dark_url, bg_light, name, description (langue courante), social[] (url, label, color, ink, svg) ; absent si footer_info_enabled = 0.
wsx_checkout_header, wsx_checkout_footerfull, minimal ou none.
wsx_subcatmode (image_name, image, image_tooltip, hidden, slider), autoplay, delay.
wsx_ld_commerceshipping (node OfferShippingDetails, currency, cost, free_from) et return_policy (MerchantReturnPolicy) ; clés absentes si rien n'est saisi.
wsx_share_networksListe parmi facebook, x, linkedin, whatsapp, telegram, pinterest, email, copy.
product.wsx_variants (listing)Déclinaisons par attribut avec disponibilité, pour les pastilles sous les miniatures (Catalog\MiniatureVariants).

Variables CSS émises (<style id="wstc-vars">, Head\ThemeStyleBuilder)

VariablesSource
--color-brand, --color-brand-50 … -900, -fill, -on, -text ; idem --color-secondary-*, --color-accent-*primary, secondary, accent (Color\Color::toFullScale(), readable(), asText()).
--color-ink, --color-line, --color-page, --color-surface, --color-footer, --color-footer-ink, --color-footer-muted, --color-footer-deep, --color-footer-line, --color-footer-hover, --color-accent-wstink, line, page_bg, surface, footer_bg.
--font-sans, --font-headpolices (système, Google Fonts via <link rel="stylesheet">, ou @font-face du fichier importé).
--radius-xl, --radius-2xl, --wst-card-shadowradius, borders, shadow_when_no_border.
--wsx-bd-radius, --wsx-bd-fs, --wsx-bd-fw, --wsx-bd-tt, --wsx-bd-bw, --wsx-bd-py, --wsx-bd-px, --wsx-bd-gap, --wsx-bd-lh, --wsx-bd-<type>-bg|fg|bdbadges (badge_*) ; émises seulement si la valeur diffère du défaut. Types : discount, new, on_sale, pack, out_of_stock, online_only, default.
--wsx-thumb-pad, --wsx-thumb-img-rthumb_pad, thumb_img_radius.
--wsx-hdr-min, --wsx-hdr-pt, --wsx-hdr-pbheader_min_height, header_pad_top, header_pad_bottom (appliquées à #header ≥ 992 px).

Clés du réglage WSTC_SETTINGS

Valeurs par défaut entre parenthèses.

  • Couleurs : primary (#0369a1), secondary (#0b3a5c), accent (#f5b83d), ink (#0f172a), line (#dbe4ee), page_bg, surface (#ffffff), footer_bg (#0c2a43), color_intensity (balanced ; sober, vivid), admin_palette (0).
  • Forme : borders (1), shadow_when_no_border (1), radius (xl ; none, sm, md, lg).
  • Polices : font_body_mode, font_head_mode (system ; google, upload), font_body, font_head, font_body_file, font_head_file.
  • Head : og_enabled (1), theme_color (1), og_image, twitter_site, fb_app_id, preconnect, dns_prefetch, preload, head_extra.
  • Microdonnées : ld_same_as, ld_phone, ld_email, ld_ship_countries, ld_handling_min|max, ld_transit_min|max, ld_ship_cost, ld_ship_free_from, ld_ship_currency, ld_return_mode, ld_return_days, ld_return_countries, ld_return_fees, ld_return_fee_amount, ld_return_method, ld_return_url, ld_pay_auto (0), ld_payment, ld_area_served, ld_price_range, ld_currencies_auto (0), ld_currencies.
  • RSS : rss_enabled (1), rss_limit (30).
  • Pied de page : copyright (par langue), footer_info_enabled (1), footer_info_shop (0 = boutique courante), footer_info_logo (1), footer_info_name (1), footer_logo_light, footer_logo_dark, footer_description (par langue), footer_social (réseau → URL).
  • Mise en page (écrites par Websource Builder via saveLayout()) : mobile_nav (bottom, top), mobile_header (icons_right, centered, stacked), desktop_header (classic, centered, compact, split, band, dark, large, sticky), footer_variant (dark, light, brand, centered, minimal, accent, twotone, contrast), search_width (md ; sm, lg, full), search_align (center ; left, right), header_actions (main, top), header_min_height (0), header_pad_top (20), header_pad_bottom (20).
  • Catalogue : subcat_mode (image_name), subcat_autoplay (1), subcat_delay (5), thumb_pad (0), thumb_img_radius (same, inner), thumb_variants (color ; off, all), thumb_variants_max (5, de 1 à 12), thumb_variants_stock (grey ; show, hide), share_networks, checkout_header, checkout_footer (full ; minimal, none).
  • Badges : badge_radius_mode (pill), badge_radius_px (8), badge_font_size (12), badge_font_weight (700), badge_uppercase (0), badge_border_width (0), badge_pad_y (2), badge_pad_x (10), badge_gap (4), badge_<type>_bg|fg|bd (vide).

Autre clé de configuration : WSTC_PKG_PROFILES (identifiants de profils autorisés, en plus des super administrateurs, à utiliser l'écran Importer / Exporter).

Méthodes publiques du module

MéthodeRôle
saveLayout(array $choices): boolEnregistre mobile_nav, mobile_header, desktop_header, footer_variant, search_width, search_align, header_actions, header_min_height, header_pad_top, header_pad_bottom (valeurs validées contre les listes de choix). Appelée par AdminWebsourceBuilderController.
installPackageTab()Crée l'onglet AdminWebsourceThemePackage sous Apparence.

Classes utilitaires réutilisables : Color\Color (toFullScale(), contrast(), readable(), asText()), Settings\ColorPresets (9 palettes, match()), Ecosystem\EcosystemCatalog (correspondance module d'origine → module Websource et hooks attendus), Ecosystem\EcosystemInstaller, Ecosystem\HookRestorer (plan(), restore()), Footer\CopyrightRenderer / CopyrightSanitizer, Head\OrganizationJsonLdBuilder, Head\CommerceJsonLd, Package\DemoLibrary.

Contrôleurs et routes

Back-office

ContrôleurRôle
AdminModules&configure=websourcethemeconfigÉcran de configuration. Formulaires : submitWstc (réglages), submitWstcEcosystem (Installer et activer les modules Websource), submitWstcEcosystemRevert (Revenir aux modules d'origine), submitWstcHooks (Rétablir les accroches).
AdminWebsourceThemePackageImporter / Exporter le thème. Actions AJAX (POST, jeton CSRF, super administrateur ou profil de WSTC_PKG_PROFILES) : ajaxProcessAnalyze (analyse à blanc d'un fichier ou d'une démo), ajaxProcessApply (import), ajaxProcessRestore (retour à une sauvegarde), ajaxProcessExportSections (export et téléchargement).

Front

RouteMéthodeRôle
/module/websourcethemeconfig/rss (index.php?fc=module&module=websourcethemeconfig&controller=rss)GETFlux RSS 2.0 des derniers produits de la boutique du domaine appelé, dans la langue de l'URL. Paramètre facultatif id_category (catégorie vérifiée par association à la boutique). Nombre d'éléments : rss_limit. Vide si rss_enabled = 0.
/module/websourcethemeconfig/palettePOSTSélecteur de palettes des administrateurs. Paramètres : token (jeton lié à l'employé, Palette\PaletteGuard), action, puis soit un preset de la liste fermée, soit trois couleurs hexadécimales. Réponse JSON no-store (preset reconnu, variables CSS calculées). Refus si le cookie psAdmin n'authentifie pas un super administrateur.

Exemple :

GET /index.php?fc=module&module=websourcethemeconfig&controller=rss&id_category=3
→ 200 Content-Type: application/rss+xml ; <rss version="2.0"><channel><title>Maison Lumen</title>…<item><title>…</title><link>…</link>…

Commandes console

bin/console websource:theme:export <fichier.wsxtheme.json|zip> [--sections=theme,layout,…] [--catalog] [--contact] [--no-media] [--name=…] [--slug=…] [--description=…] [--industry=…]
bin/console websource:theme:import [<fichier>] [--demo=<slug>] [--dry-run] [--sections=…] [--mode=replace|merge] [--shops=current|all|1,2] [--catalog-mode=add|replace_demo|replace_all] [--confirm-replace-catalog] [--apply-contact] [--no-fill-missing] [--lang-map=en:fr] [--no-backup] [--non-atomic] [--json]
bin/console websource:theme:restore [<id>]      # sans identifiant : liste l'historique des imports

Format du paquet .wsxtheme (schéma wsxtheme/1)

  • nom.wsxtheme.json : JSON seul, médias référencés ({{base_url}}/chemin ou URL externe). nom.wsxtheme.zip : theme.json + assets/* (médias {{asset:assets/<hash>-<nom>.<ext>}}) + previews/*. Toute autre entrée est ignorée, rien n'est extrait sur le disque.
  • theme.json : schema, generator, created, name, slug, description, industry, tags, palette, languages, default_language, preview, previews[], includes (media, catalog, contact), excluded_modules, sections{clé → {version, label, module, data}}, integrity (sha256 du JSON canonique des sections).
  • Conventions : textes multilingues indexés par code ISO ; entités référencées par type:slug (category:<link_rewrite>, product:…, cms:…, brand:…, supplier:…, cmscat:…, slider:…, category:@home) ; URLs de la boutique réécrites en {{base_url}}.
  • Sections du module : theme (couleurs, formes, polices, badges, miniatures, microdonnées non sensibles, partage, RSS/OG), layout (variantes, recherche, hauteurs, logos et descriptions du pied de page, sous-catégories, tunnel), cms (création des pages manquantes seulement), catalog (catalogue de démonstration, sur demande). Autres sections : voir chaque module.
  • Médias à l'import : extensions png jpg jpeg gif webp avif svg ico woff2 woff ttf otf, MIME réel vérifié, SVG filtré, signature des polices, 10 Mo par fichier, 200 Mo par paquet, copie sous nom aléatoire dans uploads/theme/.
  • Exclus : secrets, code exécutable, head_extra, admin_palette, abonnés, avis réels, clés d'API ; modules websourcesociallogin, websourcecartrecovery, websourcecredit, websourceticketing.
  • Démos livrées dans demos/<slug>/ (manifest avec label facultatif), installées par Package\DemoLibrary.

Sécurité

  • HTML du copyright assaini à l'enregistrement et à l'affichage (Footer\CopyrightSanitizer) ; head_extra réservé à l'administrateur et jamais exporté.
  • Sélecteur de palettes : aucun HTML pour les visiteurs ; cookie psAdmin validé (session, mot de passe, IP, profil super administrateur), jeton CSRF par employé, liste fermée de valeurs.
  • Import : réservé aux super administrateurs (+ WSTC_PKG_PROFILES), zip-slip et bombes de décompression refusés, transaction avec point de sauvegarde par section, sauvegarde automatique avant chaque import.

Mises à jour

Scripts upgrade/upgrade-1.5.0.php à upgrade-1.11.0.php : enregistrement des nouveaux hooks (actionPresentProductListing en 1.10.0, hooks d'export / import et table wstc_demo_item en 1.11.0). Les clés absentes de WSTC_SETTINGS prennent leur valeur par défaut : aucune migration de données.