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.
fonte
2012-05-26 11:59:58