Klienti mají často požadavek, aby mohli zařadit do navigace webu nebo do seznamu stránek položku, která po kliknutí uživatelem provede přesměrování na stránku do jiné části webu nebo na stránku, která se nachází na externím webu.

Požadavek jsme vyřešili tak, že jsme vytvořili šablonu Redirect Page, které obsahuje pole Redirect Target Link, které je typu General Link. Toto pole umožňuje definovat cílovou stránku, na kterou se provede přesměrování prohlížeče po kliknutí na odkaz. Pole typu General Link jsme zvolili z důvodu, že toto pole umožňuje vybrat jako cílovou stránku jak stránku uvnitř webu, tak URL externí stránky nebo například emailovou adresu.

1

Redaktor následně vytváří z této šablony itemy na požadovaném místě ve struktuře webu a definuje obsah pole Redirect Target Link.

2

Aby metoda „GetItemUrl“ třídy „LinkProvider“ vracela URL cílové stránky nikoliv URL itemy, která je z této šablony vytvořena, pak je třeba vytvořit vlastní LinkProvider a přetížit metodu „GetItemUrl“.

public class MyLinkProvider : Sitecore.Links.LinkProvider
    {
        public override string GetItemUrl(Item item, UrlOptions options)
        {
            Assert.ArgumentNotNull(item, "item");
            Assert.ArgumentNotNull(options, "options");
            string result;
            if (Context.Site == null){ return base.GetItemUrl(item, options); }
                if (Context.Database != null && !Context.PageMode.IsPageEditorEditing)
                {
                    if (item.TemplateName.Equals("Redirect Page", StringComparison.InvariantCultureIgnoreCase))
                    {
                        LinkField redirectField = item.Fields["Redirect Target Link"];
                        return redirectField.GetUrl();
                    }
                }
                return base.GetItemUrl(item, options);
        }

    }

V poslední řadě je třeba zaregistrovat nový LinkProvider. Modifikujete řádky ve web.configu souboru:

<linkManager defaultProvider="custom">
      <providers>
        <clear />
        <add name="sitecore" type="Sitecore.Links.LinkProvider, Sitecore.Kernel" addAspxExtension="false" alwaysIncludeServerUrl="false" encodeNames="true" languageEmbedding="asNeeded" languageLocation="filePath" lowercaseUrls="false" shortenUrls="true" useDisplayName="false" />
      </providers>
        <add name="custom" type="MyNamespace.MyLinkProvider, MyAssembly" addAspxExtension="false" alwaysIncludeServerUrl="false" encodeNames="true" languageEmbedding="asNeeded" languageLocation="filePath" lowercaseUrls="false" shortenUrls="true" useDisplayName="false" />
      </providers>
</linkManager>