2012-09-28 33 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> 
相關問題