11

我有一个关于 Umbraco 的非常简单的问题,但目前还没有明显的答案。

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

在我使用的模板中的某一时刻:

@Umbraco.RenderMacro("myCustomMacro");

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

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

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

现在在我看来,这应该像这样简单:

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

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

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

除了阅读 our-umbraco 上提到与 razor 和 @CurrentPage 变量有关的每一页之外,我已经阅读了 razor 属性备忘单,并尝试了似乎是最常见的属性,包括(没有具体命令):

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

以及它们的各种字母大小写组合,以及其他一些看起来可能符合要求的字母组合。

始终,这些属性要么不存在,要么为空,因此其中没有可用信息来帮助确定结果。

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

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

干杯

肖蒂

PS:忘了说,我正在使用

umbraco v 4.11.8(程序集版本:1.0.4869.17899)

以防万一有人问。

4

5 回答 5

21

在 Umbraco 7 中使用currentPageNode.DocumentTypeAlias

于 2014-07-29T13:51:31.280 回答
13

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

于 2014-12-19T12:11:45.690 回答
9

认为您确实需要每次在页面上访问页面属性(如 nodetypealias 和其他内容)时都需要创建一个节点,试试这个我的网站上具有相同类型的功能,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
          }
     }

让我知道这是否适合您。

于 2013-05-27T19:20:07.047 回答
1

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

var articles = CurrentPage.AncestorOrSelf(1).Descendants()
                   .Where("DocumentTypeAlias == \"BlogPost\"").OrderBy("CreateDate desc");
于 2015-01-19T09:03:11.870 回答
0

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

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

查询特定的DocumentType也很容易:

UmbracoHelper.AssignedContentItem.Descendants("NewsItem")

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

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

于 2015-11-17T12:19:39.213 回答