10

サイトコアにデータテンプレートdt1があり、セクション「データ」に「ヘッダー」フィールドがあります。「ポータル」セクションに「ヘッダー」フィールドがあるデータテンプレートdt2もあります。最後に、ベーステンプレートとしてdt1とdt2の両方を使用するデータテンプレートdt3があります。

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

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

/ callprat

4

4 に答える 4

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
    }
}
于 2010-06-18T13:23:55.443 に答える
8
item.Fields.Where(field => field.Section.ToUpper() == "META DATA" && 
                           field.DisplayName.ToUpper() == "TITLE").First().Value;
于 2011-09-21T19:36:18.817 に答える
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}" />

于 2009-04-28T12:22:19.230 に答える
5

できません。

率直に言って、.NET からサポートされている方法も知りません。

これは、 Data Definition Referenceのセクション 2.1.1から直接引用したものです。

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

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

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

于 2009-04-25T00:48:43.853 に答える