Smarty синтаксис оператора if - PullRequest
       4

Smarty синтаксис оператора if

2 голосов
/ 14 февраля 2012

Я назначил переменную, основанную на количестве символов в имени, которая возвращает целое число (1,2,3 и т. Д.). Я хотел бы дополнительно добавить оператор {if}, чтобы показать параметр, если имя параметра соответствует переменной. Имена параметров: 5 "x 7" - 1,5 "x 7" - 2,5 "x 7" - 3 и т. Д.

{assign var="numberofcharacters" value=$smarty.get.name|count_characters}

{if $vr.variant_name == '5" x 7" - $numberofcharacters' || $vr.variant_name == '8" x 11" - $numberofcharacters'}
...
{/if}

Это не дает результата, хотя у меня есть 3 варианта, которые должны отображаться. Может кто-нибудь сообщить мне, что не так с моим утверждением {if}?

Я не могу использовать:

{if $vr.variant_name|contains:}

потому что, если возвращаемое значение равно 1, то 10, 11 и 12 также включаются, когда мне просто нужно включить 1.

ОГРОМНОЕ СПАСИБО

Ответы [ 2 ]

3 голосов
/ 14 февраля 2012

Smarty3 с экранированными кавычками:

{$numberofcharacters = 1}
{$var = "5\" x 7\" - {$numberofcharacters}"}
{$var}

или

{$numberofcharacters = 1}
{$name = '5" x 7"'}
{$var = "{$name} - {$numberofcharacters}"}
{$var}

или Smarty2

{assign var="numberofcharacters" value=1}
{assign var="name" value='5" x 7"'}
{assign var="var" value="`$name` - `$numberofcharacters`"}
{$var}

или с использованием модификатора cat

{assign var="numberofcharacters" value=1}
{assign var="name" value='5" x 7"'}
{assign var="var" value=$name|cat:" - "|cat:$numberofcharacters}
{$var}

собрать вещи вместе должно быть достаточно просто ...

{$numberofcharacters = 1}
{$five_seven = "5\" x 7\" - {$numberofcharacters}"}
{$eight_eleven = "8\" x 11\" - {$numberofcharacters}"}
{if $vr.variant_name == $five_seven || $vr.variant_name == $eight_eleven}
  …
{/if}

Но ... Если у вас есть фиксированный шаблон, который вы хотите проверить, вы можете вместо этого использовать регулярное выражение?или подстрок?

{$variant_name = '5" x 7" - 123'}
{if preg_match('/^5" x 7"|^8" x 11"/', $variant_name, $tmp)}
  hello world
{/if}

(вы должны делать такие вещи в PHP, хотя ...)

0 голосов
/ 14 февраля 2012

Smarty не разбирает это:

'5" x 7" - $numberofcharacters'

как вы ожидаете.

http://www.smarty.net/docs/en/language.function.capture.tpl

{assign var="numberofcharacters" value=$smarty.get.name|count_characters}
{capture c1 assign=test1}5" x 7" - {$numberofcharacters}{/capture}
{capture c1 assign=test2}8" x 11" - {$numberofcharacters}{/capture}
{if $vr.variant_name==test1 || $vr.variant_name==test2}
    ...
...