Sitecore Link Manager Опции за Url адрес Разрешаването на сайта не е зададено

В многосайтово решение използвам следното решение, за да позволя превключване между различни мениджъри на връзки въз основа на сайт: http://thegrumpycoder.com/post/78684655662/sitecore-pipeline-enabled-linkprovider

Това изглежда работи според очакванията. Проблемът, с който се сблъсквам, е, че siteResolving не е зададено на true за следната конфигурация:

<linkManager defaultProvider="overridesitecore">
  <providers>
    <clear />
     ...
     <add name="someSiteSpecificLinkManager" type="Sitecore.Links.LinkProvider, Sitecore.Kernel" addAspxExtension="false" alwaysIncludeServerUrl="true" encodeNames="true" languageEmbedding="always" languageLocation="filePath" lowercaseUrls="true" shortenUrls="true" useDisplayName="false" siteResolving="true"  />
     ...
  </providers>
</linkManager>

Превключих няколко от другите настройки, само за да се уверя, че те ще променят опциите за URL адреси по подразбиране на мениджъра на връзките и го направиха. siteResolving не е ли правилният атрибут за използване?


person Teeknow    schedule 21.04.2015    source източник


Отговори (1)


Има дългогодишен проблем с това, че siteResolving не се прилага към мениджъра на връзките, независимо че е конфигуриран правилно.

Решението е да приложите настройката в рамките на вашия доставчик:

public class SiteResolvingLinkProvider : LinkProvider
{
    public override UrlOptions GetDefaultUrlOptions()
    {
        UrlOptions urlOptions = base.GetDefaultUrlOptions();
        urlOptions.SiteResolving = Settings.Rendering.SiteResolving;
        return urlOptions;
    }
}

Вижте също: http://reasoncodeexample.com/2012/08/09/sitecore-cross-site-links/

Изглежда, че имате няколко доставчици и се опитвате да контролирате настройката независимо за всеки доставчик, нали? В такъв случай можете да опитате да предоставите атрибута siteResolving в конфигурацията на доставчика на връзка (както показахте), след което прочетете тази конфигурация в свойство на LinkProvider:

public bool SiteResolving { get; set; }

public override void Initialize(string name, NameValueCollection config)
{
    base.Initialize(name, config);
    SiteResolving = MainUtil.GetBool(config["siteResolving"], true);
}
person Derek Hunziker    schedule 21.04.2015
comment
Наистина исках да избегна добавянето на конфигурация в код, базиран на глобална настройка. Има ли начин да получите атрибута siteResolving от мениджъра на връзки? Предпочитам да го направя. - person Teeknow; 21.04.2015
comment
Мисля, че идеята на Дерек е, че LinkManager не зачита стойността на siteResolving, посочена в config, което е целият проблем. - person Martin Davies; 21.04.2015
comment
Да, това определено е проблемът, но питам за работа, която бих предпочел, за разлика от предоставената. - person Teeknow; 21.04.2015
comment
По принцип използването на подхода GrumpyCoder изисква siteResolving да е вярно. не мисля, че работи, ако го зададете на false. Така че макар да съм съгласен, че прилагането на config в код не е страхотно. В този случай изобщо не можете да го наречете config - това е изискване. - person Martin Davies; 21.04.2015
comment
Как така? Може да се наложи да се зададе в глобалните опции за url адрес по подразбиране, като зададете Settings.Rendering.SiteResolving да има стойност true, но siteResolving не означава нищо в мениджъра на връзки, освен ако не бъде прочетено, както Дерек актуализира отговора си, за да покаже. @Derek точно това търсех. Благодаря! - person Teeknow; 21.04.2015