2012-05-26 7 views
6

He creado diferentes páginas para todas estas categorías: libros, móviles, comp, etc. Ahora quiero poner este tipo de menú de navegación (como se muestra en la figura) en todas las páginas y abrir una página debe resaltar el enlace del menú correspondiente.¿Cómo creo un menú de navegación para diferentes páginas en SDL Tridion?

¿Debo crear un esquema que contenga texto y un enlace y hacerlo multivalor? Entonces, ¿creo un componente y finalmente los renderizo en todas las páginas?

Si no, sugiera cualquier otro mejor enfoque para hacerlo.

enter image description here

Respuesta

5

Si utiliza ASPX como tipos de página, a continuación se describe otra lógica para la navegación:

  1. Crear un xml de navegación (contiene todas las páginas) con información importante páginas (ID, ruta, título ...)

  2. Crea control de ascx que generará una ruta de navegación o cualquier otra navegación. Como control de parámetros debe recuperar la página actual ID

  3. Cambio página DWT (poniendo el control ascx)

En esta forma se disminuye el tiempo de procesamiento (editorial), la navegación se representará en la página de carga. Lamentablemente, aumenta el tiempo de carga de la página de esta manera. Depende de su necesidad, cuál es la solución más adecuada para usted. Refreshing navigation XML es uno de los problemas de este enfoque ...

9

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.

Cuestiones relacionadas