второй Edit ...
Увы, я не могу понять, хороший способ приблизиться к этому. В идеале вы бы создали общую группу полей, которая проходила по всем каналам, которые имели те же поля, которые вы хотите использовать (например, title_it, title_en и т. Д.). Затем вы могли отображать/скрывать поля как соответствующие, используя макеты публикации в EE, поэтому для каждого канала появляются только соответствующие поля. Таким образом, удаление проблемы с именем «channel_name» в имени поля.
Я пробовал играть с разными подходами к закладу, используя имя канала или идентификатор в качестве ключа, но все же он спотыкается о том, что вам нужно разобрать его дважды.
Это лучшие 2 идеи, которые я могу думать ...
Мусор решение один: Базовый подход:
<ul>
{exp:search:search_results search_in="everywhere"}
{if language_code =="it"}
<li>
<a href="{exp:replace_plus find='.com/' replace='.com/it/'}{auto_path}{/exp:replace_plus}">
{if {channel_name} == "A"}
{A_title_{language_code}}
</a> (trovato in {channel}) {A_body_{language_code}}
{if:elseif {channel_name} == "B"}
{B_title_{language_code}}
</a> (trovato in {channel}) {B_body_{language_code}}
{if:elseif {channel_name} == "C"}
{C_title_{language_code}}
</a> (trovato in {channel}) {C_body_{language_code}}
{/if}
</li>
{if:else}
<li>
{if {channel_name} == "A"}
<strong><h3><a href="{auto_path}">{A_title_{language_code}}</a></h3></strong> (from {channel}){A_body_{language_code}}
{if:elseif {channel_name} == "B"}
<strong><h3><a href="{auto_path}">{B_title_{language_code}}</a></h3></strong> (from {channel}){B_body_{language_code}}
{if:elseif {channel_name} == "C"}
<strong><h3><a href="{auto_path}">{C_title_{language_code}}</a></h3></strong> (from {channel}){C_body_{language_code}}
{/if}
</li>
{/if}
{/exp:search:search_results}
</ul>
Это, вероятно, будет лучше, если вы использовали Stashee.
Мусор Решение два: Вложить подход (вероятно, хуже, производительность, чем выше!):
Main (оригинал) шаблон
<ul>
{exp:search:search_results search_in="everywhere"}
{if language_code =="it"}
<li><a href="{exp:replace_plus find='.com/' replace='.com/it/'}{auto_path}{/exp:replace_plus}">{embed=crap/language-title entry_id="{entry_id}" channel_name="{channel_name}"}</a> (trovato in {channel}) {embed=crap/language-title entry_id="{entry_id}" channel_name="{channel_name}"}</li>
{if:else}
<li"><strong><h3><a href="{auto_path}">{embed=crap/language-title entry_id="{entry_id}" channel_name="{channel_name}"}</a></h3></strong> (from {channel}){embed=crap/language-title entry_id="{entry_id}" channel_name="{channel_name}"}</li>
{/if}
{/exp:search:search_results}
</ul>
Новый шаблон встраивать называется "язык-название"
{exp:channel:entries entry_id="{embed:entry_id}" cache="yes" refresh="60"}
{{embed:channel_name}_title_{language_code}}
{/exp:channel:entries}
Это работает (если вы можете это назвать), потому что переменная встраивания анализируется перед парными переменными тега и, как подробно описано, язык_кода также анализируется слишком, поэтому оставляет cor прямоугольный именованный переменный тег, готовый для правильной обработки EE.
первый Edit:
{{channel_name}_title_{language_code}}
не {channel_name}_title_{language_code}
{if language_code =="it"}
<li><a href="{exp:replace_plus find='.com/' replace='.com/it/'}{auto_path}{/exp:replace_plus}">{{channel_name}_title_{language_code}}</a> (trovato in {channel}) {{channel_name}_body_{language_code}}</li>
{if:else}
<li"><strong><h3><a href="{auto_path}">{{channel_name}_title_{language_code}}</a></h3></strong> (from {channel}){{channel_name}_body_{language_code}}</li>
{/if}
Примечание: CHANNEL_NAME действует, хотя и не документированы ref
Но, проблема в том, это было бы предположить, что он разбирает для переменных тегов в шаблоне дважды: один раз, чтобы заменить {channel_name}
, затем снова проанализировать результат {{channel_name}_title_it}
- note tha t {language_code}
был бы проанализирован намного раньше, чем переменная конфигурации.Не пытаясь подтвердить это, может быть достаточно умным, чтобы сначала разобрать внутреннюю переменную, но если вы не смогли попробовать stashing as a variable first или вывести имя канала из separate plugin?
Примечание к себе: обязательно прочитайте вопрос!
Игнорируйте нижеследующее как получилось неправильную переменную, не разобрав!
Вы можете прочитать на Разбор порядка here. Но в основном теги (модули и т.д.) получить разобран до пользовательских глобальных переменных, так что ваш {LANGUAGE_CODE} становится разобран после его нужно :(
Если код примера вы дали в качестве встроенного шаблона, а затем вы можете передать переменную из предыдущего шаблона в новую, например
Корневой шаблон:
{embed=template-group/template-name language="{language_code}"}
Затем при использовании шаблона:
{embed:language}
Это работает, потому что порядок разбора имеет отношение к каждому шаблону - не глобально, так что первый шаблон проходит через большую часть разборе перед вложенными один.
В качестве альтернативы и, вероятно, лучшим решением (помимо используя specific module for multi-language), это установить глобальную переменную в конфиге или index.php, не зная больше о вашей сборке, как код_языка создается его трудно предложить какой-либо дальнейшие решения.
Является ли язык основанным на предпочтениях пользователя? Он основан на сегменте? Используете ли вы различный index.php для каждого языка для перезаписи URL-адреса, поэтому он отображается, но не считается сегментом?
Также не забудьте указать ExpressionEngine's dedicated StackOverflow site!
Звучит как проблема с порядком выбора шаблона. Какая переменная {language_code}? – AllInOne
это глобальная переменная, может быть «en» или «it». Да, это похоже на проблему с порядком парсера шаблонов, любую идею о том, как я могу это исправить? – guido