Skip to content

Points d'extension Umbraco

Le coeur du template. Tous les enregistrements passent par SiteComposer ; les comportements techniques (404, 500, sitemap, robots, login dev) sont des controllers ou des content finders.

Composer (src/Web/SiteComposer.cs)

IComposer unique, decouvert par AddComposers() dans Program.cs. Il :

  • builder.SetContentLastChanceFinder<NotFoundContentFinder>() ;
  • enregistre le service du dashboard "Système" : builder.Services.AddSingleton<IDashboardInfoService, DashboardInfoService>() ;
  • enregistre le provider 2FA : new BackOfficeIdentityBuilder(builder.Services).AddTwoFactorProvider<UmbracoUserAppAuthenticator>(UmbracoUserAppAuthenticator.Name).

C'est le point d'entree pour tout nouveau wire-up (DI, notification handlers, content finders...).

Page 404 par site (ContentFinders/NotFoundContentFinder.cs)

IContentLastChanceFinder (constructeur primaire : IDomainService, IPublishedContentCache). Logique :

  1. Recupere tous les domaines Umbraco (GetAllAsync(true)).
  2. Trouve celui dont DomainName correspond a l'authority de la requete (teste brut, https://, http://).
  3. Determine la racine du site (RootContentId) ; fallback sur le premier domaine.
  4. Cherche un enfant de la racine dont le content type est NotFoundPage.ModelTypeAlias.
  5. Si trouve, SetPublishedContent ; retourne true si un contenu a ete pose.

Permet une page 404 differente par site dans une instance multi-sites.

Erreurs 500 (Controllers/ErrorController.cs)

Route ~/error/ (declaree dans ReservedPaths), branchee via UseExceptionHandler("/error") (Program.cs, hors dev). Si le status est 500, redirige vers le premier noeud internalServerErrorPage ; sinon redirige vers /.

Sitemap (Controllers/SitemapController.cs)

RenderController, route /sitemap, ResponseCache 600 s. Construit un sitemap XML unique multilingue :

  • resout la racine via le host (match sur les domaines), retombe sur le premier domaine sinon ;
  • part du noeud homePage ; parcourt recursivement les enfants ;
  • n'inclut un noeud que s'il a un url segment, un template (vraie page) et n'est pas masque du sitemap (HideFromSiteMap) ; force https ; lastmod au format W3C.

robots.txt (Controllers/RobotsController.cs)

Route /robots.txt, cache 24 h. En production : sert uniquement la ligne sitemap: (URL absolue https du sitemap). Hors production : user-agent: * + disallow: / (blocage indexation).

Login dev (Controllers/DevLoginController.cs)

#if DEBUG uniquement. Route GET /l. Double garde : compile en DEBUG ET check runtime IWebHostEnvironment.IsDevelopment() (sinon 404). Recupere jusqu'a 500 utilisateurs, prend le premier dont l'email finit par @spektrummedia.com, le connecte (non persistant) et redirige vers /umbraco. Ne jamais retirer une des deux gardes.

Extensions de contenu (src/Web/Extensions/)

  • PageExtensions : GetHeadTitle, GetMetaTitle, GetMetaDescription, GetOgTitle, GetOgDescription (resolution par priorite via l'interface generee IPageSettings).
  • DateTimeExtensions (ex. FormatAsW3CDateTime pour le sitemap), MediaWithCropsExtensions, PublishedContentExtensions (ex. GetAbsoluteUrl, GetTemplateAlias, HideFromSiteMap), UmbracoContextExtensions (ex. GetCultureFromDomains).

Contributors

No contributors

Changelog

No recent changes