Accueil

Référence développeur · PrestaShop

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

Hooks, widget, contrôleurs, tables, jetons, e-mails et variables CSS du module Websource Newsletter.

Version 1.1.0 · PrestaShop 1.7.7 à 9.x, PHP 7.1+ · Mis à jour le 09/10/2026

Guide utilisateur

Cette extension existe aussi pour : WordPress

Hooks utilisés

HookRôle
displayFooterBeforeFormulaire en bandeau (layoutinline). Emplacement par défaut.
displayFooter, displayHomeFormulaire en carte, si coché dans les réglages.
hook libre (WSNL_CUSTOM_HOOK)Formulaire en carte.
displayBeforeBodyClosingTagFenêtre d'inscription (<dialog>), si activée.
actionFrontControllerSetMediaviews/css/front.css, views/js/front.js.
actionCustomerAccountAdd, actionObjectCustomerUpdateAfterSynchronise la case « newsletter » du compte client.
registerGDPRConsent, actionDeleteGDPRCustomer, actionExportGDPRDataModule RGPD officiel : effacement et export des données d'un client.
actionWebsourceBuilderRegisterBlocksBloc « Newsletter » de Websource Builder.
actionWebsourceThemeExport, actionWebsourceThemeImportSection newsletter (version 1) : emplacements, fenêtre, textes. Jamais exportés : abonnés, WSNL_SECRET, version du consentement, bon, anti-spam.
actionObjectShopAddAfter, actionShopDataDuplication, actionObjectShopDeleteAfterMultiboutique.

Widget

{widget name='websourcenewsletter'}
{widget name='websourcenewsletter' layout='inline'}
{widget name='websourcenewsletter' layout='card' intro='0'}
ParamètreValeurs
layoutcard (défaut), inline
intro0 masque l'introduction

PHP : Module::getInstanceByName('websourcenewsletter')->renderForm(['layout' => 'inline', 'intro' => true], $idLang, 'builder');

Bloc Websource Builder

Classe Builder\NewsletterBlock, libellé « Newsletter », catégorie « Sections ».

ChampValeurs
Présentationcard Carte, inline Sur une ligne (bandeau)
Afficher le texte d'introductionoui / non

Contrôleurs publics

ContrôleurRequêteRéponse
subscribePOST email, wsnl_consent, token, wsnl_stamp, wsnl_hook, wsnl_submit, champ piège websiteAvec X-Requested-With: XMLHttpRequest ou ajax=1 : JSON ; sinon page de résultat.
confirmGET id, tokenPage « Inscription confirmée » ou « Confirmation impossible ».
unsubscribeGET id, token : page avec bouton ; POST wsnl_unsubscribe : désinscriptionPage « Se désinscrire » / « Désinscription effectuée ».

Adresse : index.php?fc=module&module=websourcenewsletter&controller=subscribe (ou la forme réécrite).

POST /index.php?fc=module&module=websourcenewsletter&controller=subscribe
X-Requested-With: XMLHttpRequest

email=client@exemple.fr&wsnl_consent=1&token=…&wsnl_stamp=…&wsnl_hook=displayFooterBefore&wsnl_submit=1&website=
{"success": true, "message": "Merci ! Un e-mail vient de vous être envoyé : cliquez sur le lien pour confirmer votre inscription.", "field": ""}

En cas d'échec, success vaut false et field vaut email, consent ou une chaîne vide. Le texte de consentement enregistré est toujours celui du serveur.

Anti-spam

