2009-04-24 60 views
10

我在sitecore中的数据模板dt1在“数据”部分有字段“标题”。 我还有数据模板dt2,在“门户”部分有字段“标题” 最后,我有数据模板dt3,它同时使用dt1和dt2作为基本模板。Sitecore:如何在不同部分访问相同的字段名称

我该如何在xslt中找到portal/header的内容?我写了< sc:text field =“header”/ >,我得到了data/header的内容(因为这个节点先来了)。 我知道如何在.net中做到这一点,但我需要使用xslt。

/callprat

+0

当询问如何构成一个特定的XPath表达式在XML文档中选择特定的节点的一个必须提供XML文档本身。请提供您想从中选择节点的XML文档。另外,请准确地描述您需要选择哪些节点。 – 2009-04-24 13:27:12

+1

谢谢,但那是问题之一,我不知道xml是什么样子。 我注意到我的问题的代码部分没有显示,我已经编辑了,现在你可以看到我正在使用一个sitecore自己的xslt。 如果有人知道一种方法来查看sitecore-xml,这可能也会有所帮助。 – Callprat 2009-04-24 13:56:37

回答

5

你不能。

坦率地说,我不知道任何从.NET支持的方式。

此,直出Data Definition Reference的,第2.1.1节

2.1.1数据模板字段

数据模板字段定义了用户 接口控制和其它性质 影响如何字段在内容编辑器和页面编辑器中表现为 。 有关字段的更多信息,请参阅 第4章,模板字段。

注意定义字段名称时,请确保 即使在 字段部分之间它们也是唯一的。代码仅使用字段名称,而不使用 对部分的引用,以便从字段中提取 内容。

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问题的方法。客户端建立的模板之一是具有不同字段的“桶”,但桶之间的字段是相同的。我使用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; 
相关问题