Comment créer un champ déroulant personnalisé dans Sitecore

Parfois, les types de champs déroulants prêts à l'emploi de Sitecore ne fournissent pas les fonctionnalités dont vous avez besoin. Vous souhaitez peut-être extraire des options d'une source de données externe. Vous souhaitez peut-être modifier l'apparence des options à l'auteur du contenu, mais stocker une valeur différente en tant que valeur brute. Vous voudrez peut-être même avoir une liste déroulante avec des options sélectionnables basées sur des valeurs de champ déjà sélectionnées sur le même élément. Cet article de blog vous montrera comment rendre ces scénarios possibles dans Sitecore avec un type de champ déroulant personnalisé.
Objectif final – Créer un menu déroulant personnalisé comme ci-dessous
L'objectif final est de créer un menu déroulant qui fournit des options personnalisées à choisir. Les options masquent la valeur réelle qui sera stockée dans le champ. Par exemple, la sélection de Key1 dans la capture d'écran ci-dessus stockera Value1 comme valeur brute comme indiqué ci-dessous:
Cela permet aux auteurs de contenu de choisir parmi des options plus faciles à lire tout en conservant les données importantes dont le développeur a besoin.
Étape 1 – Écrivez votre logique personnalisée pour créer des options de liste déroulante
namespace Foundation.Controls { classe publique MyCustomDropdown: Sitecore.Web.UI.HtmlControls.Control { protected override void DoRender (sortie System.Web.UI.HtmlTextWriter) { var keyValuePairs = new List <KeyValuePair> { nouvelle KeyValuePair ("Key1", "Value1"), nouvelle KeyValuePair ("Key2", "Value2"), nouvelle KeyValuePair ("Key3", "Value3"), nouvelle KeyValuePair ("Key4", "Value4"), nouvelle KeyValuePair ("Key5", "Value5"), }; output.Write (""); } protected override bool LoadPostData (valeur de chaîne) { if (valeur == null) retourner faux; if (this.GetViewStateString ("Valeur")! = valeur) Sitecore.Context.ClientPage.Modified = true; this.SetViewStateString ("Valeur", valeur); retourne vrai; } } }
Vous devrez créer une classe qui hérite de la classe Control de Sitecore. À partir de cette classe, vous devrez remplacer deux méthodes: la méthode DoRender () et les méthodes LoadPostData () .
Si vous voulez savoir quel élément cette liste déroulante est en cours d'interaction, vous pouvez récupérer l'élément sur lequel vous vous trouvez via la variable ControlAttributes . Utilisez le code ci-dessous pour ce faire:
var myRegex = new Regex (@ " {(. *?) }"); var myCurrentItem = Sitecore.Context.ContentDatabase.GetItem (new ID (myRegex.Match (ControlAttributes) .Value));
Cela peut être utile car vous souhaiterez peut-être manipuler les options disponibles dans votre liste déroulante personnalisée en fonction d'autres valeurs sélectionnées sur
Étape 2 – Correctif dans votre nouvelle implémentation
Vous devrez indiquer à Sitecore où trouver les nouvelles implémentations Control dans votre solution.
Vous devrez spécifier l'espace de noms et l'assembly de l'emplacement de votre implémentation personnalisée. Vous devrez également spécifier un préfixe. Vous voudrez bien nommer ce préfixe, afin qu'il puisse être réutilisé pour désigner les contrôles personnalisés que vous avez créés.
Étape 3 – Créer un champ personnalisé Élément Sitecore dans Core
Dans l'éditeur de contenu de la base de données Core, naviguez à / sitecore / system / Types de champs / Types de listes . Dans ce dossier, insérez un nouvel élément basé sur le type de champ / sitecore / templates / System / Templates / Template . Ce que vous nommez cet élément sera le nom qui s'affiche lors de la sélection d'un type de champ pour un nouveau champ. Vous devrez ensuite remplir les champs de cet élément en fonction de l'endroit où vous avez implémenté votre implémentation Control personnalisée. Pour mon exemple, cela ressemble à ce qui suit:
Conclusion
C'est tout ce que vous avez à faire pour configurer un champ déroulant personnalisé dans Sitecore! Il existe de nombreuses façons différentes d'en tirer parti pour présenter différentes données à vos auteurs de contenu. Laissez un commentaire si vous avez des questions sur la façon dont tout cela fonctionne!
Source link