Vue d'ensemble
- Module
websourcelinklists, espace de nomsWebsource\LinkLists\(PSR-4 danssrc/), implémenteWidgetInterface. Contrôleur d'administrationAdminWebsourceLinkLists(Apparence > Listes de liens). Link\LinkSources(types de liens),Link\LinkResolver(adresse et libellé parLink, langue et boutique du visiteur),Link\UrlSanitizer;Render\ListViewBuilder,ListViewProvider,ListCache,JsonLdBuilder;Hook\HookSynchronizeretHookDispatcher;Placement\PlacementCatalog,PageDetector.
Hooks
| Hook | Rôle |
|---|---|
displayFooter, displayFooterBefore, displayFooterAfter, displayNavFullWidth, displayLeftColumn, displayRightColumn, displayMyAccountBlock | Rendu des listes actives placées à cet endroit, pour la page courante. |
Tout autre hook display* | Emplacement « avancé » : greffé à l'enregistrement de la liste (registerHook), servi par __call() ; débranché quand plus aucune liste ne l'utilise. |
actionFrontControllerSetMedia | Charge views/css/front.css seulement si une liste s'affiche sur la page. |
actionShopDataDuplication | Duplication d'une boutique. |
actionWebsourceThemeExport, actionWebsourceThemeImport | Section linklists du paquet de thème (listes, liens, emplacements). |
Emplacements (Placement\PlacementCatalog)
| Position | Hook | Remarque |
|---|---|---|
topbar_left | displayNav1 | |
topbar_right | displayWebsourceTopbarRight | hook du thème Websource |
footer_col1 … footer_col4 | displayFooter | ordre CSS 1 à 4 (classe wsll--o1 … wsll--o4) ; le thème doit rendre ce hook dans une grille ou un conteneur flex |
before_footer | displayFooterBefore | |
after_footer | displayFooterAfter | |
under_header | displayNavFullWidth | |
left_column, right_column | displayLeftColumn, displayRightColumn | |
account_block | displayMyAccountBlock | page account seulement |
custom | hook libre |
Page all = toutes les pages. 20 emplacements et 60 liens au plus par liste (Admin\ListPayloadSanitizer). Présentations : columns, inline, menu.
Widget et PHP
{widget name='websourcelinklists' list='demo-a-informations'}
{widget name='websourcelinklists' list=12}
list = identifiant texte (colonne identifier, généré depuis le nom) ou numéro de la liste. Sans list, le widget rend les listes placées sur le hook d'appel. getWidgetVariables() renvoie un tableau vide.
echo WebsourceLinkLists::renderListById(12);
echo Module::getInstanceByName('websourcelinklists')->renderList(12);
Seules les listes actives sont rendues, dans la langue et la boutique courantes.
Gabarit et balisage
views/templates/hook/list.tpl, surchargeable dans themes/<thème>/modules/websourcelinklists/views/templates/hook/list.tpl.
Balisage constaté : <nav class="wsll wsll--columns wsll--o2"> contenant <p class="wsll__title"> et <ul class="wsll__list">. Le CSS s'appuie sur les variables du thème avec repli : --color-brand-600, --color-ink, --color-line, --radius-xl, --wst-card-shadow.
Types de liens (Link\LinkSources::TYPES)
Lien libre (adresse url, ou urls par langue), cms, category, marque, product, page (clé de page : contact, plan du site, conditions générales, magasins, meilleures ventes, nouveaux produits, promotions, marques, fournisseurs, connexion, compte, commandes, panier). Options new_tab et nofollow.
Tables
{prefix}websourcelinklists_list:id_list,id_shop,identifier,name,layout,show_title,active,titles(JSON par langue),draft(brouillon JSON),date_add,date_upd.{prefix}websourcelinklists_link:id_link,id_list,position,source,target_id,page_key,url,urls,new_tab,nofollow,labels(JSON par langue).{prefix}websourcelinklists_placement:id_placement,id_list,page,position,hook,cms_id.
Cache
Fichiers JSON dans var/cache/<env>/websourcelinklists/, durée 3 600 secondes, vidés à chaque enregistrement (Render\ListCache, services()->cache()->flush()).
Actions AJAX du contrôleur
create, draft (sauvegarde automatique du brouillon), save (application à la boutique et synchronisation des hooks), toggle, delete, duplicate, search (recherche de cibles pour l'éditeur). Appel : ajax=1&action=<nom> avec le jeton du back-office ; réponses JSON.
Traductions
translations/fr.php, translations/en.php, translations/admin/en.php (interface de l'éditeur, I18n\Dictionary).