Получить ссылку на узел контента в Umbraco?

Я видел в коде umbraco, где разработчики получают ссылку на страницу контента, например:

var content = UmbracoContext.PublishedContentRequest.IsInternalRedirectPublishedContent
                ? UmbracoContext.PublishedContentRequest.InitialPublishedContent
                : UmbracoContext.PublishedContentRequest.PublishedContent;

НО зачем они это делают?

Почему бы не использовать @Model.Content()

Что такое (что они делают):

  • IsInternalRedirectPublishedContent?

  • Начальный опубликованный контент ?

  • Опубликованный контент ?


person user1032019    schedule 16.01.2017    source источник
comment
Перенаправленный контент?.. это плохо?   -  person user1032019    schedule 16.01.2017


Ответы (1)


В Umbraco есть куча зарезервированных свойств, которые вы можете добавить к документам, чтобы получить некоторые скрытые функции. Одним из них является umbracoInternalRedirectId, который позволяет вам выполнять внутреннее перенаправление и отображать другой узел вместо запрашиваемого узла.

Вы можете узнать больше о некоторых других зарезервированных ресурсах здесь.

Если вы используете внутреннее перенаправление, ваш запрос будет внутренне перенаправлен на другой идентификатор узла, а затем все будет отображаться так, как если бы вы изначально запросили этот другой узел (однако вы не увидите перенаправление браузера, и оно не будет отражено в URL либо).

Что такое (что они делают):

IsInternalRedirectPublishedContent?

Это будет верно, если контент, на который вы перенаправляете, в настоящее время опубликован. False, если содержимое не опубликовано.

Начальный опубликованный контент ?

Это будет элемент контента, на который вы изначально нажимаете (до того, как произойдет перенаправление).

Опубликованный контент ?

Это будет элемент контента, на который вы будете перенаправлены (это будет то же самое, что и текущий элемент контента, который вы упомянули выше).

НО зачем они это делают?

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

Однако на самом деле это не имеет смысла, учитывая, что в случае, если IsInternalRedirectPublishedContent возвращает false, InitialPublishedContent будет таким же, как PublishedContent.

Вы получите тот же результат, что и выше, просто выполнив:

var content = UmbracoContext.PublishedContentRequest.InitialPublishedContent;

Однако, возможно, так было не всегда, и этот фрагмент кода должен был обойти ошибку в более старой версии Umbraco.

Так что я бы сказал, если у вас нет очень странной настройки перенаправления на вашем сайте, не должно быть никаких причин для того, чтобы просто не использовать этот фрагмент кода вместо того, который вы разместили.

Чтобы полностью ответить на ваш вопрос:

В приведенном выше коде использование content в вашем шаблоне будет ссылкой на страницу, на которой настроено перенаправление. Использование Model.Content будет ссылкой на узел, на который вы внутренне перенаправлены.

person Claus    schedule 16.01.2017