2017-02-21 7 views
0

whoesの親がid = xxのアイテムを選択したいと考えています。Sitecoreで特定の親IDを持つアイテムを選択する方法

私はこのクエリ使用しています:

var mainSectionItem = 
      Sitecore.Context.Item.Axes.SelectSingleItem("./ancestor::*[@@parentid = '{E3C35E4C-B3D9-4153-B53E-E4004E76D768}']"); 

をしかし、私はnullを取得します。上記のコードで、@@parentid@@idに変更すると、MainItemが取得されます。ただ、明確化のために、これは私がやっているものです:

  • をMainItem [ID = {E3C35E4C-B3D9-4153-B53E-E4004E76D768}]
      • A1
      • A2
    • b
      • B1 A1またはA2から
      • B2

コンテキスト項目がB1やB2、私はこれは一例でアイテムBを取得したい、木であれば、私はAを取得したいとより深くすることができます。

+0

@@ parentidは有効な属性ではありません。あなたはtemplatename(またはid)を使用できませんか? – Gatogordo

答えて

0

私は正しいXPath構文を覚えていないが、おそらくのようなもの:

"./../[./../../[@id = '{E3C35E4C-B3D9-4153-B53E-E4004E76D768}']]"

./../ <-- one step up (A/B) は、 "if文" ようにbasicly

[./../..] - A1/A/MainItem[Who has X as ID] 

を[]を使用してください現在のノードの親が現在のノードの親の親がXの場合は、現在のノードの親を選択します。

構文が正しくオフになっています。考え方が助けになるかもしれません。幸運

0

Gatogordoがコメントで言うように、Sitecoreクエリ言語には@@parentidの特別な属性はありません。 parent::を軸として使うことができますが、XPathから期待されるものと比べて奇妙な動作をするので、私はそれを避ける傾向があります。 「適切な親項目を見つける」ための最も一般的なパターンは、おそらく正しいアイテムベースを見つけることです

Valid options

私の知る項目のコア属性をマッチングするための有効なオプションがありますそのテンプレートにそのテンプレートで物事を見つけると、コードがより柔軟になります。特定のアイテムが破壊されて再作成された場合(IDが変更される場合)、同じテンプレートで新しいコンテンツが作成された場合でも機能します。

あなたのクエリは、おそらくancestor::*[@@templateid='{template-guid-for-A-here}' or @@templateid='{template-guid-for-B-here}']のようなものである - それは、AとBが異なるテンプレートを持っていると仮定しても。両方が同じテンプレートを持っている場合は、2番目の@@templateid句を削除することができます。(あるいは、@@templatenameを使用することもできます)A & B項目とAx & Bxでクエリを動作させたい場合は、ここでancestor-or-self::軸を使用することもできます。

関連する問題