Как определить тип документа текущих страниц в umbraco?

У меня есть то, что я чувствую, очень простой вопрос о Umbraco, но тот, у которого пока нет явного ответа.

У меня есть шаблон бритвы, стандартный материал, с @отображением переменных и некоторым встроенным кодом С#.

В какой-то момент в шаблоне я использую:

@Umbraco.RenderMacro("myCustomMacro");

проблем нет, все работает так, как ожидалось.

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

Однако теперь я обнаружил, что для определенного типа документа этот компонент ДОЛЖЕН отображаться, поэтому я пытался найти способ выполнить эту проверку.

Теперь, на мой взгляд, это должно быть так же просто, как сделать что-то вроде этого:

@{
  if(CurrentPage.documentType == "someDocTypeAliasHere")
  {
     //Render the macro
  }
  else
  {
     // Render the macro only if the tick box is checked
  }
 }

как я уже сказал, это (или я считаю, что это должно быть так или иначе) очень простая операция, но та, которая пока не имеет результата.

Что я пробовал до сих пор?

Хорошо, кроме чтения каждой страницы нашего-umbraco, в которой упоминаются все, что связано с бритвой и переменной @CurrentPage, Iv'e прошел через чит-лист свойств бритвы и попытался использовать наиболее общие свойства, включая ( В определенном порядке):

@CurrentPage.NodeTypeAlias
@CurrentPage.NodeType
@CurrentPage.ContentType
@CurrentPage.DocumentType

и различные комбинации буквенных букв, плюс некоторые другие, которые выглядели так, как будто они могли соответствовать счету.

Впоследствии свойства либо не существуют, либо являются пустыми, поэтому в них нет полезной информации, чтобы помочь определить результат.

Итак, теперь, после нескольких дней кругосветного кружка, и никуда не дену, я нахожусь здесь.

(Обратите внимание: это не поиск вопроса XSLT, или итерация дочерней коллекции или что-то в этом роде, поэтому любые запросы на отправку XSLT, макросов, шаблонов страниц или что-то в этом роде будут отклоняться, все, что мне нужно сделать найти способ определения типа документа текущей отображаемой страницы.)

Приветствия

Shawty

PS: Забыл упомянуть, я использую

umbraco v 4.11.8 (версия сборки: 1.0.4869.17899)

На всякий случай кто-нибудь спрашивает.

Ответ 1

Думаю, вам действительно нужно создать node каждый раз, когда вы находитесь на странице, чтобы получить доступ к свойствам страниц, таким как nodetypealias и прочее, попробуйте это, у меня есть те же функции на моем сайте, http://rdmonline.co.uk/, но в боковом меню, где в зависимости от страницы/раздела отображаются ссылки в меню diff.

    @{
        var currentPageID = Model.Id;
        var currentPageNode = Library.NodeById(currentPageID);

        if (currentPageNode.NodeTypeAlias == "someDocTypeAliasHere")
          {
             //Render the macro
          }
          else
          {
             // Render the macro only if the tick box is checked
          }
     }

Сообщите мне, если это сработает для вас.

Ответ 2

В Umbraco 7 используйте currentPageNode.DocumentTypeAlias

Ответ 3

В Umbraco 7.1 я использую: @if (@CurrentPage.DocumentTypeAlias == "NewsItem")

Ответ 4

Это немного не связано с этим сообщением, но поиск Google привел меня на этот пост, поэтому я решил поделиться с ним тем, что anoyne еще имеет дело с этой проблемой: в Umbraco 7, чтобы получить весь контент на сайте, определенный тип:

var articles = CurrentPage.AncestorOrSelf(1).Descendants()
                   .Where("DocumentTypeAlias == \"BlogPost\"").OrderBy("CreateDate desc");

Ответ 5

Если ваш вид бритвы наследуется от Umbraco.Web.Mvc.UmbracoViewPage, вы также можете использовать UmbracoHelper:

@if (UmbracoHelper.AssignedContentItem.DocumentTypeAlias.Equals("NewsItem")) { ... }

Запросить определенный тип DocumentType также легко:

UmbracoHelper.AssignedContentItem.Descendants("NewsItem")

Этот код будет рекурсивно возвращать список узлов IPublishedContent. Если вы хотите использовать этот список со своей конкретной информацией DocumentType, эти элементы должны быть сопоставлены определенному типу. Кроме того, IPublishedContent предоставляет базовую информацию для узлов.

Позже я увидел, что вы использовали более старую версию Umbraco.:) Эта реализация предназначена только для v7.