Fermer

décembre 21, 2020

Création d'assistants C # pour les variantes de rendu SXA


Besoin d'aide C # dans votre variante de rendu SXA? Vous êtes arrivé au bon endroit. Cet article de blog expliquera comment vous pouvez utiliser l'utilisation d'une classe d'assistance C # dans votre variante de rendu. Vous ne devez l'utiliser qu'avec parcimonie. Si vous vous retrouvez à surutiliser C # ici, vous devriez envisager d'implémenter votre composant en tant que composant SXA personnalisé plutôt qu'en tant que variante de rendu SXA. Cela étant dit, voyons comment créer un bel exemple de classe d'assistance que vous pouvez utiliser dans Sitecore.

La classe d'assistance

 namespace Sample.Foundation.Variants.NVelocityExtensions
{
    classe publique ImageTool
    {
        chaîne publique GetImageAlt (élément d'élément, champ de chaîne)
        {
            ImageField imgField = item.Fields [field];

            return imgField.Alt;
        }
    }
} 

La classe ci-dessus sera utilisée pour récupérer le texte alternatif sur une image téléchargée dans un champ d'image. La méthode à l'intérieur nécessite simplement l'élément de source de données utilisé et le champ dans lequel l'image se trouve pour obtenir le texte alternatif.

Rendre notre assistant disponible dans Sitecore

 namespace Sample.Foundation.Variants.Pipelines.GetVelocityTemplateRenderers
{
    classe publique SampleGetTemplateRenderersPipelineProcessor: IGetTemplateRenderersPipelineProcessor
    {
        private en lecture seule IMultisiteContext _multisiteContext;

        public SampleGetTemplateRenderersPipelineProcessor (IMultisiteContext multisiteContext)
        {
            _multisiteContext = multisiteContext;
        }

        processus public void (GetTemplateRenderersPipelineArgs args)
        {
            var tenant = _multisiteContext.GetTenantItem (Sitecore.Context.Item);
            if (tenant.Name.ToLower ()! = "") return;

            args.Context.Put ("imageTool", nouveau ImageTool ());
        }
    }
} 

Vous devrez créer une classe qui implémente l’interface IGetTemplateRenderersPipelineProcessor de SXA. Cette interface nécessite que vous implémentiez la méthode Process. Utilisez la méthode args.Context.Put () pour spécifier le nom que vous souhaitez utiliser pour référencer votre classe d'assistance dans Sitecore. Mon exemple fera référence à la classe d'assistance comme «imageTool».

Si vous êtes dans une solution multi-tenant, vous souhaiterez peut-être rendre votre classe d'assistance uniquement disponible dans un client spécifique. Si tel est le cas, veillez à insérer le nom de votre locataire dans les deux premières lignes de la méthode Process () qui vérifie quel locataire peut utiliser ce code d'assistance. Si vous souhaitez que votre code puisse être utilisé dans l'ensemble de la solution Sitecore, quel que soit le locataire, supprimez simplement ces deux lignes désormais inutiles. Vous pouvez également supprimer le constructeur car vous n'aurez plus besoin d'injecter le MultisiteContext utilisé pour vérifier dans quel client vous vous trouvez.


  
    
      
        
      
    
  

 Sitecore - Understanding Development Approaches: A Sitecore Outlook

Après avoir créé les deux classes C # dont vous avez besoin, vous devra ensuite patcher dans votre processeur après le processus InitializeVelocityContext. Si vous avez supprimé le constructeur, vous pouvez supprimer l'attribut de résolution dans le fichier de correctif ci-dessus.

Utilisation de l'assistant de Sitecore

 Imagetoolusage

Dans votre variante de rendu, insérez un «modèle».

 Imagetoolusage2

Depuis que j'ai spécifié le nom de l'outil comme «imageTool» dans le processus de pipeline, je peux le référencer en utilisant «$ imageTool» dans la variante de rendu. $ item représente l'élément de source de données utilisé. «Image» est le nom du champ Image dans lequel les auteurs de contenu téléchargent leurs images.

Conclusion

La ​​possibilité d'utiliser des helpers C # dans vos variantes de rendu SXA étend vraiment les possibilités et les cas d'utilisation des variantes de rendu. Vous souhaitez appliquer les liens internes à ouvrir dans la fenêtre actuelle et appliquer les liens externes à ouvrir dans une nouvelle fenêtre? Essayez d'écrire une classe LinkTool capable de faire cela. J'espère que cet article de blog vous aidera à améliorer votre site SXA!






Source link