帮助使用ExpressionEngine模板标签和条件

时间:2011-06-07 17:41:23

标签: expressionengine

我接受了这个EE2项目,但我没有多少经验。

我已经安装了两个插件,SessionVariables和Freebies,用于获取url段并根据其值进行操作。

所以,基本上:

{if "{exp:freebie:any name="es"}" == "true"}
        Hola Mundo!
        {exp:session_variables:set name="current_language" value="_es"}
{if:else}
        {exp:session_variables:delete name="current_language"}
        Hello World!
{/if}

奇怪的是,我去site.com/es/hello打印“Hola Mundo”,但它实际上调用了session_Variable插件的函数set()和delete()。

我让我发疯,我很感激你能提供的任何帮助。

http://www.putyourlightson.net/projects/session_variables

https://github.com/averyvery/Freebie

2 个答案:

答案 0 :(得分:4)

使用advanced conditionals in EE时,无论如何都会解析这些conitionlas中的所有标记,因为高级条件的解析时间晚于parse order中的大多数其他标记。这就是为什么在您的示例中在两个条件中调用session_variables标记的原因(即使模板解析器仅显示第一部分内容)。

修复方法是使用“简单条件”,它们更早解析:

{if "{exp:freebie:any name="es"}" == "true"}
    Hola Mundo!
    {exp:session_variables:set name="current_language" value="_es"}
{/if}
{if "{exp:freebie:any name="es"}" == "false"}
    {exp:session_variables:delete name="current_language"}
    Hello World!
{/if}

答案 1 :(得分:1)

由于这在谷歌搜索的早期出现,我想我会提到加载项IfElse。它将返回正确的条件,失败的那些(返回false)被剥离。 Ergo只运行所需的条件。

正如Derek所说,对解析顺序的了解至关重要,在这种情况下,无论条件的有效性如何,都会调用{exp:session_variables:...}。但是,使用IfElse,您的代码将按照需要运行,同时避免使用高级条件,因此您不仅可以在解析顺序中更早地执行所需的操作,而且还可以执行。

E.g。

{exp:ifelse parse="inward"} 
{if "{exp:freebie:any name="es"}" == "true"}
        Hola Mundo!
        {exp:session_variables:set name="current_language" value="_es"}
{if:else}
        {exp:session_variables:delete name="current_language"}
        Hello World!
{/if}
{/exp:ifelse}

"{exp:freebie:any name="es"}" == "true"然后{exp:session_variables:set name="current_language" value="_es"}将运行且 {exp:session_variables:delete...}时。好像你的代码是:

        Hola Mundo!
        {exp:session_variables:set name="current_language" value="_es"}

另外,这将在{exp:ifelse...}的解析顺序发生,而不是在高级条件之后发生。

需要注意的一点是,您无法嵌套{exp:ifelse...}

对于相同或类似的上下文,可能还有其他附加组件,如IfElse(由同一作者查看Switchee),但这是我所知道和使用的。