Vue d'ensemble
- Module
websourcelocale, espace de nomsWebsource\Locale\(PSR-4 danssrc/), implémenteWidgetInterface. - Un réglage JSON par boutique,
WSLC_SETTINGS(Settings\SettingsRepository::loadForShop(),saveForShop(); normalisation parSettings\Settings::fromArray()). - Aucune table. Aucun appel externe.
Hooks
| Hook | Rôle |
|---|---|
actionFrontControllerSetMedia | Enregistre views/css/front.css et views/js/front.js (identifiant module-websourcelocale, priorité 150, script defer en bas de page) s'il existe au moins un emplacement ou si la bannière est activée. |
| Hooks d'affichage des emplacements | Greffés boutique par boutique par Settings\HookSynchronizer selon les emplacements enregistrés ; servis par __call() (hookDisplay…). |
displayBeforeBodyClosingTag | Bannière de suggestion (gabarit suggestion.tpl). |
actionWebsourceBuilderRegisterBlocks | Fournit le bloc « Langue et devise » (Builder\LocaleBlock, champ what) à Websource Builder. |
actionObjectShopAddAfter, actionShopDataDuplication | Donne ses réglages et ses hooks à une boutique créée ou copiée. |
actionWebsourceThemeExport, actionWebsourceThemeImport | Section locale (version 1) du paquet de thème. |
Emplacements (Settings\PlacementCatalog)
Un emplacement : {"position": "footer_locale", "hook": "displayWebsourceFooterLocale", "what": "auto", "visibility": "all"} ; 12 au plus.
| Position | Hook | Proposée dans l'écran Configurer |
|---|---|---|
nav1 | displayNav1 | oui |
nav2 | displayNav2 | oui |
topbar_right | displayWebsourceTopbarRight (hook du thème Websource) | non |
top | displayTop | oui |
under_header | displayNavFullWidth | oui |
mobile_menu | displayNavFullWidth, visibilité conseillée mobile | oui |
footer_locale | displayWebsourceFooterLocale (hook du thème Websource) ; valeur par défaut | non |
footer | displayFooter | oui |
footer_before | displayFooterBefore | oui |
footer_after | displayFooterAfter | oui |
custom | valeur de hook | oui |
what : auto (selon la disposition), combined, language, currency. visibility : all, desktop, mobile.
WebsourceLocale::applyPlacementPosition(string $position, int $shopId = 0): bool remplace le premier emplacement par nav1, topbar_right ou footer_locale et resynchronise les hooks ; c'est la méthode appelée par l'écran En-tête et pied de page de Websource Builder.
À savoir : positionLabels() (liste du formulaire d'administration) ne contient ni topbar_right ni footer_locale. Une ligne portant l'une de ces positions est donc affichée « (aucun) » et supprimée à l'enregistrement du formulaire (constaté sur la boutique de test).
Widget
{widget name='websourcelocale'}
{widget name='websourcelocale' what='language'}
{widget name='websourcelocale' what='currency'}
{widget name='websourcelocale' what='combined'}
Sans what et avec un nom de hook, le widget rend les emplacements enregistrés pour ce hook. getWidgetVariables() renvoie un tableau vide. En PHP : WebsourceLocale::renderSelector(string $what = 'auto', string $visibility = 'all', bool $forceAssets = false): string.
Gabarits et variables Smarty
views/templates/hook/selector.tpl, surchargeable dansthemes/<thème>/modules/websourcelocale/views/templates/hook/selector.tpl.views/templates/hook/suggestion.tpl.
Variables d'un bloc de sélecteur (Front\ViewBuilder) : uid, kind, visibility, align (start ou end), languages, currencies, language_title, currency_title, title, close, trigger_flag, trigger_label, trigger_small, show_flags, style_desktop, style_mobile, globe, language_count, currency_count, dir.
Adresses générées : langue par Link::getLanguageLink() avec attribut hreflang ; devise par lien ?SubmitCurrency=1&id_currency=<id> (Locale\CurrencyUrlBuilder).
Marquage HTML et CSS
Classes : .wslc (+ .wslc--combined, .wslc--up quand le menu s'ouvre vers le haut : pied de page ou place insuffisante dessous), .wslc__toggle, .wslc__label, .wslc__sub, .wslc__caret, .wslc__panel, .wslc__head, .wslc__title, .wslc__close, .wslc__group, .wslc__group-title, .wslc__list, .wslc__option (+ .is-current), .wslc__flag, .wslc__code, .wslc__backdrop, .wslc__sr.
Attributs lus par front.js : data-wslc, data-wslc-close, data-wslc-ready, data-wslc-suggest, data-wslc-text, data-wslc-accept, data-wslc-dismiss.
Variables CSS : --wslc-accent, --wslc-ink, --wslc-bg, --wslc-line, --wslc-radius, --wslc-font, --wslc-tint. Avec « Reprendre le design du thème », elles reprennent --color-* et --radius-* du thème ; sinon Render\StyleBuilder les émet à partir du réglage design.
Témoin
wslc_dismissed = 1, SameSite=Lax, durée suggest_days jours, posé par front.js quand le visiteur répond à la bannière. La langue du navigateur est lue côté navigateur et n'est jamais envoyée au serveur.
Clés de WSLC_SETTINGS
| Clé | Valeurs (défaut) |
|---|---|
arrangement | combined (défaut), separate |
style_desktop, style_mobile | dropdown (défaut ordinateur), inline, modal (défaut mobile) |
breakpoint | 320 à 1920 (768) |
show_flags, hide_if_single | booléens (vrais) |
language_label | native (défaut), iso, none |
currency_label | both (défaut), symbol, code |
sort_languages, sort_currencies | shop (défaut), alpha, default_first |
exclude_languages, exclude_currencies | listes d'identifiants |
use_theme_design | booléen (vrai) |
design | accent, text, background, border (hexadécimal), radius (0 à 32, 12), font_size (small, medium, large) |
suggest_enabled (faux), suggest_languages, suggest_currencies (vrais), suggest_geoip (faux), suggest_days (1 à 365, 30), suggest_position (bottom, top) | bannière |
placements | liste d'emplacements |
texts | combined_label, language_title, currency_title, close : tableaux par identifiant de langue |
Export / import de thème (section locale, version 1)
ThemePackage\ThemePackage::export() produit les réglages avec les langues et devises exclues converties en codes ISO et les textes indexés par code ISO de langue. À l'import, les données passent par Settings::fromArray() ; modes replace et merge ; rien n'est écrit en dry_run.
Services
WebsourceLocale::services(): Websource\Locale\Services (réglages, identifiant de boutique), shopScope(): array, defaultTexts(): array, upgradeShops(): bool.
Tests fournis
php modules/websourcelocale/tests/run.php (logique pure, sans PrestaShop).