0

Umbraco 新手当然..

我有一些代码返回给定节点 ID 的特定数据类型内容,详细信息如下:

umbraco API:尝试获取给定站点节点的文档类型数据

这很好用,但是我必须知道起始节点,即在我的情况下是站点节点 ID(多站点 umbraco 安装)。

我也知道您可以通过以下方式获取主根节点:

Umbraco - 在 C# 中查找根节点

我的问题是这个...

从后端 API,是否有动态获取当前站点节点 ID(第一个链接)?这样我就不必提前知道了。我认为有一个选项可以从查询字符串中获取站点 ID.. Page.Request.QueryString["id"] 但是我猜如果页面是模板页面,则会返回这个,但是这是来自后端类?

到底有没有?或者我叫错树了!??

任何帮助,将不胜感激!!

4

2 回答 2

3

假设您有一个 Umbraco 安装,其中包含两个站点,它们各自的主页和页面,例如

  • 内容 (-1)
    • 主页 1 (1000)
      • 第 1.1 页 (1001)
    • 主页 2 (1002)
      • 第 2.1 页 (1003)

在 C# 中,当前节点可以通过

Node currentNode = Node.GetCurrent();

并且可以找到其对应的主节点

Node currentHome = new Node(int.Parse(currentNode.Path.Split(',')[1]));

现在,currentNode.Path返回一串以 -1 开头的逗号分隔整数,即根,即您所称的主根,所有主页都在其下“活动”。

例如,页面 2.1 的路径值为"-1,1002,1003"。在逗号处拆分时,您将得到一个包含 3 个元素的数组,索引为 0,1,2。现在,索引为 1的第二个将给出主节点的 id。可以看到,最后一个id就是当前节点的id。顺便说一句,索引还告诉节点的级别,所以主页的级别是 1。

我在用于 Intranet/Extranet 并具有受保护页面的模板上使用了以下脚本。当访问者点击指向受保护页面的链接时,他/她将被拒绝访问并被重定向到具有会员登录名的主页。

<%@ Master Language="C#" MasterPageFile="~/umbraco/masterpages/default.master" AutoEventWireup="true" %>    

<%@ Import Namespace="umbraco.NodeFactory" %>

<script runat="server" language="CSharp">
    protected void Page_Load(object sender, EventArgs e)
    {
        // prevents template to be run without proper authorisation
        Node currentNode = Node.GetCurrent();
        Node currentHome = new Node(int.Parse(currentNode.Path.Split(',')[1]));
        Boolean HasAccess = umbraco.library.HasAccess(currentNode.Id, currentNode.Path);
        Boolean IsProtected = umbraco.library.IsProtected(currentNode.Id, currentNode.Path);

        if (IsProtected && !HasAccess)
        {
            // redirect to ancestor-or-self::HomePage
            Response.Status = "403 Forbidden";
            Response.Redirect(umbraco.library.NiceUrl(currentHome.Id), true);
        }
    }
</script>      

<asp:Content ContentPlaceHolderID="ContentPlaceHolderDefault" runat="server">
    <!-- redirect to home page -->
</asp:Content> 
于 2013-01-08T15:56:46.883 回答
1

假设您所有的根节点都属于相同的文档类型,在 razor 中您可以执行以下操作:

var folderId = @Model.AncestorOrSelf("MyFolderType").Id;

它将从当前节点“向上”或“向后”搜索,直到找到指定类型的节点类型。

这里有另一种方法:

http://our.umbraco.org/forum/developers/api-questions/20742-Getting-the-home-node-using-c

于 2012-10-01T23:16:55.183 回答