我有两个自定义字段:blog_title_it和blog_title_en,用于在同一频道中分隔两种不同语言的内容。 标签
{blog_title_{language_code}}
按预期工作,而
{channel_name}_title_{language_code}
渲染
blog_title_en
我该如何解决这个问题?这是我的代码:
<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}">{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}
{/exp:search:search_results}
</ul>
答案 0 :(得分:1)
第二次编辑...
唉,我无法找到解决这个问题的好方法。理想情况下,您可以创建一个共享字段组,该组遍历所有具有您想要使用的相同字段的频道(例如title_it,title_en等)。然后,您可以使用EE中的发布布局显示/隐藏相关字段,因此仅显示每个通道的相关字段。因此,在字段名称中删除了“channel_name”的问题。
我尝试使用不同的存储方法,使用channel_name或ID作为键,但是它仍然偶然发现你需要解析它两次。
这些是我能想到的最好的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,这可能会更好。
垃圾解决方案二:嵌入式方法(可能性能比上面差!):
主要(原始)模板
<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>
名为“language-title”的新嵌入模板
{exp:channel:entries entry_id="{embed:entry_id}" cache="yes" refresh="60"}
{{embed:channel_name}_title_{language_code}}
{/exp:channel:entries}
这是有效的(如果你可以调用它),因为embed变量在标记对变量之前进行了解析,并且详细说明,之前也会解析language_code - 所以保留正确命名的变量标记,以便EE正确解析。 / p>
第一次编辑:
{{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}
注意:虽然未记录ref
,但channel_name有效但是,问题是这会假设它在模板中解析标签变量两次:一次替换{channel_name}
,然后再次解析结果{{channel_name}_title_it}
- 请注意{language_code}
会已被解析为更早的配置变量。没有尝试确认它可能足够聪明,可以先解析内部变量,但如果没有,您可以尝试stashing as a variable first或从separate plugin输出频道名称?
自我注意:必须阅读问题!
忽略以下内容,因为错误的变量没有解析!
您可以阅读有关Parse order here的更多信息。但基本上标签(模块等)在自定义全局变量之前被解析,所以你的{language_code}在需要之后就被解析了:(
如果您给出的示例代码位于嵌入式模板中,那么您可以将前一个模板中的变量传递给新模板,例如
根模板:
{embed=template-group/template-name language="{language_code}"}
然后在模板中使用:
{embed:language}
这是有效的,因为解析顺序与每个模板相关 - 不是全局的,因此第一个模板在嵌入的模板之前经过大部分解析。
或者也许最好的解决方案(除了使用specific module for multi-language之外)是在config或index.php中设置全局变量,而不了解更多关于如何设置language_code的构建它是很难提供任何进一步的解决方案。
语言是否基于用户偏好?它是基于细分市场吗?你是否使用不同的index.php为每种语言重写网址,所以它出现但不被视为一个细分?