Umbraco AncestorOrSelf(内部)-它的功能是什么?

Umbraco AncestorOrSelf(内部)-它的功能是什么?,umbraco,Umbraco,使用时: @Model.AncestorOrSelf(3) 在Umbraco中的.cshtml模板中,这可能会将节点遍历限制为3个级别。这是否正确,如果正确,是否有人也可以确认当前节点的索引是否为零?如果我对代码的理解正确,.anteStororself(int)返回参数中给定级别的节点的祖先(或自我) 摘自第948行和第956行 public DynamicNode AncestorOrSelf(int级别) { 返回antestorself(node=>node.Level==Level)

使用时:

@Model.AncestorOrSelf(3)

在Umbraco中的.cshtml模板中,这可能会将节点遍历限制为3个级别。这是否正确,如果正确,是否有人也可以确认当前节点的索引是否为零?

如果我对代码的理解正确,.anteStororself(int)返回参数中给定级别的节点的祖先(或自我)

摘自第948行和第956行

public DynamicNode AncestorOrSelf(int级别)
{
返回antestorself(node=>node.Level==Level);
}
公共动态代码AncestorOrSelf(Func Func)
{
如果(func(this))返回此;
var内容=此;
虽然(内容>1)/ /当我们有父母时,考虑父母。
{
//请参见中的注释。家长-奇怪的事情可能会发生
var parent=content.parent;
if(parent==content)返回null;
内容=父母;
if(功能(内容))
返回内容;
}
返回null;
}
希望我正确地理解了这一点,这会有所帮助

@Model.AncestorOrSelf(3)
模型。内容是我们当前所在的页面ANCESTORSOR或SELF就是全部 此页在树中包含的祖先的(级别)表示:上升到 级别1/2/3/。。。等你长大了,别再找祖先了 在那里

以上是您对Umbraco 7.x rc版本的评论

以下面的内容树为例,它与您通常在umbraco管理区域的内容部分中看到的内容树类似:

每个内容文档都有一个级别,默认情况下以1开头。

在Umbraco中的.cshtml模板中,这可能会限制节点 遍历到3个级别

正如您在下面的示例中所看到的,级别将不断增加-级别+1。所以,它从1开始,然后继续向子级别添加1

- Content
 -- Home (level = 1)
   -- About Us (level = 2)
   -- Contact Us (level = 2)
   -- News Area (level = 2)
     -- News Item 1 (level = 3)
     -- News Item 2 (level = 3)
 -- Other Node (level = 1)
因此,当您提到3作为AncestorOrSelf的参数时,您要求从当前元素(可以是任何文档/局部视图)移动到树中的第三级,并在找到它时停止寻找任何其他祖先

AncestorOrSelf(level)
返回一个项目,如果该项目的类型为DynamicPublishContent,即您可以访问许多属性,如id、名称、url等

@CurrentPage.AncestorOrSelf(1)
// based on content structure above, the above statement will give you an item - Home.
它基本上是用于按级别获取祖先,与当前级别或currentpage对象无关

例如,如果您希望在主布局中创建导航,以便在站点的所有页面上共享导航,您将在模板中执行以下操作:

<ul>
 @foreach(var page in @CurrentPage.AncestorOrSelf(1).Children)
 {
   <li><a href="@page.Url">@page.Name</a></li>
 }
</ul>
    @foreach(@CurrentPage.AncestorOrSelf(1.Children)中的变量页) {
  • }
根据我们的示例,它将为您提供:


关于我们,联系我们,新闻区(以列表形式和适当的链接)

添加到SiddharthP的答案中,我认为OP可能正在寻找@CurrentPage.Up(int)方法-这是从当前级别向上遍历树的指定级别

因此,如果您希望当前节点的祖父@CurrentPage.Up(2)或@Model.Content.Up(2)用于强类型版本

将其视为祖先从内容树的根开始,向下和向上从您走向根的地方开始


我认为令人困惑的是,您使用了CurrentPage对象,但开始从上根节点向CurrentPage进行遍历。当我们想到我们人类的祖先时,我们不是从时间开始的

我已经更新了我的答案,用一个例子来解释更多关于你的问题。我相信v7.2在Up方法上有一个bug。立即报告-小心使用!在过去的几个月里,我看了很多次这篇文章,只是注意到没有一个
祖先()
,它实际上是
祖先()
祖先()
,等等-请注意
祖先
@RobScott结尾的“s”,我在2013年11月发布了我的答案。该成员在以前的版本中可用。也许随着时间的推移它已经改变了。你用的是V6还是别的什么?你说得对,很抱歉。我一直在v6上工作,正在看备忘单。v7使用单数形式。我道歉。
<ul>
 @foreach(var page in @CurrentPage.AncestorOrSelf(1).Children)
 {
   <li><a href="@page.Url">@page.Name</a></li>
 }
</ul>