首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Smarty 2在一行上分配变量值

使用Smarty 2在一行上分配变量值
EN

Stack Overflow用户
提问于 2013-10-29 17:54:20
回答 3查看 2.6K关注 0票数 2

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

代码语言:javascript
复制
{if $evenRow == 'on'}
   {assign var='evenRow' value='off'}
{else}
   {assign var='evenRow' value='on'}
{/if}

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

EN

回答 3

Stack Overflow用户

发布于 2015-11-02 00:16:05

你不能让赋值成为赋值以外的东西。

不要使用assign。使用cycle

代码语言:javascript
复制
{cycle  assign='evenRow' values="off,on"}
票数 1
EN

Stack Overflow用户

发布于 2013-10-29 23:44:23

来自Smarty documentation (Smarty 3):

虽然Smarty可以处理一些非常复杂的表达式和语法,但根据经验,保持模板语法最少并专注于表示是一个很好的经验法则。如果你发现你的模板语法变得太复杂了,通过插件或修饰符的方式把那些没有显式处理表示的部分移到PHP上可能是个好主意。

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

代码语言:javascript
复制
{assign var=test_var value=!empty($some_input)}

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

代码语言:javascript
复制
function smarty_modifier_do_something_complex($input) {
  // Process input and return value
}

并像这样使用它:

代码语言:javascript
复制
{assign var=test_var value=$some_input|do_something_complex}

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

票数 0
EN

Stack Overflow用户

发布于 2013-10-30 17:19:39

我为此创建了一个插件:

modifier.choice.php

代码语言:javascript
复制
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文件夹中,并按如下方式使用:

代码语言:javascript
复制
{$variable|choice:'1':'one':'2':'two':'3':'three':'another number'}

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

代码语言:javascript
复制
{$variable|choice:'1':'one':'2':'two':'3':'three'|default:'another number'}

因此,如果$variable为"1“,则返回”1“,如果为"6”,则返回"another number“

在您的情况下,它将如下所示:

代码语言:javascript
复制
{assign var='evenRow' value=$evenRow|choice:'on':'off':'on'}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19654830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档