【问题标题】:Help using ExpressionEngine template tags and conditionals帮助使用 ExpressionEngine 模板标签和条件
【发布时间】:2023-03-20 02:11:01
【问题描述】:

我已经参与了这个 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

【问题讨论】:

    标签: expressionengine


    【解决方案1】:

    使用advanced conditionals in EE 时,无论如何都会解析这些条件中的所有标签,因为高级条件的解析时间比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}
    

    【讨论】:

      【解决方案2】:

      由于这很早就出现在 Google 搜索中,我想我会提到附加组件 IfElse。它会返回正确的条件,那些失败(返回 false)的会被剔除。因此,仅运行所需的条件。

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

      例如

      {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),但这是我所知道和使用的。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-29
        • 1970-01-01
        • 1970-01-01
        • 2018-11-19
        • 1970-01-01
        • 2013-04-23
        相关资源
        最近更新 更多