我正在使用Smarty2,我想知道是否有更好/更整洁的方法来使用assign在一行上设置evenRow的值,而不是下面的5行。
{if $evenRow == 'on'}
{assign var='evenRow' value='off'}
{else}
{assign var='evenRow' value='on'}
{/if}考虑到Smarty可以在某些地方与PHP紧密结合,我很惊讶这不容易在网上找到,因为在PHP中做这样的事情会很简单。
发布于 2015-11-02 00:16:05
你不能让赋值成为赋值以外的东西。
不要使用assign。使用cycle。
{cycle assign='evenRow' values="off,on"}发布于 2013-10-29 23:44:23
来自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}方法。
发布于 2013-10-30 17:19:39
我为此创建了一个插件:
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“,则返回”1“,如果为"6”,则返回"another number“
在您的情况下,它将如下所示:
{assign var='evenRow' value=$evenRow|choice:'on':'off':'on'}https://stackoverflow.com/questions/19654830
复制相似问题