Accueil

Référence développeur · PrestaShop

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

Hooks, emplacements, blocs, jetons, actions AJAX, tables, configuration et sections d'export du module Websource Builder.

Version 1.13.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 websourcebuilder, espace de noms Websource\Builder\ (PSR-4 dans src/). Contrôleur d'administration AdminWebsourceBuilder (onglet Apparence > Websource Builder) ; getContent() y redirige.
  • Un contenu = une ligne de websourcebuilder_content : un nom, une langue (0 = toutes), une liste d'emplacements et deux arbres de blocs JSON (brouillon et version en ligne). Aucun cache : la version en ligne est lue à chaque requête pour la boutique et la langue du contexte.
  • Rendu serveur par Render\PageRenderer ; chaque bloc est une classe Block\BlockInterface. Toute donnée saisie passe par Block\BlockSanitizer (80 blocs, 40 éléments par liste, 30 000 caractères par texte au maximum) ; les couleurs par Block\ColorValue ; les styles avancés par Block\Appearance::sanitize().

Hooks greffés

HookRôle
actionFrontControllerSetMediaEnregistre views/css/blocks/_base.css et la feuille de chaque type de bloc réellement présent sur la page (websourcebuilder-<type>, priorité 60). Rien n'est chargé sur une page sans contenu.
displayHeaderFiche produit : assigne $wsx_product_layout. Page CMS : remplace ou complète $cms.content par le contenu publié à l'emplacement cms_page.
displayWrapperTop, displayContentWrapperTop, displayContentWrapperBottom, displayWrapperBottom, displayHome, displayProductAdditionalInfo, displayFooterProduct, displayCustomerLoginFormAfter, displayCustomerAccountFormTop, displayCustomerAccountForm, displayMyAccountBlockRendu des contenus publiés dont un emplacement correspond au hook et à la page courante.
Tout autre hook d'affichageEmplacement « avancé » (position = custom, hook libre) : greffé à la demande par ensureHookRegistered() et servi par __call().
actionWebsourceThemeExport, actionWebsourceThemeImportSections du paquet de thème (voir plus bas).

Hook exposé : actionWebsourceBuilderRegisterBlocks

Permet à un module d'ajouter des blocs à la palette. Le hook est exécuté sans paramètre ; chaque module renvoie un tableau d'objets BlockInterface (les autres valeurs sont ignorées).

public function hookActionWebsourceBuilderRegisterBlocks(): array
{
    return [new MonBloc()];
}
namespace Websource\Builder\Block;

interface BlockInterface
{
    public function getType(): string;        // identifiant unique, lettres minuscules
    public function getLabel(): string;
    public function getDescription(): string;
    public function getCategory(): string;    // famille de la palette
    public function getIcon(): string;
    public function getFields(): array;       // objets Field (texte, liste, image, couleur…)
    public function getDefaults(): array;
    public function render(array $data, \Websource\Builder\Render\RenderContext $context): string;
}

Block\AbstractBlock fournit l'enveloppe commune (apparence, style avancé). RenderContext donne la langue, l'objet Link, la devise, la boutique et indique si le rendu est un aperçu d'éditeur.

Blocs fournis

