La forma más común de generar cualquier navegación en Tridion es simplemente generar una plantilla en C# basado en los grupos de estructuras y páginas.
Por ejemplo, una ruta de navegación se puede generar fácilmente desde dentro de una plantilla (ya sea un fragmento C# o una clase que implementa ITemplate
) por algo como esto:
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));
El fragmento anterior en realidad sólo muestra cómo navegar por la jerarquía de grupos de estructuras hacia arriba. De todos modos, tendrá que hacer que cada grupo de estructuras sea un enlace, probablemente mirando la propiedad PublishUrl
de cada StructureGroup
.
Sé que no preguntabas por un rastro de migas, el tuyo se parece más a un leftnav. Pero el enfoque para todos los elementos de navegación es similar: atraviesa las páginas relevantes y StructureGroups utilizando TOM.NET en tu ITemplate y genera tu navegación HTML a partir de eso.
Para obtener una lista de todas las páginas en el StructureGroup actual (y marcan el actual), esperaría algo como esto:
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));
Por favor, vea también this great example from Nick where he generates an entire sitemap. Eso está más cerca de lo que necesitarás al final, pero por supuesto es mucho más código (demasiado para reproducir aquí). Albert también compartió algunos de his experience with this approach and mentions the alternatives.