2009-04-24 12 views
10

"data"セクションに "header"フィールドがあるsitecoreにデータテンプレートdt1があります。 私はまた、 "ポータル"セクションに "header"というフィールドを持つデータテンプレートdt2を持っています 最後に私はdt1とdt2の両方を基本テンプレートとして使用するデータテンプレートdt3を持っています。Sitecore:異なるセクションで同じフィールド名にアクセスする方法

xsltでポータル/ヘッダーのコンテンツを見つけるにはどうすればよいですか?

私のコードでは、< sc:text field = "header"/>と書くと、(このノードが最初に来るので)データ/ヘッダーの内容を取得します。 私はこれを.netで行う方法を知っていますが、私はxsltを使う必要があります。

/callprat

+0

1は、XML文書自体を提供しなければならないXML文書内の特定のノードを選択するために、特定のXPath式を構成する方法を尋ねたとき。ノードを選択するXMLドキュメントを提供してください。また、どのノードを選択する必要があるかを正確に記述します。 –

+1

ありがとう、それは問題の1つですが、私はXMLがどのように見えるのかわかりません。 私の質問のコード部分が表示されていないことに気がつきました。私はそれを編集しました。そして、あなたが今見ているように、私はxsltのsitecore自身のvesionを使用しています。 誰かがsitecore-xmlを見る方法を知っている場合、これはおそらく役に立ちます。 – Callprat

答えて

5

できません。

そして、率直に言って、私は.NETからそれを行うためのサポートされた方法も知らない。

この直Data Definition Referenceのうち、セクション2.1.1

2.1.1データ・テンプレートフィールド

データテンプレートフィールドがどのように影響を与えるユーザ インタフェース制御およびその他のプロパティを定義 フィールドエディタとページエディタで が動作します。 フィールドの詳細については、 第4章「テンプレートフィールド」を参照してください。

注意フィールド名を定義するときは、 フィールドセクション間でも一意であることを で確認してください。 XSLTおよび.NET コードではフィールド名のみを使用し、 セクションを参照せずにフィールドから コンテンツを抽出します。

+3

これはAPIで実行できます。セクションIDの下でフィールドIDを探すだけで、フィールドIDを見つける必要があります。それを使ってフィールド値を取得することができます。 – misteraidan

5

あなたはそのIDでフィールドを参照することができます

のC#:

string value = item["{00000000-0000-0000-000000000000}"]

または

Field field = item.Fields["{00000000-0000-0000-000000000000}"]

私はこれを試していないが、私はそれを考えますXSLTでも同様に動作します:

<sc:text field="{00000000-0000-0000-000000000000}" />

9

私が取り組んでいるプロジェクトでは、これを回避する方法を.Netで見つけました。クライアントが設定したテンプレートの1つに、異なるフィールドセクションを持つ「バケット」がありましたが、バケット間のフィールドは同じです。私はLINQを使用してフィールドをセクション名でグループ化し、各フィールドのグループを処理しました。

var sections = currentItem.Fields.GroupBy(field => field.Section); 
foreach (var section in sections) 
{ 
    if (section.Key.StartsWith("Bucket")) 
    { 
     buckets.Add(new Bucket(section)); //I made a bucket item, 
              //and passed each IGrouping<Field> to it 
    } 
} 
8
item.Fields.Where(field => field.Section.ToUpper() == "META DATA" && 
          field.DisplayName.ToUpper() == "TITLE").First().Value;