我正在使用Smarty 2,并想知道是否有更好/更整洁的方式使用assign
在一行上设置evenRow
的值,而不是下面的5行。
{if $evenRow == 'on'}
{assign var='evenRow' value='off'}
{else}
{assign var='evenRow' value='on'}
{/if}
考虑到Smarty可以与PHP非常接近,我很惊讶这在网上很容易找到,因为在PHP中做这样的事情会很简单。
答案 0 :(得分:1)
答案 1 :(得分:0)
来自Smarty documentation(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}
方法。
答案 2 :(得分:0)
我为此创建了一个插件:
<强> modifier.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”,它将返回“one”,如果它是“6”将返回“另一个数字”
在你的情况下,它会像:{assign var='evenRow' value=$evenRow|choice:'on':'off':'on'}