Smarty'if'语句语法

时间:2012-02-14 15:30:10

标签: smarty

我根据名称中的字符数分配了一个变量,它返回一个整数(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,那么当我只需要包含1时,还包括10,11和12。

非常感谢

2 个答案:

答案 0 :(得分:3)

带有转义引号的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 modifier

{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中做类似的事情......)

答案 1 :(得分:0)

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}
    ...