Accueil

Référence développeur · PrestaShop

Websource Page Styles pour PrestaShop — référence développeur

Hooks, identifiants de feuilles de style, variables SCSS, table, cache et format d'export du module Websource Page Styles.

Version 1.3.0 · 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 websourcepagestyles, onglet front_office_features, espace de noms Websource\PageStyles\ (PSR-4 dans src/, vendor/ embarqué : scssphp/scssphp 1.13).
  • Aucun gabarit côté boutique, aucun widget : le module ne fait qu'enregistrer des feuilles de style sur le contrôleur courant.
  • Un seul écran d'administration : getContent() (Admin\ConfigurationPage, gabarit views/templates/admin/configure.tpl).

Hooks greffés

HookRôle
actionFrontControllerSetMediaRésout la clé de page (Page\PageCatalog::resolve($php_self, $estModule)) puis enregistre les feuilles de la page (Asset\PageAssetRegistrar::register()). Toute exception est journalisée (PrestaShopLogger, gravité 2) sans interrompre la page.
actionWebsourceThemeExportSection pagestyles du paquet de thème (hub Websource Theme Config).
actionWebsourceThemeImportImport de cette section.

Le module n'expose aucun hook personnalisé.

Feuilles de style enregistrées

Identifiant (registerStylesheet)FichierPriorité
wsx-page-<page>themes/<thème>/assets/css/pages/<page>.css (repli : même identifiant que celui déclaré par le thème dans config/theme.yml, donc aucun doublon). Les contrôleurs de modules utilisent pages/module-pages.css.60
wsps-allmodules/websourcepagestyles/views/cache/s<id_shop>-all-<empreinte>.css700
wsps-<page>modules/websourcepagestyles/views/cache/s<id_shop>-<page>-<empreinte>.css710

Avec WSPS_INLINE_CRITICAL = 1, toute feuille ci-dessus de moins de 6 144 octets (Setting\Settings::INLINE_THRESHOLD_BYTES) est enregistrée avec 'inline' => true : PrestaShop l'écrit dans une balise <style> du <head> (constaté sur la boutique de test : le <link> du fichier compilé disparaît).

Clés de page

Clé = php_self du contrôleur ; order est ramené à checkout (PageCatalog::ALIASES). Clés spéciales : all (toutes les pages), module-pages (tout ModuleFrontController).

index, category, product, cart, checkout, order-confirmation, authentication, registration, password, my-account, history, order-detail, order-follow, order-slip, order-return, discount, guest-tracking, addresses, address, identity, cms, contact, search, best-sales, new-products, prices-drop, manufacturer, supplier, sitemap, stores, pagenotfound.

Variables et mixins SCSS

Injectés en tête de chaque source, sur une seule ligne (les numéros de ligne des erreurs restent exacts) — Scss\ThemeVariables.

Variable SCSSValeur compilée
$brand, $brand-600var(--color-brand-600)
$brand-50, $brand-500, $brand-700var(--color-brand-50), var(--color-brand-500), var(--color-brand-700)
$ink, $line, $page, $surface, $footervar(--color-ink), var(--color-line), var(--color-page), var(--color-surface), var(--color-footer)
$accentvar(--color-accent-wst)
$radius, $radius-2xl, $card-shadowvar(--radius-xl), var(--radius-2xl), var(--wst-card-shadow)
$brand-hex, $accent-hex, $ink-hex, $line-hexValeurs hexadécimales lues dans les réglages de Websource Theme Config pour la boutique courante (Scss\ThemeColorsReader) ; replis #0f766e, #f0556b, #14282b, #d9e6e4.
$bp-sm, $bp-md, $bp-lg, $bp-xl640px, 768px, 1024px, 1280px

Mixins : @mixin rtl { html[dir=rtl] & { @content } } et @mixin ltr { html:not([dir=rtl]) & { @content } }.

Exemple (source, puis sortie constatée sur la boutique de test) :

#main h1 {
  color: $brand;
  &::after { content: ''; display: block; width: 3rem; height: .25rem; margin-top: .5rem; border-radius: 999px; background: $accent; }
}
@include rtl { #main h1::after { margin-inline-start: auto; } }
#main h1{color:var(--color-brand-600)}#main h1::after{content:"";display:block;width:3rem;height:0.25rem;margin-top:0.5rem;border-radius:999px;background:var(--color-accent-wst)}html[dir=rtl]  #main h1::after{margin-inline-start:auto}

Aucun chemin d'import n'est configuré : un @import ne peut lire aucun fichier du serveur.

Compilation et cache

  • Style\StyleCompiler::saveSource(int $idShop, string $pageKey, string $source, bool $enabled) enregistre et compile ; compile(Style) recompile ; needsCompilation(Style) compare l'empreinte (source + valeurs -hex + version de scssphp).
  • Sortie minifiée écrite de façon atomique par Style\CompiledFileStorage dans views/cache/ (.htaccess interdisant l'exécution de PHP). purge() vide le dossier à la désinstallation.
  • En cas d'erreur, status passe à error, error_message reçoit le message de scssphp et le dernier fichier valide reste servi.
  • Côté boutique, si l'empreinte a changé (couleur du thème modifiée, source modifiée en base), la recompilation a lieu une fois à la première visite.

Table {prefix}wsps_style

Une ligne par boutique et par page.

ColonneContenu
id_wsps_styleClé primaire.
id_shop, page_keyBoutique et clé de page.
sourceSCSS saisi (jamais lu par la boutique publique).
source_hash, attempt_hash, compiled_hashEmpreintes de la source, de la dernière tentative et de la dernière compilation réussie.
compiled_file, compiled_sizeNom et poids du fichier compilé.
statusempty, ok ou error.
error_messageDernier message d'erreur.
enabled1 = publié.
date_updDernière compilation.

Configuration

CléValeur
WSPS_INLINE_CRITICAL0 (défaut) ou 1, par boutique.

Paramètres de l'écran de configuration

Formulaires POST vers AdminModules&configure=websourcepagestyles (jeton du back-office) :

ParamètreEffet
wsps_edit=<page> (GET)Ouvre l'éditeur de la page.
wsps_save + wsps_page, wsps_source, wsps_enabledEnregistre et compile.
wsps_delete + wsps_pageSupprime le SCSS de la page.
wsps_recompile (+ wsps_page facultatif)Recompile une page ou toutes.
wsps_save_settings + wsps_inlineEnregistre le réglage d'inline.
wsps_copy_from + wsps_source_shopMultiboutique : copie le SCSS d'une autre boutique.

Format d'export (section pagestyles, version 1)

hookActionWebsourceThemeExport() renvoie ['key' => 'pagestyles', 'version' => 1, 'label' => 'CSS / SCSS par page', 'data' => …]. Les données sont produites par ThemePackage\ThemePackage::export() ; seules les pages ayant une source sont exportées, triées par clé. Le CSS compilé n'est jamais exporté.

{
  "pages": [
    { "page": "category", "enabled": true, "source": "#main h1 { color: $brand; }" }
  ]
}

À l'import (ThemePackage::sanitize()), une page est ignorée (comptée dans skip, avec un message) si sa clé est inconnue, si la source dépasse 200 000 octets ou si elle contient une balise (style, script, iframe, object, embed, link, meta), javascript:, expression() ou -moz-binding. Mode replace : les pages absentes du paquet sont vidées ; mode merge : elles sont conservées. Rien n'est écrit quand dry_run est vrai. Une source non compilable est enregistrée et signalée dans messages.

Tests fournis

php modules/websourcepagestyles/tests/compile_example.php, tests/compat_test.php, tests/themepackage_test.php.