Fermer

février 21, 2024

Extension du lien général pour l’approche alternative de l’éditeur d’expérience / Blogs / Perficient

Extension du lien général pour l’approche alternative de l’éditeur d’expérience / Blogs / Perficient


Nous avons déjà vu la partie éditeur d’expérience dans le Extension du lien général pour l’éditeur d’expérience article en détail. Par conséquent, dans cet article, nous explorerons comment nous pouvons étendre le lien général pour le mode éditeur d’expérience avec une approche de code alternative dans Sitecore 10.2.0 pour résoudre les problèmes d’environnement et de performances supérieurs survenus après la mise en œuvre des certificats de sécurité supplémentaires.

Extension du lien général pour l’approche alternative de l’éditeur d’expérience

Examinons en détail cette approche de code alternative pour une expérience Sitecore plus robuste et plus transparente.

Veuillez suivre les étapes 1 à 5 décrites dans la section «Extension du lien général pour l’éditeur d’expérience» pour ajouter les configurations nécessaires et configurer la conception appropriée dans le mode éditeur d’expérience. Ici, nous explorerons uniquement comment nous avons optimisé la classe « ExtendedGeneralLinkForm.cs » créée précédemment.

1. Condition requise

Installez les DLL spécifiées à l’aide de « NuGet Manager » ; toutes les DLL mentionnées sont en version 10.2.0.

  • Sitecore.XA.Foundation.Multisite
  • Sitecore.XA.Foundation.SitecoreExtensions

Note: Comme nous travaillons avec une instance Sitecore 10.2.0, l’installation des DLL correspondant à cette version est essentielle. Vous pouvez installer les DLL en fonction des exigences spécifiques de votre version.

2. Mettre à jour ou ajouter la classe ExtendedGeneralLinkForm.cs

Créez ou mettez à jour la classe « ExtendedGeneralLinkForm.cs », le code derrière le fichier de conception « ExtendedGeneralLink.xml ».

La classe « ExtendedGeneralLinkForm.cs » est créée en héritant du fichier de classe « GeneralLinkForm.cs » existant. Dans Sitecore 10.2.0, si vous examinez « Sitecore.Client.dll », vous trouverez cette classe spécifique dans l’espace de noms « Sitecore.Shell.Applications.Dialogs.GeneralLink ». Ici, vous pouvez vous référer à la façon dont le « GeneralLinkForm » est utilisé.

Ensuite, il est nécessaire d’inclure les modifications essentielles dans le fichier « ExtendedGeneralLinkForm.cs » pour implémenter la fonctionnalité de lien « Téléphone » dans le mode Experience Editor de Sitecore.

namespace Fieldtypes.ExtendedGeneralLink
{
    public class ExtendedGeneralLinkForm : Sitecore.Shell.Applications.Dialogs.GeneralLink.GeneralLinkForm
    {
        //Since we are inheriting from the "GeneralLinkForm.cs" class, there is no need to add references to all the controls.
        protected Border TelephoneToContainer;
        protected Edit TelephoneToLink;
        protected XmlControl Dialog;

        protected BaseClient BaseClient
        {
            get
            {
                return (BaseClient)ServiceLocator.ServiceProvider.GetService(typeof(BaseClient));
            }
        }
        
        private string CurrentMode
        {
          //Code snippet from the "GeneralLinkForm.cs" class
        }

        protected CrossSiteLinksMultiRootTreeview RootItemTreeview { get; set; } = new CrossSiteLinksMultiRootTreeview();

        protected override void OnLoad(EventArgs e)
        {
          //We've enhanced the "OnLoad" method by incorporating custom code. For more details, please refer to the GitHub link provided below.
        }

        private void AddTreeRoots(List startItems)
        {
          //Created new methods, as per the requirement
        }

        protected virtual void SetSelectedItem()
        {
          //Created new methods, as per the requirement
        }

        protected virtual DataContext CopyDataContext(DataContext dataContext, string id)
        {
          //Created new methods, as per the requirement
        }
        //Code snippet from the "GeneralLinkForm.cs" class
 
        protected override void OnOK(object sender, EventArgs args)
        {
            if (!this.InternalLinkTreeview.Visible)
            {
                this.InternalLinkTreeview = this.RootItemTreeview;
            }
            //Code snippet from the "GeneralLinkForm.cs" class
            bool flag;
            switch (this.CurrentMode)
            {
                //Code snippet from the "GeneralLinkForm.cs" class
                case "tel":
                   flag = this.SetTelephoneLinkAttributes(packet);
                   break;
                //Code snippet from the "GeneralLinkForm.cs" class
            }
            //Code snippet from the "GeneralLinkForm.cs" class    
        }

