web-dev-qa-db-ja.com

Umbraco AncestorOrSelf(int)-それは何をしますか?

使用する場合:

@Model.AncestorOrSelf(3)

Umbracoの.cshtmlテンプレートでは、これにより、ノードトラバーサルが3レベルに制限されます。これは正しいですか、そうであれば、現在のノードのインデックスがゼロかどうかを誰もが確認できますか?

17
Chris Halcrow
_@Model.AncestorOrSelf(3)
_

Model.Contentは、現在のページです。 AncestorsOrSelfは、このページがツリー内に持つすべての祖先です。 (レベル)は:レベル1/2/3/...に上がり、そこに到達したら先祖を探すのをやめます。

上記は、Umbraco 7.x rcバージョンで得られるコメントです

Umbraco管理領域のコンテンツセクションに通常表示されるコンテンツツリーに似たコンテンツツリーの例を見てみましょう。

各コンテンツドキュメントにはレベルがあり、デフォルトでは1から始まります。

Umbracoの.cshtmlテンプレートでは、これにより、ノードトラバーサルが3レベルに制限されます。

以下の例でわかるように、レベルは増加します-レベル+1。したがって、レベルは1から始まり、サブレベルに1を追加します。

_- Content
 -- Home (level = 1)
   -- About Us (level = 2)
   -- Contact Us (level = 2)
   -- News Area (level = 2)
     -- News Item 1 (level = 3)
     -- News Item 2 (level = 3)
 -- Other Node (level = 1)
_

したがって、AncestorOrSelfのパラメーターとして3を言及する場合、ドキュメント/部分ビューである可能性のある現在の要素からツリーの3番目のレベルに移動し、それが見つかったときに祖先の検索を停止することを要求しています。

AncestorOrSelf(level)は、DynamicPublishContentタイプの場合、ID、名前、URLなどの多くのプロパティにアクセスできる単一のアイテムを返します。

_@CurrentPage.AncestorOrSelf(1)
// based on content structure above, the above statement will give you an item - Home.
_

基本的には、レベルごとに祖先を取得するためのものであり、現在のレベルやcurrentpageオブジェクトが何であるかは関係ありません。

たとえば、メインレイアウトにナビゲーションを作成して、サイトのすべてのページでナビゲーションを共有したい場合は、テンプレートで次のようにします。

_<ul>
 @foreach(var page in @CurrentPage.AncestorOrSelf(1).Children)
 {
   <li><a href="@page.Url">@page.Name</a></li>
 }
</ul>
_

私たちの例に基づいて、それはあなたに与えるでしょう:

私たちについて、お問い合わせ、ニュースエリア(リスト形式と適切なリンク付き)

35

SiddharthPからの回答に追加すると、OPは@ CurrentPage.Up(int)メソッドを探している可能性があると思います。これは、指定されたレベルの量だけ現在のレベルからツリーを上に移動します。

したがって、現在のノードの祖父が必要な場合-厳密に型指定されたバージョンの@ CurrentPage.Up(2)または@ Model.Content.Up(2)。

先祖はコンテンツツリーのルートから始まり、上へはルートに向かっているところから始まります。

混乱を招くのは、あなたがCurrentPageオブジェクトを使用しているが、トップルートノードからCurrentPageに向かってトラバースを開始することだと思います。人類の祖先について考えるとき、私たちは時間の始まりから始めません!

0
cheesey_toastie