C#剃刀查询-使用Umbraco V7,如何检查当前页面是否在任何1级内容树节点中作为子项存在?

问题描述 投票:0回答:1

我有四个用于各种文化和主机名的家庭节点,它们在我的内容树中均为1级。

我正在检查当前页面是否在两个节点中的一个子项中存在,如果显示,则显示链接,特别是hreflang标记。 (并非所有子页面都存在于每个节点上)

到目前为止,我一直在尝试创建foreach循环来循环通过,它是子项,但是到目前为止,它只返回1级的子项。

IPublishedContent homeOne = Umbraco.TypedContent(1172);
IPublishedContent homeTwo = Umbraco.TypedContent(6093);
IPublishedContent homeThree = Umbraco.TypedContent(7886);
IPublishedContent homeFour = Umbraco.TypedContent(9679);

var pageUrl = CurrentPage.Url().ToString();

foreach (var item in homeOne.Children)
{
    var pagePath = item.Url.ToString();


    if (pagePath == pageUrl)
    {
        <link rel="alternate" href="@string.Format("https://www.domain.xx{0}", pagePath)" hreflang="x-default" />
        <link rel="alternate" href="@string.Format("https://www.domain.xx{0}", pagePath)" hreflang="en-gb" />
    }
}

然后我在其他家庭节点的下面有三个类似的foreach循环,有趣/讨厌...如果我在homeOne的子页面上,我只会看到为homeOne生成的链接,但是如果我去一个孩子, homeTwo的页面我看到了为homeOne和homeTwo生成的链接。随后访问homeThree返回仅homeOne和homeThree的链接。

edit

我要重申,这四个根节点已经设置了区域性和主机名,并且都使用相同的语言。我只是试图查看当前页面是什么,并检查它是否存在于四个根节点中的一个或全部中,如果显示,则显示相关链接

希望有人可以指出正确的方向

谢谢

c# asp.net razor umbraco7
1个回答
0
投票

CurrentPage应该具有一个Path属性,其中包含每个祖先的ID。我相信这是一个可以用','分割的字符串,然后查看结果数组是否包含两个homeNode ID。像这样的东西:https://coderwall.com/p/gl7poa/active-navigation-in-umbraco

不过,从您的代码示例中,我无法真正弄清楚您要做什么。如果您尝试运行经典的多语言设置,请看一下本教程-像这样进行设置(使用每种语言的域名/主机名)可以让Umbraco解决很多麻烦:https://our.umbraco.com/Documentation/Tutorials/Multilanguage-Setup/index-v7

© www.soinside.com 2019 - 2024. All rights reserved.