Fermer

novembre 30, 2022

Sitecore Layout Service : résolveur de contenu de rendu personnalisé


Dans cet article de blog, nous examinerons comment vous pouvez créer un résolveur de contenu de rendu personnalisé pour personnaliser la sortie de rendu du service de mise en page de Sitecore.

Mais d’abord, qu’est-ce que le service de mise en page ?

Le service de mise en page de Sitecore est un point de terminaison Headless qui est chargé de fournir les données de la page demandée ou de la rendre sous la forme d’un objet JSON. GraphQL pour obtenir le service de mise en page est disponible à la fois dans Sitecore Headless (JSS) dans la livraison de contenu traditionnelle et également dans le produit Sitecore Experience Edge. Lorsqu’ils sont utilisés en combinaison avec le service de mise en page, les résolveurs de contenu de rendu exposent/fournissent à nouveau le contenu Sitecore complexe du rendu sous la forme d’un objet JSON.

Sitecore Headless fournit six résolveurs de contenu de rendu, par défaut, et ils se trouvent ici : /sitecore/system/Modules/Layout Service/Rendering Content Resolvers.

Rendu des résolveurs de contenu

  • Résolveur d’enfants d’élément de contexte: résout/sérialise les enfants de l’élément de contexte
  • Résolveur d’élément de contexte : résout/sérialise l’élément de contexte
  • Résolveur d’enfants d’élément de source de données: résout/sérialise les enfants de l’élément de source de données du rendu
  • Résolveur de source de données: résout/sérialise l’élément de source de données du rendu
  • Résolveur de filtre de dossier: résout les éléments de type de modèle de dossier. L’ID de modèle est spécifié dans le Requête de sélection d’articles champ de l’élément de résolution dans Sitecore.
  • Résolveur de formulaires Sitecore: résolveur spécifique aux éléments de formulaire.

Ces résolveurs par défaut traitent la majorité des situations, mais lorsque vous travaillez sur un site JSS, il est fort probable que des résolveurs personnalisés soient nécessaires. Par exemple : l’obtention des champs et des détails d’un élément de source de données avec ses enfants dans un seul objet JSON est un cas très fréquent qui n’est pris en charge par aucun des résolveurs décrits ci-dessus.

Alors, permettez-moi de vous guider à travers ce processus simple de développement d’un résolveur de contenu de rendu personnalisé, qui implique :

  • Création du type de classe où nous implémenterons notre propre mécanisme de résolution de contenu Sitecore.
  • Création d’un élément Sitecore de résolveur pour permettre à l’utilisateur de le sélectionner dans la liste des résolveurs disponibles.

Nous allons le prendre en compte Élément de source de données avec résolveur d’enfants comme exemple dans le processus détaillé mentionné ci-dessous.

Création du type de classe où nous implémenterons notre propre mécanisme de résolution de contenu Sitecore :

Sitecore - Comprendre les approches de développement : une perspective de Sitecore

La classe doit hériter de Sitecore.LayoutService.ItemRendering.ContentsResolvers.RenderingContentsResolver et doit passer outre RésoudreContenu méthode de la classe de base.

Extrait de code de la classe (veuillez lire les commentaires en ligne pour connaître l’intention du code écrit):

using System.Collections.Generic;
using System.Linq;
using Newtonsoft.Json.Linq;
using Sitecore.Data.Items;
using Sitecore.Diagnostics;
using Sitecore.LayoutService.Configuration;
using Sitecore.LayoutService.ItemRendering.ContentsResolvers;
using Sitecore.Mvc.Presentation;

