Restrictions de page dans un module d'initialisation

La gestion de vos AllowedTypes (options d'insertion) dans Episerver peut devenir accablante, selon la stratégie que vous adoptez.
Vous pouvez lire les différentes options ici:
mais il y a une stratégie que vous pouvez adopter pour un très développeur- approche amicale.
La solution
Créez un module d'initialisation Episerver standard et implémentez la fonction Initialize ().
[InitializableModule] [ModuleDependency(typeof(EPiServer.Web.InitializationModule))] classe publique PageRestrictionInitialization: IInitializableModule { private IContentTypeRepository _contentTypeRepository; private IAvailableSettingsRepository _availableSettingsRepository; private ILogger _log; public void Initialize (contexte InitializationEngine) { } public void Uninitialize (contexte InitializationEngine) { } }
Nous utilisons deux fonctions d'aide qui rendent le code plus propre et plus facile à lire et à maintenir.
private void DisallowAll() { var page = _contentTypeRepository.Load (typeof (T)); var setting = nouveau AvailableSetting { Disponibilité = Disponibilité.Aucune }; _availableSettingsRepository.RegisterSetting (page, paramètre); }
La fonction DisallowAll () est utilisée pour définir que le type de page passé n'est pas autorisé à être inséré sous une autre page. Nous utilisons cette fonction pour définir d'abord la disponibilité sur aucune, puis définir la disponibilité comme nous le souhaitons.
private void SetPageRestriction(IEnumerable pageTypes) { var page = _contentTypeRepository.Load (typeof (T)); var setting = nouveau AvailableSetting { Disponibilité = Disponibilité.Spécifique }; foreach (var pageType dans pageTypes) { var contentType = _contentTypeRepository.Load (pageType); setting.AllowedContentTypeNames.Add (contentType.Name); } _availableSettingsRepository.RegisterSetting (page, paramètre); _log.Log (Level.Debug, restriction $ "{page.Name} ajoutée."); }
La fonction SetPageRestriction () est l'endroit où toutes les restrictions sont effectuées. Vous pouvez transmettre la liste des types de page comme argument de fonction et que ces types de page seront définis comme types de page autorisés pour le type de type de page passant
Nous pouvons maintenant implémenter le Fonction Initialize ().
public void Initialize (contexte InitializationEngine) { _contentTypeRepository = ServiceLocator.Current.GetInstance(); _availableSettingsRepository = ServiceLocator.Current.GetInstance (); _log = LogManager.GetLogger (); var sysRoot = _contentTypeRepository.Load ("SysRoot") en tant que PageType; var setting = nouveau AvailableSetting { Disponibilité = Disponibilité Spécifique, AllowedContentTypeNames = { nameof (StartPage), // impossible d'utiliser des interfaces personnalisées avec IContentTypeRepository } }; _availableSettingsRepository.RegisterSetting (sysRoot, paramètre); // Interdire l'insertion pour toutes les pages relatives aux produits et aux articles DisallowAll (); DisallowAll (); DisallowAll (); DisallowAll (); // Page d'accueil SetPageRestriction (nouvelle liste { typeof (ContainerPage), typeof (StandardPage), typeof (LandingPage), typeof (FindSearchPage), typeof (ProductPage) }); // Page de destination SetPageRestriction (nouvelle liste { typeof (ArticlePage), typeof (NewsPage) }); // Page Conteneur SetPageRestriction (nouvelle liste { typeof (ContactPage) }); // Page produit SetPageRestriction (nouvelle liste { typeof (ContainerPage), typeof (StandardPage) }); }
J'utilise le site Web de démonstration d'Episerver Alloy pour cet exemple et tous les types de page sont du projet Alloy.
Nous obtenons d'abord le nœud SysRoot comme type de page et l'utilisons comme première page / nœud. Ensuite, nous n'autorisons que la StartPage à être insérée sous la page racine et enregistrons les paramètres.
Ensuite, nous interdisons l'insertion de toute page sous ProductPage, ArticlePage, LandingPage et FindSearchPage. Nous devons maintenant autoriser l'insertion pour chaque type de page comme nous le voulons. Pour cet exemple, je l'ai fait pour StartPage, LandingPage, ContainerPage et ProductPage.
Et c'est tout.
De cette façon, vous disposez d'un modèle propre pour tous les types de pages et tout au même endroit et il est facile à maintenir et à étendre ultérieurement. Et ce concept se consolide aux premiers principes SOLID – Responsabilité unique.
Source link