我觉得这是一个关于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)
以防万一有人问。
答案 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。