2012-05-26 10 views
6

Ich habe verschiedene Seiten für alle diese Kategorien erstellt: Bücher, Handys, Comp usw. Nun möchte ich diese Art von Navigationsmenü (wie in Abbildung gezeigt) auf allen Seiten einfügen und beim Öffnen einer Seite sollte der entsprechende Menülink hervorgehoben werden.Wie erstelle ich ein Navigationsmenü für verschiedene Seiten in SDL Tridion?

Sollte ich ein Schema erstellen, das Text und einen Link enthält und es mehrwertig macht? Also dann erstelle ich eine Komponente und render sie schließlich auf allen Seiten?

Wenn nicht, schlagen Sie bitte einen anderen besseren Ansatz vor.

enter image description here

Antwort

5

Wenn Sie ASPX als Seitentypen verwenden, unter anderer Logik wird für die Navigation beschrieben:

  1. Erstellen einer Navigations xml (enthält alle Seiten) mit wichtigen Seiten info (ID, Pfad, Titel ...)

  2. Erstellen Sie Ascx-Steuerelement, das Breadcrumb oder andere Navigation generieren wird. Als Parameter Steuerstrom Seite ID

  3. ändern Seite DWT (Platzierung ascx Kontrolle)

Auf diese Weise abrufen, sollten Sie (publishing) Zeit abnehmen Rendering, wird die Navigation auf das Laden der Seite gerendert werden. Leider erhöht sich dadurch die Seitenladezeit. Es hängt von Ihrem Bedarf ab, welche Lösung für Sie am geeignetsten ist. Erfrischende Navigation XML ist eines der Probleme dieses Ansatzes ....

9

Die häufigste Art und Weise jede Navigation in Tridion zu erzeugen, ist es einfach in einer auf die Struktur-Gruppen und Seiten auf Basis C# Vorlage zu erzeugen.

Zum Beispiel ein Brotkrumen kann leicht aus einer Vorlage erstellt werden (entweder ein C# Fragment oder eine Klasse ITemplate Implementierung) durch etwas wie folgt aus:

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)); 

Das obige Fragment wirklich nur zeigt, wie man Navigieren Sie in der Hierarchie der Strukturgruppen nach oben. Sie müssen immer noch jede Strukturgruppe als einen Link machen, wahrscheinlich indem Sie PublishUrl Eigenschaft von jedem StructureGroup betrachten.

Ich weiß, dass Sie nicht nach einer Brotkrumenspur gefragt haben, Ihre sieht mehr wie ein Linksnav. Der Ansatz für alle Navigationselemente ist jedoch ähnlich: Durchqueren Sie die relevanten Seiten und Strukturgruppen mit dem TOM.NET in Ihrer ITemplate und generieren Sie daraus Ihren Navigations-HTML.

Um eine Liste aller Seiten im aktuellen StructureGroup bekommen (und das aktuelle markieren), würde ich so etwas wie dies erwarten:

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)); 

Bitte beachten Sie auch this great example from Nick where he generates an entire sitemap sehen. Das ist näher an dem, was Sie am Ende brauchen werden, aber es ist natürlich viel mehr Code (zu viel, um hier zu reproduzieren). Albert teilte auch einige von his experience with this approach and mentions the alternatives.