假设您有一个 Umbraco 安装,其中包含两个站点,它们各自的主页和页面,例如
在 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>