2009-04-24 1 views
10

Ho template dati dt1 in sitecore che ha il campo "header" nella sezione "data". Ho anche il modello dati dt2 che ha il campo "intestazione" nella sezione "portale" Infine ho il modello dati dt3 che utilizza sia dt1 che dt2 come modelli di base.Sitecore: Come accedere allo stesso nome di campo in diverse sezioni

Come posso, in xslt, trovare il contenuto del portale/intestazione?

Nel mio codice, quando scrivo < sc: campo di testo = "intestazione"/>, ottengo il contenuto di dati/intestazione (poiché questo nodo viene prima). So come farlo in .net, ma ho bisogno di usare xslt.

/callprat

+0

Quando si chiede come comporre una particolare espressione XPath per selezionare nodi specifici in un documento XML si deve fornire il documento XML stesso. Si prega di fornire il documento XML dal quale si desidera selezionare i nodi. Inoltre, descrivere bene esattamente quali nodi è necessario selezionare. –

+1

Grazie, ma quello è uno dei problemi, non so come sia l'xml. Ho notato che la parte del codice della mia domanda non veniva mostrata, l'ho modificata e, come ora è possibile vedere, sto usando la vesione di xslt di un sitecore. Se qualcuno conosce un modo per visualizzare il sitecore-xml, questo probabilmente aiuterà anche. – Callprat

risposta

5

Non è possibile.

E francamente non conosco alcun modo supportato per farlo da .NET.

Questo, direttamente fuori dalla Data Definition Reference, sezione 2.1.1

2.1.1 modello di dati campi campo modello

A dati definisce il controllo interfaccia utente e altre proprietà che influenzano come il campo si comporta nell'editor di contenuto e nell'editor di pagine. Per ulteriori informazioni sui campi, vedere Capitolo 4, Il campo Modello.

Nota Quando si definiscono i nomi dei campi, assicurarsi che siano univoci anche tra le sezioni di campo . Sia il codice XSLT e .NET utilizzano solo i nomi dei campi, senza il riferimento alle sezioni, per estrarre il contenuto da dai campi.

+3

Puoi farlo con l'API. Hai solo bisogno di trovare l'ID dei campi, cercandolo sotto le informazioni sulla sezione. Puoi quindi usarlo per ottenere il valore del campo. – misteraidan

5

È possibile fare riferimento ai campi da loro ID:

C#:

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

o

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

Non ho provato questo, ma penso che Lavorerò anche in XSLT:

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

9

Ho trovato un modo per aggirare questo in. Net su un progetto su cui stavo lavorando. Uno dei modelli che il client aveva impostato aveva "Secchi" che avevano sezioni di campo diverse, ma i campi all'interno erano gli stessi tra i bucket. Ho usato LINQ per raggruppare i campi in base al nome della sezione, quindi trattato con ciascun raggruppamento di campi.

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;