Поскольку это появилось довольно рано в поиске Google, я решил упомянуть надстройку IfElse а>. Он вернет правильное условие, те, которые не срабатывают (возвращают false), удаляются. Следовательно, выполняется только желаемое условие.
Как сказал Дерек, знание порядка синтаксического анализа жизненно важно, в этом случае оба вызова {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 того же автора) для тех же или похожих контекстов, но это то, что я знаю и использую.
person
notacouch
schedule
14.11.2012