Skip to content

Patterns - comment ajouter / modifier

Ajouter un formulaire (surface controller)

Le pattern standard repose sur le base generique FormSurfaceController<TModel> (Controllers/FormSurfaceController.cs).

  1. View model : creer une classe dans ViewModels/ qui implemente IFormViewModel (au minimum la propriete honeypot MiddleName + CurrentLanguage). Voir ContactFormViewModel, ContactCraftsmanFormViewModel.
  2. Controller : creer XxxFormSurfaceController : FormSurfaceController<XxxViewModel> dans Controllers/, injecter IEmailService (et ILogger<EmailService> pour le base), override HandleValidSubmit(model, emailSettings).
  3. Le base gere automatiquement : validation ModelState, detection anti-spam (si MiddleName rempli -> log + redirect sans envoi), TempData["FormSuccess"] = true, redirect RedirectToCurrentUmbracoPage().
  4. Dans HandleValidSubmit, appeler la methode EmailService adequate, puis envoyer aux destinataires de emailSettings.EmailTo si presents.
  5. Cote vue, le formulaire poste vers l'action Submit du controller ; les libelles passent par le dictionnaire (Forms.Generic.*).

emailSettings provient de la page courante castee en IEmailSettings (composition emailSettings sur le document type).

Ajouter un service

  1. Definir l'interface dans Interfaces/ (IXxxService) si une abstraction est utile (sinon enregistrer la classe concrete, comme JemaReminderService/ImagePreloadService).
  2. Implementer dans Services/.
  3. Enregistrer dans Program.cs (AddScoped/AddSingleton selon le cas).
  4. Injecter par constructeur.

Ajouter une option de configuration

  1. Creer la classe dans Options/ avec une constante de section (ex. public const string Smtp = "Smtp";).
  2. builder.Services.Configure<TOptions>(builder.Configuration.GetSection(TOptions.Section)) dans Program.cs.
  3. Ajouter la section correspondante dans appsettings.json (valeurs sensibles laissees vides, injectees par environnement).
  4. Injecter IOptions<TOptions> la ou c'est utilise.

Ajouter un handler de notification Umbraco

  1. Creer une classe INotificationHandler<ContentSavingNotification> (ou autre notification) dans Notifications/.
  2. Enregistrer via .AddNotificationHandler<TNotification, THandler>() dans la chaine CreateUmbracoBuilder() de Program.cs.
  3. Pour valider un nom de noeud : utiliser notification.CancelOperation(new EventMessage(...)) pour bloquer la sauvegarde (modele : JemaScheduleChangeNotificationHandler).
  4. Pour deriver une valeur dans une propriete : node.SetValue("alias", valeur) dans le handler. Si tu changes un alias de doctype/propriete lie, mets a jour le handler.

Ajouter un type d'email

  1. Modele d'email dans Mailing/Models/ (souvent derive de EmailTemplateBaseModel).
  2. Template Razor dans Mailing/Templates/Xxx.cshtml. Les templates sont embarques (<EmbeddedResource Include="Mailing\Templates\**" /> dans Web.csproj) ; certains sont aussi <Content Remove=...> pour ne pas etre publies a la volee.
  3. Methode dans EmailService qui construit le modele et appelle Email.From(null)...UsingTemplateFromEmbedded("Web.Mailing.Templates.Xxx.cshtml", model, assembly, true), puis SendEmailAsync(...).
  4. Choisir l'expediteur : isJema: true utilise le SMTP JEMA (JemaSmtpOptions), sinon le SMTP principal (SmtpOptions). Les sujets sont prefixes [DEV]/[STAGING] hors prod automatiquement.

Ajouter un document type / une composition

Editer via le backoffice Umbraco puis exporter avec uSync (.config sous src/Web/uSync/v17/ContentTypes/), ou ecrire le .config a la main avec prudence. Reutiliser les compositions existantes (emailSettings, headerSettings, footerSettings, pageSettings, cookiesSettings, marketingSettings, homeNewsCardsSection). Les document types sont Culture-variants (multilingue).

Ajouter un bloc BlockGrid / une section

  • Bloc : vue dans Views/Partials/blockgrid/Components/<nom>Block.cshtml + document type element (<nom>block.config).
  • Section : vue dans Views/Partials/sections/<nom>Section.cshtml + document type section/composition correspondant.

Ajouter / modifier une cle de traduction

Ajouter la cle dans le dictionnaire Umbraco (export uSync sous uSync/v17/Dictionary/), nommee en point.notation (ex. Forms.Jema.Date). Consommer via _umbracoHelper.GetDictionaryValue(key, culture) ou IDictionaryItemService.TranslateAsync(key, culture).

Contributors

No contributors

Changelog

No recent changes