2012-02-14 23 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