Встраивание шаблонов в заголовочный файл на основе категорий - PullRequest
0 голосов
/ 28 марта 2012

Я использую ExpressionEngine 2.2.1 и пытаюсь создать условное выражение, при котором на странице будет отображаться определенный шаблон навигации в зависимости от категории страницы.Например, я создаю публичный профиль для кого-то, кто участвует в конкурсе в Лондоне.Когда кто-то посещает его профиль, мне бы хотелось, чтобы на странице отображался не только его профиль, но и баннер с изображением Лондона и навигацией, характерной для лондонского конкурса.Я хотел бы сделать это, добавив условное обозначение с категориями, поскольку у нас так много конкурентов во многих разных городах.Я создал категорию под названием «Лондонские конкуренты на английском языке», и у нее есть идентификатор «56».После того как я создал профиль конкурента в EE, я выбираю категорию «Лондонские конкуренты на английском», однако при переходе на страницу загружается шаблон навигации по умолчанию, а не шаблон Лондона.Я создал код на основе своего исследования и наиболее похожего примера: http://expressionengine.com/forums/viewthread/185555/. Что я не так понял в своем коде?:

ФАЙЛ ОДИН: (сокращенная часть) Competitor_profiles_en / index.html где "Competitor_profiles_en" - это шаблон:

{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} 

ФАЙЛ ВТОРОЙ: (сжатая часть) моего файла header.html:

{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}

Ответы [ 2 ]

0 голосов
/ 28 марта 2012

Ответ Дерека был точен, и я хотел бы остановиться на моем методе претворения его предложения в жизнь.

Я нашел информацию о фрагментах здесь http://expressionengine.com/user_guide/templates/globals/snippets.html и посмотрел этот учебник здесь http://www.youtube.com/watch?v=AEEudo0BrRA&feature=related. Затем я создал фрагмент на панели управления (Дизайн> Шаблоны> Фрагменты), который включал весь код, который был в заголовочном файле и назвал его snippet_header_en. Поскольку ExpressionEngine включает фрагменты как часть шаблона, в котором они находятся, EE распознал мои условия, включая категории, которые я создал. Вот пересмотренный код:

ФАЙЛ ОДИН: (сокращенная часть) Competitor_profiles_en / index.html, где "Competitor_profiles_en" является шаблоном:

{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} 

ФАЙЛ ВТОРОЙ: (сжатая часть) моего файла header.html: Как упоминалось ранее, я переместил этот код в раздел фрагмента панели управления EE.

0 голосов
/ 28 марта 2012

Проблема в том, что встраивания обрабатываются после всех других тегов, в совершенно отдельном процессе.Поэтому, когда ваш includes/header встраивается, у него нет категорий, о которых можно говорить, потому что он на самом деле не работает внутри тега Channel Entries.

Если вам не нужно передавать переменные в includes/header (чего вы не делаетепохоже, что здесь делают, но вы, возможно, удалили это для простоты), я бы вместо этого переместил ваш includes/header во фрагмент, чтобы он обрабатывался в соответствии с вашим тегом Записи канала.

...