2012-03-27 15 views
0

Ich verwende ExpressionEngine 2.2.1 und versuche, eine Bedingung zu erstellen, die eine Seite eine bestimmte Navigationsvorlage basierend auf der Kategorie der Seite zeigen wird. Zum Beispiel erstelle ich ein öffentliches Profil für jemanden, der an einem Wettbewerb in London teilnimmt. Wenn jemand sein Profil besucht, möchte ich, dass die Seite anzeigt, nicht nur sein Profil, sondern auch ein Banner mit einem Bild von London & Navigation, die spezifisch für den Londoner Wettbewerb ist. Ich würde das gerne tun, indem ich eine bedingte Kategorie hinzufüge, da wir in vielen verschiedenen Städten so viele Konkurrenten haben. Ich habe eine Kategorie mit dem Titel "London Competitors English" erstellt und sie hat die ID "56". Sobald ich das Profil des Teilnehmers in EE erstellt habe, wähle ich die Kategorie "London Competitors English" aus. Wenn ich jedoch auf die Seite gehe, wird die Standard-Navigationsvorlage geladen und nicht die London-Vorlage. Ich habe einen Code basierend auf meiner Forschung und dem am meisten verwandten Beispiel hier erstellt: http://expressionengine.com/forums/viewthread/185555/. Was ich in meinem Code falsch habe ?:Einbetten von Vorlagen in die Header-Datei basierend auf Kategorien

FILE ONE: (kondensierten Teil) competitor_profiles_en/index.html wo "competitor_profiles_en" ist die Vorlage:

{exp:channel:entries limit="1" url_title={segment_2} } 
{embed="includes/header"} 
<div class="xx">  
<h2>{competitor_first_name}<br>{competitor_last_name}</h2>  
... 
</div> 
{/exp:channel:entries} 

FILE ZWEI: (Kurzfassung Teil) meine header.html Datei:

{if segment_1 == 'home'} 
{embed="includes/_nav_landing"} 
{if:elseif "{categories}{category_id}{/categories}" == "56"} 
{embed="includes/_nav_city_lon_en"} 
{if:else} 
{embed="includes/_nav_internal"} 
{/if} 

Antwort

0

Das Problem ist, dass bettet, nachdem alle anderen Tags verarbeitet werden, in einem völlig separaten Prozess. Wenn Ihr includes/header Embed also läuft, gibt es keine Kategorien, über die Sie sprechen könnten, da es nicht innerhalb eines Channle Entries Tags läuft.

Sofern Sie keine Variablen an includes/header übergeben müssen (die Sie hier nicht zu tun scheinen, aber zur Vereinfachung entfernt haben), würde ich Ihre includes/header stattdessen in ein Snippet verschieben, damit sie verarbeitet wird Inline mit dem Tag "Kanaleinträge".

0

Dereks Antwort war genau richtig, und ich würde gerne meine Methode erläutern, wie ich seinen Vorschlag in die Tat umsetzen kann.

Ich habe hier Informationen über Snippets gefunden http://expressionengine.com/user_guide/templates/globals/snippets.html und sah dieses Tutorial hier http://www.youtube.com/watch?v=AEEudo0BrRA&feature=related. Ich habe dann ein Snippet in der Systemsteuerung erstellt (Design> Templates> Snippets), das den gesamten Code enthielt, der in der Header-Datei enthalten war und ihn mit snippet_header_en betitelte. Da ExpressionEngine Snippets als Teil der Vorlage enthält, in der sie sich befinden, hat EE meine Bedingung einschließlich der von mir erstellten Kategorien erkannt. Hier ist der überarbeitete Code:

FILE ONE: (kondensierter Teil) competitor_profiles_en/index.html wo "competitor_profiles_en" ist die Vorlage:

{exp:channel:entries limit="1" url_title={segment_2} } 
{snippet_header_en} 
<div class="xx">  
<h2>{competitor_first_name}<br>{competitor_last_name}</h2>  
... 
</div> 
{/exp:channel:entries} 

FILE ZWEI: (kondensierter Teil) meine header.html file: Wie bereits erwähnt, habe ich diesen Code in den Snippet-Abschnitt der EE-Systemsteuerung verschoben.