2012-02-14 92 views
2

我已经根据名称中的字符数来分配一个变量,该变量返回一个整数(1,2,3等)。如果选项名称与变量匹配,我想进一步添加{if}语句以显示选项。的选项名称5" ×7" - 1,5" ×7" - 2,5" ×7" - 3Smarty'if'语法语法

{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包括在内。

千恩万谢

回答

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} 

但是...如果你有要检查一个固定的模式,您可能需要使用正则表达式。 ?或者一个substr?

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

(你应该做这样的东西,在你的PHP虽然...)

+0

我有Smarty v2.6和解决方案#3完美地工作,谢谢罗德尼! – Claud 2012-02-14 16:09:42

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

喜添,试过,但不是为我工作。非常感谢您的帮助,非常感谢,因为我现在有了{capture}函数来学习如何使用! – Claud 2012-02-14 16:10:25