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 () .