有没有办法通过umbraco中的api返回当前站点节点ID?

时间:2012-09-28 16:07:44

标签: c# api umbraco

当然是Umbraco新手..

我有一些代码返回给定节点id的某些数据类型内容,详见此处:

umbraco API: trying to get the document type data for a given site node

工作正常,但我必须知道起始节点,即在我的情况下是站点节点id(多站点umbraco安装)。

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

Umbraco - Finding Root Node in C#

我的问题是这个......

从后端API,无论如何都要动态获取当前站点节点ID(第一个链接)?这是我不必提前知道的。我认为有一个选项可以从查询字符串中获取网站ID .. Page.Request.QueryString [“id”]但是我猜这是在页面是模板页面时返回的,但这是来自后端类吗? / p>

还有吗?或者我正在咆哮错误的树! ??

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

2 个答案:

答案 0 :(得分:3)

假设你有一个Umbraco安装,其中有两个网站及其各自的主页和页面,例如

  • 内容(-1)
    • 主页1(1000)
      • Page 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开头, 即根,你所谓的主根,所有主页的“直播”。

E.g。第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> 

答案 1 :(得分:1)

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

  

var folderId = @ Model.AncestorOrSelf(“MyFolderType”)。Id;

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

另一种方式可以在这里找到:

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