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