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

sha*_*wty 11 macros doctype umbraco razor

我觉得有一个关于Umbraco的一个非常简单的问题,但是一个尚未明确答案的问题.

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

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

@Umbraco.RenderMacro("myCustomMacro");
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

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

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

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

除了阅读我们umbraco上的每一页都提到与剃刀和@CurrentPage变量有关的内容之外,我已经通过剃须刀属性备忘单,并尝试了看似最常见的属性,包括(不具体)订购):

@CurrentPage.NodeTypeAlias
@CurrentPage.NodeType
@CurrentPage.ContentType
@CurrentPage.DocumentType
Run Code Online (Sandbox Code Playgroud)

和那些看起来像他们可能适合该法案的其他一些字母案例组合.

一致地,属性要么不存在要么是空的,所以在它们中没有可用的信息来帮助确定结果.

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

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

干杯

美女

PS:忘了提,我正在使用

umbraco v 4.11.8(汇编版本:1.0.4869.17899)

以防万一有人问.

use*_*964 20

在Umbraco 7中使用 currentPageNode.DocumentTypeAlias


Les*_*k P 13

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


den*_*iwa 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
          }
     }
Run Code Online (Sandbox Code Playgroud)

如果这对您有用,请告诉我.

  • 事实证明,这解决了我的问题,虽然不是直接的.我一直在寻找在宏中定义的'CurrentPage'(即它不是null)但是,如果我直接进入模型,我需要的一切都在那里.我所要做的就是检查"@ Model.NodeTypeAlias",我是金色的.帽子给你先生... (3认同)