Помогите с использованием шаблонных тегов и условных выражений ExpressionEngine - PullRequest
1 голос
/ 07 июня 2011

Я взялся за этот проект 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.

Я схожу с ума, я был бы признателен за любую помощь, которую вы можете предоставить.

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

https://github.com/averyvery/Freebie

Ответы [ 2 ]

4 голосов
/ 07 июня 2011

При использовании расширенных условных выражений в EE все теги в этих условных кодах анализируются независимо, поскольку расширенные условные выражения анализируются позже, чем большинство других тегов в порядке разбора .Вот почему тег 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 голос
/ 15 ноября 2012

Так как это произошло довольно рано при поиске в Google, я полагаю, я бы упомянул дополнение IfElse . Он вернет правильное условие, те, которые потерпели неудачу (вернут false), будут удалены. Поэтому выполняется только желаемое условие.

Как сказал Дерек, знание порядка разбора жизненно важно, в этом случае оба вызова {exp:session_variables:...} выполняются независимо от действительности условий. Однако с IfElse ваш код будет работать так, как вам нужно, избегая при этом сложных условий, поэтому вы не только выполняете то, что вам нужно, но и гораздо раньше, в порядке разбора для загрузки.

1008 * Е.Г. *

{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 от того же автора) для того же или аналогичного контекста, но это то, что я знаю и использую.

...