Fermer

octobre 28, 2022

Amusez-vous avec les processeurs Sitecore personnalisés, un regard vers l’avenir (de votre contenu Sitecore) !


C’est un petit POC que j’ai élaboré il y a quelque temps qui permettait la création d’un site de prévisualisation personnalisé où un utilisateur pouvait virer sur une date et une heure via le QueryString pour voir à quoi ressemblerait le contenu à cette date. Seules les exigences étaient 1. il devait être convivial pour les personnes qui ne se soucient pas et ne se connecteront jamais à Sitecore et 2. le lien pourrait alors être facilement partagé.

Qu’est-ce qui est impliqué ? Nous allons créer le code et les configurations pour un HttpRequestProcessor et un GetRendererProcessor ainsi qu’une aide rapide pour que nous fassions le travail !

1: Créez un nouveau site de prévisualisation et ajoutez un attribut personnalisé que nous pouvons utiliser pour déterminer si le pipeline doit être exécuté, j’ai appelé le mien isPreviewSite à notre SiteDefinition.config.

<site name="mypreviewsite" patch:before="site[@name="website"]"

                  ...

                  isPreviewSite="true" />

2 : Créez un assistant car cette logique sera référencée à plusieurs endroits. Notre aide PreviewItemResolverHelperPreviewItemResolverHelper vérifie simplement la date et essaie de résoudre la version correcte d’un élément.

public class PreviewItemResolverHelper

    {

        public Item ResolvePreviewItem(string itemPath)

        {

            var item = Context.Database.GetItem(itemPath, Sitecore.Context.Language);

            var queryStringDate = WebUtil.GetQueryString("date");

            if (item != null && !string.IsNullOrWhiteSpace(queryStringDate))

            {

                var previewDate = DateUtil.IsoDateToDateTime(queryStringDate);

                return item.Publishing.GetValidVersion(previewDate, false);

            }

            return item;

        }

    }

Alors voici les morceaux amusants!

3 : Créez un HttpRequestProcessor personnalisé et ajoutez-le au pipeline httpRequestBegin. Ici, nous vérifions que le site est un site de prévisualisation via l’attribut isPreviewSite et vérifions également que le paramètre QueryString attendu a été fourni. Code et configuration ci-dessous :

public class PreviewItemResolver : HttpRequestProcessor

    {

        public override void Process(HttpRequestArgs args)

        {

            Assert.ArgumentNotNull(args, "args");

            if (System.Convert.ToBoolean(Context.Site.SiteInfo.Properties["isPreviewSite"] ?? "false") && 

                !MainUtil.GetBool(Sitecore.Context.Items["preview::ItemResolved"], false))

            {

                var previewItemResolverHelper = new PreviewItemResolverHelper();

                Sitecore.Context.Item = previewItemResolverHelper.ResolvePreviewItem(args.Url.ItemPath);

                Sitecore.Context.Items["preview::ItemResolved"] = true;




            }

        }

    }
 <httpRequestBegin>

                <processor type="Project.Pipelines.HttpRequest.PreviewItemResolver, Melaleuca.Foundation.SitecoreExtensions"

                           patch:after="*[@type="Sitecore.Pipelines.HttpRequest.ItemResolver, Sitecore.Kernel"]" />

</httpRequestBegin>

4: créez un GetRendererProcessor personnalisé et ajoutez-le au pipeline mvc.getRenderer. Comme avec le PreviewItemResolver, nous vérifions que le site est un site de prévisualisation via l’attribut isPreviewSite et vérifions également que le paramètre QueryString attendu a été fourni. Cela pourrait être centralisé mais j’ai choisi de le laisser ici au cas où les conditions d’exécution de PreviewItemResolver & GetPreviewItemRenderer seraient différentes. Code et configuration ci-dessous :

public class GetPreviewItemRenderer : GetRendererProcessor

    {

        public override void Process(GetRendererArgs args)

        {

            Assert.ArgumentNotNull(args, "args");

            if (System.Convert.ToBoolean(Context.Site.SiteInfo.Properties["isPreviewSite"] ?? "false"))

            {

                var previewItemResolverHelper = new PreviewItemResolverHelper();

                args.Rendering.Item = previewItemResolverHelper.ResolvePreviewItem(args.Rendering.Item.Paths.Path);

            }

        }

    }
<mvc.getRenderer>

                <processor type="Project.Pipelines.GetRenderer.GetPreviewItemRenderer, Melaleuca.Foundation.SitecoreExtensions"      patch:instead="processor[@type="Sitecore.Mvc.Pipelines.Response.GetRenderer.GetItemRenderer, Sitecore.Mvc"]" />

</mvc.getRenderer>

5 : Construisez, déployez et testez !

J’ai choisi d’utiliser le formulaire aaaaMMjjTHHMMSS (l’heure est facultative) pour ma date QueryString. Cela a rendu la vie beaucoup plus facile. Vous pouvez utiliser n’importe quel format et le gérer dans PreviewItemResolverHelper.


Nous avons maintenant un lien que nous pouvons faire circuler et qui nous permet de regarder vers l’avenir (ou le passé) !

http://mypreviewsite/someurl?date=20200929

http://monsited’aperçu/someurl?date=20200929T050000






Source link