2017-01-16 7 views
2

я видел в Umbraco коде, где разработчики получают ссылку на страницу содержания, например:Получить ссылку на узел контента в Umbraco?

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

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

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

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

  • IsInternalRedirectPublishedContent?

  • InitialPublishedContent?

  • Опубликовано в GoogleContent?

+0

Перенаправленный контент? .. Это плохо? – user1032019

ответ

3

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

Подробнее о некоторых из других зарезервированных свойств вы можете узнать here.

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

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

IsInternalRedirectPublishedContent?

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

Начальная версияОбновлен?

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

Опубликовано в GoogleContent?

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

НО, почему они это делают?

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

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

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

var content = UmbracoContext.PublishedContentRequest.InitialPublishedContent; 

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

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

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

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