【问题标题】:Smarty 'if' statement syntaxSmarty 'if' 语句语法
【发布时间】:2012-02-14 15:30:09
【问题描述】:

我已根据名称中的字符数分配了一个变量,该变量返回一个整数(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。

非常感谢

【问题讨论】:

    标签: smarty


    【解决方案1】:

    带有转义引号的 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 中做类似的事情……)

    【讨论】:

    • 我有 Smarty v2.6,解决方案 #3 完美运行,感谢 Rodney!
    【解决方案2】:

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

    【讨论】:

    • 嗨蒂姆,试过这个但对我不起作用。非常感谢您的帮助,非常感谢,因为我现在有 {capture} 功能来学习如何使用!!!
    猜你喜欢
    • 2012-07-05
    • 1970-01-01
    • 2014-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-01
    相关资源
    最近更新 更多