如何确定umbraco中的当前页面文档类型?

时间:2013-05-26 14:24:42

标签: razor macros umbraco doctype

我觉得这是一个关于Umbraco的一个非常简单的问题,但是还没有明显的答案。

我有一个剃刀模板,标准的东西,@显示变量和一些内联C#代码。

我在模板中的某一点使用:

@Umbraco.RenderMacro("myCustomMacro");

没有问题,一切都按预期工作。

现在,这个宏被插入到每个页面上(它在主模板中)但是我有一个页面属性,允许内容作者通过页面属性中的复选框打开和关闭它,再次到目前为止这么好一切都很完美。

但是我现在发现,对于某个“文档类型”,必须显示该组件,所以我一直试图找到一种方法来执行该检查。

现在在我看来,这应该像做这样的事情一样简单:

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

正如我所说,这是(或者我认为它应该是反正的)一个非常简单的操作,但到目前为止似乎没有结果。

到目前为止我尝试了什么?

除了阅读我们的umbraco上的每一页都提到剃须刀和& @CurrentPage变量,我已经通过剃刀属性备忘单,并尝试了看似最常见的属性,包括(没有特定的顺序):

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

以及其他一些字母案例组合,加上其他一些看起来可能适合该法案的案件。

一致地说,这些属性不存在或者是空的,因此它们中没有可用的信息来帮助确定结果。

所以现在经过几天的圈子,并没有到达任何地方,我发现自己在这里..

(请注意:这不是搜索XSLT问题,或者迭代子集合或类似的东西,因此任何发布XSLT,宏,页面模板或类似内容的请求都将被拒绝,我只需要做找到一种方法来确定正在呈现的当前页面的文档类型。)

干杯

辣妹

PS:忘了提,我正在使用

umbraco v 4.11.8(汇编版本:1.0.4869.17899)

以防万一有人问。

5 个答案:

答案 0 :(得分:20)

在Umbraco 7中使用currentPageNode.DocumentTypeAlias

答案 1 :(得分:13)

在Umbraco 7.1中,我使用:@if (@CurrentPage.DocumentTypeAlias == "NewsItem")

答案 2 :(得分:8)

认为每次当你在页面上访问诸如nodetypealias和stuff之类的页面属性时,你确实需要创建一个节点,试试这个我在我的网站http://rdmonline.co.uk/上有相同的功能但是在侧边菜单,根据页面/部分显示差异菜单链接。

    @{
        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
          }
     }

请告诉我这是否适合您。

答案 3 :(得分:1)

这与这篇文章有点无关,但是搜索谷歌把我带到了这个帖子,所以我想我分享以防其他人正在处理这个问题:在Umbraco 7中,获取所有内容特定类型的网站:

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

答案 4 :(得分:0)

如果您的剃刀视图继承自Umbraco.Web.Mvc.UmbracoViewPage,您还可以使用UmbracoHelper

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

查询特定的 DocumentType 也很简单:

UmbracoHelper.AssignedContentItem.Descendants("NewsItem")

此代码将递归返回IPublishedContent个节点的列表。 如果您希望将此列表与特定的 DocumentType 信息一起使用,则必须将这些项目映射到特定类型。除此之外,IPublishedContent为您提供节点的basic information

我后来发现你一直在使用旧版本的Umbraco。 :) 此实现仅适用于v7。