2

我正在使用 Smarty 2,想知道是否有更好/更整洁的方法来assign设置evenRow一行的值,而不是下面的 5 行。

{if $evenRow == 'on'}
   {assign var='evenRow' value='off'}
{else}
   {assign var='evenRow' value='on'}
{/if}

考虑到 Smarty 在某些地方可以与 PHP 紧密结合,我很惊讶这在网上不容易找到,因为在 PHP 中做这样的事情会很简单。

4

3 回答 3

1

您不能将 assign 设置为 assign 以外的其他内容。

不要使用分配。使用循环

{cycle  assign='evenRow' values="off,on"}
于 2015-11-01T16:16:05.210 回答
0

我为此创建了一个插件:

修饰符.choice.php

function smarty_modifier_choice()
{
    $no_choice="";
    $args=func_get_args();
    $patro=$args[0];
    $numconds=sizeof($args)-1;


    if ($numconds%2) {$no_choice=$args[$numconds];}

    for ($i=1;$i<$numconds; $i+=2)
    {
        if ($patro==$args[$i]) {return $args[$i+1];}
    }
    return $no_choice;
}

将它保存到您的 smarty/plugins 文件夹并像这样使用它:

{$variable|choice:'1':'one':'2':'two':'3':'three':'another number'}

如果最后一个字符串未配对,则假定它是默认值,但您也可以使用默认修饰符:

{$variable|choice:'1':'one':'2':'two':'3':'three'|default:'another number'}

所以如果 $variable 是“1”,它将返回“一”,如果它是“6”,将返回“另一个数字”

在你的情况下,它会像:

{assign var='evenRow' value=$evenRow|choice:'on':'off':'on'}
于 2013-10-30T09:19:39.270 回答
0

来自Smarty 文档(Smarty 3):

虽然 Smarty 可以处理一些非常复杂的表达式和语法,但保持模板语法最小化并专注于表示是一个很好的经验法则。如果您发现模板语法变得过于复杂,最好通过插件或修饰符将不明确处理表示的位移动到 PHP。

他们的基本建议是,您应该减少模板中的逻辑数量,并改用函数或修饰符。对于简单的情况,您可以使用简单的表达式作为属性值:

{assign var=test_var value=!empty($some_input)}

对于更复杂的示例,您可以编写自己的修饰符:

function smarty_modifier_do_something_complex($input) {
  // Process input and return value
}

并像这样使用它:

{assign var=test_var value=$some_input|do_something_complex}

或者您可以坚持使用更详细的{if} … {else} … {/if}方法。

于 2013-10-29T15:44:22.853 回答