namespace Sitecore.Customizations.RenderingContentResolvers
{
  public class DatasourceWithChildrenItemResolver : RenderingContentsResolver
  {
    public override object ResolveContents(Rendering rendering, IRenderingConfiguration renderingConfig)
    {
      //check if the parameters are not null
      Assert.ArgumentNotNull(rendering, nameof(rendering));
      Assert.ArgumentNotNull(renderingConfig, nameof(renderingConfig));

      //get the datasource item
      Item datasourceItem = this.GetContextItem(rendering, renderingConfig);

      //return null object if the datasourceItem is null
      if (datasourceItem == null)
        return null;

      //initialize the JSON object to be returned with the datasourceItem details 
      JObject jobject = ProcessItem(datasourceItem, rendering, renderingConfig);

      //get the children of the datasourceItem
      IEnumerable<Item> items = GetItems(datasourceItem);
      List<Item> itemList = items != null ? items.ToList() : null;

      //return the JSON object if children do not exist
      if (itemList == null || itemList.Count == 0)
        return jobject;

      //add children item details to the JSON object and return the object
      jobject["items"] = ProcessItems(itemList, rendering, renderingConfig);
      return jobject;

    }
  }
}

Création d’un élément Sitecore de résolveur pour permettre à l’utilisateur de le sélectionner dans la liste des résolveurs disponibles :

Il est recommandé de créer les résolveurs de rendu personnalisés dans un dossier séparé sous /sitecore/system/Modules/Layout Service/Rendering Content Resolvers.

  • Créer un nouveau dossier de /sitecore/templates/System/Layout/Layout Service/Rendering Content Resolvers Folder taper à l’intérieur Résolveurs de contenu de rendu en utilisant les options d’insertion.
  • Créez à nouveau le résolveur de contenu personnalisé à l’aide des options d’insertion.

Insérer un résolveur personnalisé

  • A titre d’exemple, j’ai créé Élément de source de données avec résolveur d’enfants. Intéressons-nous maintenant aux champs des éléments du résolveur (référez-vous au résolveur de contenu par défaut, ils sont assez intuitifs avec la courte description fournie :

    • Taper: placez l’espace de noms de la classe de résolveur personnalisé et de son assemblage comme suit : Personnalisations.RenderingContentResolvers.DatasourceWithChildrenItemResolver, Sitecore.Customizations
    • Inclure l’URL du serveur dans les URL des médias : coché par défaut.
    • Utiliser l’élément de contexte : ce champ est décoché, par défaut, ce qui signifie que le résolveur utilisera l’élément de source de données (du rendu) plutôt que l’élément de contexte. Lorsqu’il est sélectionné, l’objet JSON inclura des données au niveau de la route. Pour notre exemple, nous le laisserons décoché.
    • Sélecteur de requête d’article : Ce champ permet à l’utilisateur d’ajouter des requêtes qui peuvent manipuler la façon dont le contenu est traité. Comme pour le résolveur de contenu de dossier par défaut, ce champ contient l’ID de l’élément « Dossier » et seuls ces éléments seront inclus lors du traitement du contenu Sitecore

Résolveur de dossier

Pour notre exemple, nous avons besoin des éléments enfants de la source de données, nous allons donc ajouter la requête pour sélectionner les enfants qui est « /* ». Tous ces champs sont respectés lors de la sérialisation des données de rendu dans le résolveur.

Et votre résolveur de contenu de rendu personnalisé est prêt !

Il sera disponible dans la liste des résolveurs du Résolveur de contenu de rendu domaine du rendu. Avec ce résolveur personnalisé sélectionné, la sortie JSON inclura les données de l’élément de source de données avec ses enfants.

Résolveur dans le rendu

J’ai pris en considération un exemple très simple par souci de simplicité. Cependant, vous pouvez rencontrer des scénarios complexes tels que l’inclusion de données provenant de plusieurs sources autres que les éléments de contexte/source de données et ses enfants ; il peut être incorporé dans le RésoudreContenu méthode. L’exemple de code actuel renvoie tous les champs des éléments enfants, ce qui constitue une zone d’amélioration dans laquelle vous pouvez renvoyer uniquement les champs obligatoires.

J’espère que cet article de blog vous aidera dans votre voyage Sitecore Headless.






Source link

novembre 30, 2022