Как определить тип документа текущих страниц в 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.