       protected virtual void HandleInitialMediaItemSelected()
       {  
          //Created new methods, as per the requirement
       }

       //Code snippet from the "GeneralLinkForm.cs" class

        private string GetTelephone()
        {
            var value = ((Control)this.TelephoneToLink).Value;
            var str = value;
            if (str.Length > 0)
            {
                if (str.IndexOf(":", StringComparison.InvariantCulture) >= 0)
                {
                   str = str.Substring(str.IndexOf(":", StringComparison.InvariantCulture) + 1);
                }

                if (!new Regex(@"^(?:\(?)(?<AreaCode>\d{3})(?:[\).\s]?)(?<Prefix>\d{3})(?:[-\.\s]?)(?<Suffix>\d{4})(?!\d)", RegexOptions.IgnoreCase).IsMatch(str))
                {
                     return "__Canceled";
                }
            }

            if (value.Length > 0 && value.IndexOf(":", StringComparison.InvariantCulture) < 0)
            {
               value = string.Concat("tel:", value);
            }

            return value;
        }

        private bool SetTelephoneLinkAttributes(Packet packet)
        {
            Assert.ArgumentNotNull((object)packet, nameof(packet));
            var tel = GetTelephone();
            if (tel == "__Canceled")
            {
               SheerResponse.Alert("The telephone number is invalid.");
               return false;
            }

            SetAttribute(packet, "url", tel ?? string.Empty);
            SetAttribute(packet, "anchor", string.Empty);
            return true;
        }

        private void SetTelephoneLinkControls()
        {
           if (this.LinkType == "tel" && string.IsNullOrEmpty(((Control)this.Url).Value))
           {
              ((Control)this.TelephoneToLink).Value = this.LinkAttributes["url"].Replace("tel:", "");
           }

           ShowContainingRow((Control)this.TelephoneToContainer);
           this.SectionHeader.Text = Translate.Text("Specify the Telephone, e.g. 9006662121");
        }

        //Code snippet from the "GeneralLinkForm.cs" class

        private void SetModeSpecificControls()
        {
             //Code snippet from the "GeneralLinkForm.cs" class
             HideContainingRow((Control)this.TelephoneToContainer);
             //Code snippet from the "GeneralLinkForm.cs" class
             switch (this.CurrentMode)
             {
                 //Code snippet from the "GeneralLinkForm.cs" class
                 case "tel":
                     this.SetTelephoneLinkControls();
                     break;
                 //Code snippet from the "GeneralLinkForm.cs" class
             }

             //Code snippet from the "GeneralLinkForm.cs" class
        }

        //Code snippet from the "GeneralLinkForm.cs" class
    }
}

Clique le « GitHub – Mise à jourExtendedGeneralLinkForm» pour accéder à la logique de code détaillée nécessaire à l’implémentation de la classe « ExtendedGeneralLinkForm.cs ».

3. Mettre à jour ou ajouter un fichier de correctif de configuration

Assurez-vous d’apporter des modifications au fichier de correctif de configuration. Dans notre cas, comme nous avons déjà mis à jour la classe « ExtendedGeneralLinkForm.cs » existante et que ses configurations sont déjà incluses dans le fichier de correctif, nous n’avons pas besoin de mettre à jour à nouveau le fichier de correctif.

Vous pouvez trouver le code complet du fichier de correctif de configuration sur le GitHub -Fieldtypes.ExtendedGeneralLink.Patch.config lien.

Une fois toutes les modifications ajoutées, n’oubliez pas de nettoyer et de reconstruire la solution.

4. Résultat final – Éditeur d’expérience

Lors de l’ajout d’un composant qui utilise le type de champ « Lien général », choisissez son champ « Lien général » via le mode éditeur d’expérience.

Éditeur d'expérience de liaison téléphonique

Cliquez sur le bouton « Modifier » comme mentionné dans l’image ci-dessous.

Éditeur d'expérience de liaison téléphonique Modifier

La boîte de dialogue « Insérer un lien » apparaîtra, où vous pourrez localiser l’option d’ajout d’un lien « Téléphone » ainsi que ses propriétés nécessaires.

Lien téléphonique avec l'éditeur d'expérience

Conclusion

Notre réponse à l’introduction de certificats de sécurité supplémentaires dans des environnements supérieurs a impliqué l’optimisation de notre code, ce qui a entraîné des avantages significatifs. La rationalisation du code a réduit les étapes de filtrage de sécurité et amélioré les performances globales du code. L’extension du lien général pour l’approche alternative de l’éditeur d’expérience s’est avérée déterminante pour résoudre les problèmes dans les environnements supérieurs. Par conséquent, l’optimisation du code est devenue un élément crucial de notre stratégie, garantissant la fourniture d’une solution robuste et efficace.

Bon apprentissage!






Source link