Jeton CSRF de PrestaShop (Tools::getToken(false)), champ piège website (réponse positive factice, rien n'est enregistré), horodatage signé wsnl_stamp avec délai minimal (WSNL_MIN_DELAY), limite par heure sur une empreinte HMAC de l'adresse IP (WSNL_RATE_MAX, table …_throttle, purgée après 24 h).

Jetons

  • Confirmation : 64 caractères hexadécimaux aléatoires, usage unique ; seule l'empreinte SHA-256 est stockée (token_hash, token_expires).
  • Désinscription : hash_hmac('sha256', 'unsub|<id>|<email en minuscules>', WSNL_SECRET), valable tant que l'abonné existe.

Données

Clé / tableContenu
{prefix}websourcenewsletter_subscriberid_subscriber, id_shop, id_lang, id_customer, email, status (pending, confirmed, unsubscribed), source, token_hash, token_expires, date_mail, consent_date, consent_text, consent_version, consent_shop, consent_lang, voucher_code, date_add, date_upd, date_confirm, date_unsub
{prefix}websourcenewsletter_throttleid_throttle, id_shop, ip_hash, date_add
WSNL_DOUBLE_OPTIN, WSNL_TOKEN_HOURS, WSNL_MIN_DELAY, WSNL_RATE_MAXInscription (défauts 1, 48, 3, 5).
WSNL_HOOKS, WSNL_CUSTOM_HOOK, WSNL_SIGNUP_FIELDEmplacements.
WSNL_VOUCHER_ENABLED, _TYPE (percent, amount), _VALUE, _DAYS, _MINBon de bienvenue.
WSNL_POPUP_ENABLED, _MODE (delay, exit), _DELAY, _DAYSFenêtre.
WSNL_CONSENT_VERSION, WSNL_SECRETVersion du texte de consentement, secret des jetons.
WEBSOURCENEWSLETTER_KEEP_DATAConservation des données à la désinstallation (globale, 1 par défaut).

Textes par langue (title, intro, consent, policy_url, popup_title, popup_intro) : Service\Settings::text(), repli sur Text\DefaultTexts (fr, en).

Bon de bienvenue

Voucher\VoucherService crée une règle de panier : code WELCOME-XXXXXXXX (alphabet sans caractères ambigus), quantité 1, 1 par utilisateur, sans utilisation partielle, restreinte à la boutique et au client s'il est connu, réduction en pourcentage ou en montant TTC dans la devise par défaut, validité WSNL_VOUCHER_DAYS jours, panier minimum WSNL_VOUCHER_MIN.

E-mails

Gabarits mails/<iso>/wsnl_confirm.{html,txt} et wsnl_welcome.{html,txt} (fr, en ; repli en anglais), envoyés dans la langue de l'abonné. Variables : {shop_name}, {confirm_url}, {hours}, {unsub_url}, {voucher_txt}.

Formulaire d'administration

POST sur index.php?controller=AdminModules&configure=websourcenewsletter&token=… : wsnl_save + wsnl[…] (réglages), wsnl_keep_data, wsnl_row_action = resend, unsubscribe, delete + wsnl_id, wsnl_import_csv + fichier wsnl_file + wsnl_attest, wsnl_import_legacy + wsnl_legacy_customers. GET wsnl_export=1[&wsnl_status=confirmed] (CSV, cellules protégées contre l'injection de formules), wsnl_q, wsnl_status, wsnl_page.

Template et CSS

Templates views/templates/hook/form.tpl, fields.tpl, popup.tpl, views/templates/front/result.tpl, surchargeables dans themes/<theme>/modules/websourcenewsletter/views/templates/…. Variable Smarty $wsnl : uid, layout, title, intro, show_intro, consent, policy_url, action, token, stamp, hook, email, popup (mode, delay, days, title, intro).

Classes : .wsnl, .wsnl--inline, .wsnl--card, .wsnl--popup, .wsnl__form, .wsnl__input, .wsnl__button, .wsnl__consent, .wsnl__status, .wsnl-popup, .wsnl-result.

Variable CSSRôle
--wsnl-bg, --wsnl-ink, --wsnl-line, --wsnl-tintFond, texte, filets, teinte.
--wsnl-accent, --wsnl-accent-inkBouton.
--wsnl-radius, --wsnl-field-radius, --wsnl-shadowArrondis et ombre.

Tests

php tests/run.php.