La problématique des URLs est plus complexe qu'on peut l'imaginer, la principale difficulté vient des contraintes posées aux composants preview :
- Les mêmes composants servent à la preview et au front (quelque soit le futur du projet, ce choix est à conserver car la garantie que le rendu final sera identique à la preview est indispensable)
- Les URLs en preview et en front sont très différentes (par exemple
https://backend/preview/resources/6A42
deviendrahttps://eatlas/rubrique-6/article-6A42-guerre-et-paix.html
) - Les composants preview n'ont pas accès aux modules serveur
- Les ressources (article, focus, vidéo, son, carte, image) ont une propriété ajoutée
pageUrl
, qui a été générée par le serveur avant de passer les ressource au composant React- Voir fonction
populatePageUrl
dansgenerator-utils.js
- Voir fonction
- Les pages du footer sont listées via les propriétés
aPropos
(du modulelayout.js
) etfooterResourcesConfig
(du moduleuniversal-utils.js
), listant des objets avec la méthodeurl({ preview })
retournant l'URL de la page en question - Pour les quelques autres liens, il s'agit de pages globales ou des rubriques, on utilise alors l'une des deux méthodes de
layout.js
:getTopicPageUrl
pour le lien vers une page rubriqueglobalPageUrl
pour le lien vers une page globale
Exemples :
// Lien vers une page article
h('a', { href: article.pageUrl });
// Lien vers la rubrique 3
h('a', { href: getTopicPageUrl(topic, props.options) });
// Lien vers les mentions légales
h('a', { href: globalPageUrl('legals')(props.options) });
// Lien vers une ancre de la page à propos
h('a', { href: globalPageUrl('about', null, 'team')(props.options) });