Accueil

Référence développeur · PrestaShop

Websource Cart Block pour PrestaShop — référence développeur

Hooks, widget, contrôleur de rafraîchissement, variables Smarty, attributs de données, réglage JSON et variables CSS du module Websource Cart Block.

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

Guide utilisateur

Cette extension existe aussi pour : WordPress

Vue d'ensemble

  • Module websourcecartblock, espace de noms Websource\CartBlock\ (PSR-4 dans src/), implémente WidgetInterface.
  • Un réglage JSON WSCB_SETTINGS par boutique (Settings\SettingsRepository, objet Settings\CartBlockSettings). Aucune table, aucun cache.
  • Le panier affiché est le panier présenté par PrestaShop ; le module n'écrit rien dans le panier lui-même : les changements de quantité et les suppressions passent par les actions natives du contrôleur cart.

Hooks greffés

HookRôle
displayNav2 ou displayTopRendu du bloc, selon le réglage hook (l'ancien hook est débranché au changement).
actionFrontControllerSetMediaviews/css/front.css (websourcecartblock-css, priorité 200), views/css/push.css seulement si un mode push est utilisé (priorité 210), views/js/front.js (websourcecartblock-js, bas de page, defer).
actionObjectShopAddAfterDonne ses hooks à une boutique créée après l'installation.
actionWebsourceThemeExport, actionWebsourceThemeImportParticipation au paquet de thème de Websource Theme Config.

Widget

{widget name='websourcecartblock'}

Gabarit module:websourcecartblock/views/templates/hook/block.tpl (surchargeable dans le thème). getWidgetVariables($hookName, $configuration) accepte uid (1 à 12 caractères a-z0-9 ; sinon b1, b2… par instance) et renvoie :

VariableContenu
wscb.uidIdentifiant de l'instance (identifiants HTML wscb-panel-<uid>).
wscb.mode_desktop, wscb.mode_mobile, wscb.breakpoint, wscb.push_side, wscb.push_selectorPrésentation.
wscb.show_total, wscb.auto_openOptions.
wscb.textsTextes dans la langue courante.
wscb.shippingnull, ou message, percent, reached (Cart\FreeShippingProgress).
wscb.refresh_url, wscb.cart_url, wscb.checkout_urlAdresses.
cartPanier présenté par PrestaShop (produits, sous-totaux, products_count).

Contrôleur refresh

GET index.php?fc=module&module=websourcecartblock&controller=refresh&uid=<uid> (adresse fournie par wscb.refresh_url).

Réponse application/json, Cache-Control: no-store :

{ "html": "<div class=\"wscb\" …>…</div>" }

front.js appelle cette adresse après chaque événement updateCart de PrestaShop et après ses propres actions (quantité, suppression), puis recopie le contenu des éléments [data-wscb-sync] et la liste des produits. Après une action, il émet prestashop.emit('updateCart', { reason: { linkAction: 'wscb-update', cart }, resp }).

Balisage

Classes : .wscb (racine, attribut data-refresh-url), .wscb__trigger (bouton, aria-haspopup="dialog", aria-expanded, aria-controls), .wscb__icon, .wscb__count, .wscb__total, .wscb__status (annonce pour lecteurs d'écran), .wscb__layer, .wscb__overlay, .wscb__panel, .wscb__head, .wscb__title, .wscb__close, .wscb__error, .wscb__shipping, .wscb__shipping-text, .wscb__bar, .wscb__list, .wscb__item, .wscb__thumb, .wscb__info, .wscb__name, .wscb__price, .wscb__qty, .wscb__step, .wscb__qty-value, .wscb__remove, .wscb__foot, .wscb__subtotal, .wscb__btn. La classe wscb-lock est posée sur <html> tant que le tiroir est ouvert.

Attributs lus par front.js : data-wscb-open, data-wscb-sync (label, count, total…), data-wscb-status, data-wscb-key (ligne de panier).

Variables CSS propres : --wscb-w (largeur du panneau), --wscb-sbw (largeur de la barre de défilement compensée). Variables du thème lues avec repli : --color-brand-600, --color-line…

Clés de WSCB_SETTINGS

CléValeurs (défaut en premier)
hookdisplayNav2, displayTop
mode_desktopdrawer, push, dropdown
mode_mobiledrawer, push
breakpoint768
push_sideright, left
push_selectorsélecteur CSS de la zone poussée ; vide = main, sinon le contenu direct de <body>
show_total, auto_open, show_free_shippingbooléens (vrais)
textspar langue : title, empty, view_cart, checkout, free_remaining (jeton %amount%), free_reached ; 120 caractères au plus

Textes intégrés (Settings\DefaultTexts) : fr, en, es, de, it, nl, pt ; anglais pour les autres langues.

Livraison offerte

Cart\FreeShippingProgressProvider lit PS_SHIPPING_FREE_PRICE (devise par défaut), le convertit dans la devise du panier (Tools::convertPrice) et arrondit le reste à la précision de la devise. Les règles par transporteur ou par zone et les bons « livraison gratuite » ne sont pas pris en compte.

Formulaire d'administration

getContent(), soumission submitWscb (Admin\SettingsFormHandler). Champs : hook, mode_desktop, mode_mobile, breakpoint, push_side, push_selector, show_total, auto_open, show_free_shipping, text_<clé>_<id_lang>.

Anomalie connue (1.4.0)

Dans views/js/front.js, la synchronisation parcourt tous les éléments [data-wscb-sync] et remplace leur textContent. Le bouton .wscb__trigger porte lui-même data-wscb-sync="label" (pour son aria-label) : son contenu (icône SVG, .wscb__count, .wscb__total) est donc remplacé par du texte brut après la première mise à jour sans rechargement.

Tests fournis

php modules/websourcecartblock/tests/run.php.