2012-05-26 5 views
6

Ho creato diverse pagine per tutte queste categorie: libri, cellulari, comp, ecc. Ora voglio mettere questo tipo di menu di navigazione (come mostrato in figura) in tutte le pagine e aprire una pagina dovrebbe evidenziare il link del menu corrispondente.Come si crea un menu di navigazione per pagine diverse in SDL Tridion?

Devo creare uno schema che contiene testo e un collegamento e renderlo multivalore? Allora, creo un componente e infine li renderò in tutte le pagine?

In caso contrario, suggerire qualsiasi altro approccio migliore per farlo.

enter image description here

risposta

5

Se si utilizza ASPX come tipi di pagina, di seguito è descritto altra logica per la navigazione:

  1. Creare uno xml navigazione (contiene tutte le pagine) con le informazioni importanti pagine (ID, percorso, titolo ...)

  2. Crea controllo ascx che genererà breadcrumb o qualsiasi altra navigazione. Come controllo parametro dovrebbe recuperare corrente ID pagina

  3. Modifica pagina DWT (mettendo il controllo ascx)

In questo modo si diminuisce il rendering (editoria), la navigazione sarà resa su caricamento della pagina. Sfortunatamente aumenti il ​​tempo di caricamento della pagina in questo modo. Dipende dal tuo bisogno qual è la soluzione più appropriata per te. L'aggiornamento di XML di navigazione è uno dei problemi di questo approccio ....

9

Il modo più comune per generare qualsiasi navigazione in Tridion è quello di generare semplicemente in un template C# in base ai gruppi di struttura e pagine.

Per esempio, un filo di Arianna può essere facilmente generato all'interno di un modello (o un C# frammento o una classe che implementa ITemplate) da qualcosa di simile:

var pageDocument = package.GetByType(ContentType.Page).GetAsXmlDocument(); 
var current = new Page(pageDocument.DocumentElement, engine.GetSession()); 
var breadcrumb = page.Title; 
while (current.OrganizationalItem != null) 
{ 
    current = current.OrganizationalItem; 
    breadcrumb = current.Title + " > " + breadcrumb; 
} 
package.PushItem("breadcrumb", 
       package.CreateStringItem(ContentType.Text, breadcrumb)); 

Il frammento sopra in realtà dimostra solo come navigare verso l'alto nella gerarchia dei gruppi di strutture. Dovrai comunque rendere ogni gruppo di strutture come un collegamento, probabilmente guardando la proprietà PublishUrl di ogni StructureGroup.

So che non stavi chiedendo di una traccia di briciole di pane, la tua sembra più una sinistra. Ma l'approccio per tutti gli elementi di navigazione è simile: attraversa le pagine e i StructureGroup pertinenti usando TOM.NET nel tuo ITemplate e genera il tuo HTML di navigazione da quello.

per ottenere un elenco di tutte le pagine del StructureGroup corrente (e segnare quello attuale), mi aspetto qualcosa di simile:

var pageDocument = package.GetByType(ContentType.Page).GetAsXmlDocument(); 
var current = new Page(pageDocument.DocumentElement, engine.GetSession()); 
var sg = (StructureGroup) page.OrganizationalItem; 
string result = "<ul>"; 
foreach (var page in sg.GetItems()) 
{ 
    result += (page.Id != current.Id) ? "<li>" : "<li class='selected'>"; 
    result += page.Title; 
    result += "</li>"; 
} 
result += "</ul>"; 
package.PushItem("siblings", package.CreateHtmlItem(result)); 

Si prega inoltre di vedere this great example from Nick where he generates an entire sitemap. Questo è più vicino a quello che ti servirà alla fine, ma è ovviamente molto più codice (troppo da riprodurre qui). Albert ha anche condiviso alcune delle his experience with this approach and mentions the alternatives.