假設你有一把umbraco安裝有兩個網站各自的主頁和頁面,如
可以與
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>
嗨,謝謝你的回覆!對於Umbraco來說是相當新穎的事情,需要一段時間才能理解很多細節部分......所以沒有想到向上遍歷一個特定的節點類型..我猜測會是這種情況..不幸的是,我是不使用Razor頁面..實際上,我有一個ASHX頁面,它調用一些後端代碼來計算邏輯內容(使用Umbraco API調用),然後ASHX頁面將輸出作爲JSON提供給Umbraco中託管的純HTML/JS頁面模板。 我會檢查其他鏈接 - 但你的意見至少給了我這個想法謝謝 –