2012-09-28 31 views
0

当然一把umbraco新手..有没有办法通过umbraco中的api返回当前网站节点ID?

我有一些代码,返回一个特定的数据类型为内容,这是这里详细的给定节点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(第一个链接)?这是所以我不必提前知道它。我认为有一个选项可以从querystring获取网站ID .. Page.Request.QueryString [“id”]但是我猜这是返回,如果页面是模板页面,但是这是从后端类?

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

任何帮助将不胜感激!

回答

1

假设所有rootnodes的是相同的文档类型,在剃须刀,你可以做这样的事情:

VAR folderId = @ Model.AncestorOrSelf( “MyFolderType”)身份证;

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

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

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

+0

嗨,谢谢你的回复!对于Umbraco来说是相当新颖的事情,需要一段时间才能理解很多细节部分......所以没有想到向上遍历一个特定的节点类型..我猜测会是这种情况..不幸的是,我是不使用Razor页面..实际上,我有一个ASHX页面,它调用一些后端代码来计算逻辑内容(使用Umbraco API调用),然后ASHX页面将输出作为JSON提供给Umbraco中托管的纯HTML/JS页面模板。 我会检查其他链接 - 但你的意见至少给了我这个想法谢谢 –

3

假设你有一把umbraco安装有两个网站各自的主页和页面,如

  • 内容(-1)
    • 主页1(1000)
      • Page 1.1(1001)
    • 首页2(1002)
      • 第2页。在C#可以与

        Node currentNode = Node.GetCurrent(); 
        

        和其相应归属节点来获得当前节点1(1003)

可以与

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

找到现在, currentNode.Path返回以-1开头的以逗号分隔的整数的字符串, 即根,即所谓的主根,在其下所有主页'生活'。

E.g.页面2.1的路径的值为“-1,1002,1003”。当用逗号分割时,最终会得到一个包含索引为0,1,2的3个元素的数组。现在,第二个,索引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> 
相关问题