0

もちろん、Umbracoの初心者です。

特定のノードIDの特定のデータ型の内容を返すコードがあります。詳細は次のとおりです。

umbraco API:特定のサイトノードのドキュメントタイプデータを取得しようとしています

それは問題なく動作しますが、開始ノード、つまり私の場合はサイトノードID(マルチサイトumbracoインストール)を知っている必要があります。

また、次の方法でマスタールートノードを取得できることも知っています。

Umbraco-C#でルートノードを見つける

私の質問はこれです...

バックエンドAPIから、現在のサイトノードID(最初のリンク)を動的に取得する方法はありますか?これは、事前に知る必要がないためです。クエリ文字列からサイトIDを取得するオプションがあると思います。Pag​​e.Request.QueryString["id"]ただし、ページがテンプレートページの場合はこれが返されると思いますが、これはバックエンドクラスからのものですか?

とにかくありますか?または私は間違った木を吠えています!??

どんな助けでもいただければ幸いです!!

4

2 に答える 2

3

それぞれのホームページとページを持つ2つのサイトを持つUmbracoのインストールがあるとします。

  • コンテンツ(-1)
    • ホームページ1(1000)
      • ページ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で始まるコンマ区切りの整数の文字列を返します。つまり、ルート、つまり、すべてのホームページが「ライブ」である、呼び出したマスタールートを返します。

たとえば、ページ2.1のパス値は「-1,1002,1003」です。カンマで分割すると、0、1、2のインデックスが付けられた3つの要素を持つ配列になります。ここで、インデックス1の2番目のノードは、ホームノードのIDを示します。ご覧のとおり、最後のIDは現在のノードのIDです。余談ですが、インデックスはノードのレベルも示しているため、ホームページのレベルは1です。

イントラネット/エクストラネットで使用され、ページが保護されているテンプレートで次のスクリプトを使用しました。訪問者が保護されたページへのリンクをたどると、アクセスが拒否され、メンバーログインのあるホームページにリダイレクトされます。

<%@ 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> 
于 2013-01-08T15:56:46.883 に答える
1

すべてのルートノードが同じドキュメントタイプであると仮定すると、かみそりでは次のようなことができます。

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

これは、現在のノード「上」または「逆」から、指定されたタイプのノードタイプに到達するまで検索します。

別の方法はここで利用できます:

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

于 2012-10-01T23:16:55.183 に答える