hero, features, cards, split, cta, faq, testimonials, stats, announcement, columns (1 à 6 colonnes, largeurs de 1 à 6 parts, un seul niveau d'imbrication), heading, text, button, spacer, pagecontent, image, video, products, html. Feuilles de style : views/css/blocks/<type>.css.

Widgets des modules Websource reconnus dans l'accueil (WebsourceBuilder::HOME_WIDGET_MODULES, type de bloc → module) : websource_newproducts → websourcenewproducts, websourcebrands → websourcebrands, websource_newsletter → websourcenewsletter, websource_reassurance → websourcereassurance, websource_slider → websourceslider, store_info → websourcestoreinfo, websourceblog → websourceblog. Quand un de ces widgets figure dans le contenu en ligne de l'accueil, syncHomeWidgets(int $shopId) retire le module du hook displayHome de la boutique et le rétablit quand le widget disparaît (état mémorisé dans WSB_HOME_UNHOOKED).

Emplacements (Placement\PlacementCatalog)

Un emplacement : {"page": "home", "position": "top", "cms_id": 0, "hook": ""}.

Pages : all, home, category, product, cms, login, registration, password, account, orders, cart, contact, notfound.

PositionHookPages
topdisplayWrapperToptoutes
before_contentdisplayContentWrapperToptoutes
after_contentdisplayContentWrapperBottomtoutes
bottomdisplayWrapperBottomtoutes
cms_pagedisplayHeader (réécriture de $cms.content)cms ; clé cms_native = hidden, above ou below pour le texte natif
homedisplayHomehome, all
product_infodisplayProductAdditionalInfoproduct
product_footerdisplayFooterProductproduct
after_login_formdisplayCustomerLoginFormAfterlogin
registration_topdisplayCustomerAccountFormTopregistration
registration_bottomdisplayCustomerAccountFormregistration
account_blockdisplayMyAccountBlockaccount
customvaleur de hookselon page

Jetons (Render\TokenResolver)

JetonRendu
{price:60}60 dans la devise par défaut, converti et formaté dans la devise du visiteur.
{link:home}, {link:contact}Accueil, page de contact (langue et boutique du visiteur).
{link:cms:ID}, {link:category:ID}, {link:product:ID}Page de contenu, catégorie, produit.

Variables Smarty

VariableContenu
$wsx_product_layoutDisposition de la fiche produit pour le thème (Product\ProductLayouts::forTheme()) ; sans configuration, disposition classic. Le paramètre d'URL wsb_design active le mode aperçu.
$cms.contentRéécrit sur une page CMS quand un contenu publié occupe l'emplacement cms_page.

Variables CSS posées sur l'aperçu par l'écran En-tête et pied de page : --wsx-hdr-min, --wsx-hdr-pt, --wsx-hdr-pb (enregistrées par Websource Theme Config).

Contrôleur AdminWebsourceBuilder

Écrans (paramètres GET) : &home=1 (live builder de l'accueil, écran par défaut), &list=1 (tableau de bord), &edit=<id> (éditeur), &layout=<page>[&cms=<id>] (emplacements d'une page), &design=1 (en-tête et pied de page), &product=1 (fiche produit) ; &standalone=1 ouvre les deux derniers sans le cadre du back-office.

Actions AJAX (ajax=1&action=<nom>, jeton du back-office, réponses JSON) :

ActionParamètresEffet
createtemplate, name, id_lang, placement (JSON)Crée un contenu ; renvoie url de l'éditeur.
syncid, payload (JSON : nom, emplacements, blocs)Sauvegarde automatique du brouillon.
publishidCopie le brouillon en version en ligne et active le contenu.
toggleid, activeAffiche ou masque un contenu.
deleteidSupprime un contenu.
translateid, id_langCrée la copie liée dans une autre langue.
copyToShopid, id_shopMultiboutique : copie vers une autre boutique.
openHome—Ouvre ou crée le contenu de l'accueil ; synchronise les widgets.
openCmsid_cms, id_langOuvre ou crée le contenu d'une page CMS (texte natif importé dans un bloc pagecontent).
reorderhook, order (JSON, identifiants de modules)Réordonne les modules d'un emplacement (hooks autorisés : zones communes et zones de page).
saveDesignchoices (JSON)Enregistre les variantes d'en-tête et de pied de page dans Websource Theme Config.
saveProductLayoutconfig (JSON)Enregistre WSB_PRODUCT_LAYOUT et vide le cache Smarty.
previewLayoutsblock (JSON)Miniatures des layouts d'un bloc (rendu serveur).
listSections, saveSection (block, name), deleteSection (id)Bibliothèque « Mes sections ».
importBlocksjson (2 Mo au plus)Décode, assainit et renvoie les blocs importés, avec le nombre de blocs ignorés.
uploadfichier image (jpg, jpeg, png, webp, gif, avif ; 5 Mo au plus)Enregistre l'image dans uploads/ sous un nom aléatoire.

Emplacements gérés par reorder : displayBanner, displayNav1, displayNav2, displayTop, displayNavFullWidth, displayWrapperTop, displayContentWrapperTop, displayContentWrapperBottom, displayWrapperBottom, displayFooterBefore, displayFooter, displayFooterAfter ; et selon la page displayHome, displayLeftColumn, displayProductAdditionalInfo, displayReassurance, displayFooterProduct, displayShoppingCart, displayShoppingCartFooter, displayCustomerLoginFormAfter, displayCustomerAccountFormTop, displayCustomerAccountForm, displayMyAccountBlock, displayCustomerAccount.

Fiche produit (Product\ProductLayouts)

  • Dispositions (liste blanche) : Classique (classic, par défaut), Galerie XL, Vitrine, Minimal, Achat toujours visible, Magazine.
  • Zones : top, media, info, below.
  • Blocs (une occurrence chacun) : flags, gallery, title, price, short_description, buy, reassurance, details, related.
  • Mode des détails : tabs, accordion, stacked.

Tables

{prefix}websourcebuilder_content

ColonneContenu
id_content, id_shopIdentifiant, boutique.
id_langLangue, 0 = toutes les langues.
id_sourceContenu d'origine d'une traduction (groupe de traduction).
name, activeNom interne, 1 = affiché.
placementsJSON, liste d'emplacements.
blocks_draft, blocks_liveJSON, brouillon et version en ligne.
date_add, date_updDates.

{prefix}websourcebuilder_section : id_section, id_shop, name, type, block (JSON), date_add ; 100 sections au plus par boutique.

Configuration

CléContenu
WSB_PRODUCT_LAYOUTJSON de la disposition de la fiche produit, par boutique.
WSB_HOME_UNHOOKEDJSON, modules retirés de displayHome parce que leur widget est dans l'accueil.

Les variantes d'en-tête et de pied de page ne sont pas stockées ici mais dans WSTC_SETTINGS (Websource Theme Config).

Export / import de thème

Sections fournies au hub Websource Theme Config : builder (contenus : textes par langue indexés par code ISO, brouillon et version en ligne, emplacements, groupes de traduction ; 200 contenus au plus), builder_library (sections enregistrées), product_layout (disposition de la fiche produit), hook_layout (ordre des modules dans les emplacements du builder).

Export JSON d'une page ou d'une section depuis l'éditeur : fichier .json relu par l'action importBlocks (identifiants régénérés, blocs inconnus écartés).

Méthodes publiques utiles

WebsourceBuilder::createRegistry(): BlockRegistry, createRenderer(): PageRenderer, baseHooks(): array, ensureHookRegistered(string $hookName, int $shopId = 0), ensureHooksForShop(array $hooks, int $shopId), syncHomeWidgets(int $shopId), blockTypes($blocks) (types présents, colonnes comprises), jsStrings(): array.

Traductions

Interface, blocs, modèles et emplacements : translations/fr.php, translations/en.php. Les libellés des blocs passent par I18n\Translator et n'apparaissent pas dans l'écran « Traductions » de PrestaShop.

Test fourni

php modules/websourcebuilder/tests/compat_test.php.