Sitecore LinkManager.GetItemUrl (), разрешающий псевдоним - PullRequest
2 голосов
/ 09 января 2012

Я создал псевдонимы для домашней страницы одного из локальных сайтов (и его дочерних страниц) на своем национальном веб-сайте - и я не могу понять, как это происходит.

Когда кто-то приземляетсяна локальной странице у меня есть элемент управления (файл cs), который создает локальные ссылки (на дочерние страницы) в левой части локальной веб-страницы.Эти ссылки получены из контекста Sitecore (путь к содержимому текущего элемента).

После того, как я создал псевдонимы для всех страниц на локальном сайте, именно тогда я заметил эту проблему.Если URL-адрес является псевдонимом Sitecore, навигационные ссылки создаются для дочерних псевдонимов - в противном случае они разрешаются Sitecore LinkManager, так же как и до создания псевдонимов.Однако когда я нажимаю на страницу для исходного локального элемента (не псевдонима), ссылки отображаются для псевдонима:

childLink.NavigateUrl = LinkManager.GetItemUrl (child);

И я убедился, что дочерний элемент действителен.У кого-нибудь есть какие-либо предложения относительно того, почему LinkManager будет отображать ссылки для псевдонимов - и как этого можно избежать?

Ответы [ 2 ]

2 голосов
/ 15 января 2012

Sitecore.Links.LinkManager.GetItemUrl(item) возвращает путь к исходному элементу, а не путь псевдонима. Если у вас есть специальная логика для определения псевдонимов, например, с помощью свойства Sitecore.Context.RawUrl, вы можете столкнуться с проблемой кэширования вывода, которая может привести к отображению псевдонимной версии элемента управления при переходе к исходному элементу. .

Обновление: Я почти уверен, что вы столкнулись с проблемой кэширования вывода. Мне удалось воспроизвести это поведение, создав контрольный элемент управления, который отображает временную метку и RawUrl, и включив кэширование вывода для элемента управления в разделе «Сведения о презентации».

При первом отображении элемента управления, будь то элемент или псевдоним, выходные данные кэшируются, и эти кэшированные выходные данные отображаются при каждом просмотре элемента управления либо для исходного элемента, либо для псевдонима. Даже если вы включите «Vary By Data», эффект будет таким же, потому что «Vary By Data» управляется элементом источника данных, а не URL.

Чтобы исправить это поведение, вам нужно добавить кэшированное состояние в выходные данные свойства GetCachingId:

protected override string GetCachingID()
{
    return this.GetType().Name + (IsAlias() ? "Alias": "Item");
}

private bool IsAlias()
{
    return Sitecore.Context.Database.Aliases.Exists(Sitecore.Context.RawUrl);
}

Переход к этому ответу для логики IsAlias.

0 голосов
/ 10 января 2012

В этом случае, будет ли предоставлен псевдоним или нет, зависит от настройки в web.config. Если LinkManager имеет параметр «ApplyAliases» (независимо от того, проверять или применять псевдонимы, когда это возможно), установленный в значение true, LinkManager будет возвращать псевдонимы, когда это возможно.

Вы можете прочитать больше о настройке LinkManager и переопределении определенных настроек в коде на этой странице блога, написанной Джоном Уэстом.

Удачи!

...