Smarty:取消设置模板中的数组索引

Posted

技术标签:

【中文标题】Smarty:取消设置模板中的数组索引【英文标题】:Smarty: unset an array index in template 【发布时间】:2011-11-20 01:34:00 【问题描述】:

我想将unset($array['index']) 加入 Smarty 3 模板中。

是否支持这样的语法(或类似的)?在谷歌搜索和文档阅读之后,我找不到令人满意的东西。

也许我应该向 Smarty 开发团队提出功能请求? :)

无论如何,考虑到当前可用的模板功能,您将如何做到这一点?

【问题讨论】:

谢谢大家的回答。似乎问题确实出在控制器/视图分离中。但是原始代码中的处理方式让我“想在模板中取消设置数组索引”...... 【参考方案1】:

我不认为 smarty 对此有直接的支持。你总是可以使用 smarty 的php 标签来做到这一点,但是我强烈反对你这样做。逻辑不属于演示级模板。

【讨论】:

如果“逻辑不属于演示文稿”,您不需要 Smarty,只需 strtr() :-P 但是,为了使此评论有用,您是否认为您可能不需要做你的建议,因为你可以循环这个东西并使用ifcontinue来跳过你不需要的密钥?如example 7.42 @artfulrobot 使用ifcontinue 是根本不同的,因为它们不会修改数据。数据修改不属于表现层。 @AleksG 想要“修改”数据以进行展示是非常合理的,这可能需要一个新变量,例如数据子集的排序视图。也许在这里提问者认为与其在第二个变量中复制模板输入数据,修改输入数据可能更有效,如果稍后在模板中不需要进一步呈现,这可能是可以接受的。扭转你的论点:你不希望控制器中的表示逻辑。【参考方案2】:

虽然有办法:-)

$array=$array|array_diff_key:(['index']|array_flip)

尽管在模板中这样做不是一个好主意,但有时它可能会节省您的时间。

【讨论】:

【参考方案3】:

试试这个

$array.index = null

【讨论】:

感谢您的想法,但不幸的是它并没有完全符合我的要求:从Array ( [a] => 1 [b] => 2 ) 开始,在执行$array.a = null 之后,我得到Array ( [a] => [b] => 2 ) 而不是Array ( [b] => 2 )【参考方案4】:

模板引擎背后的主要思想是,您可以在解析视图之前完成所有加载、逻辑、取消设置等操作。话虽如此,您不应该在模板中取消设置数据,而且我很确定他们不会实现该功能请求。

我也不明白你为什么要取消设置 smarty 变量:只是不要使用它,它不会被显示。

【讨论】:

【参考方案5】:

两步:

$array.index = null
$array = $array|array_filter

它在 Smarty3 中工作。

动态索引示例:

foreach $array as $item
    if $item.foo == 'bar'
        <h1>$item.text nofilter</h1>
        * unset item from array *
        $array[$item@key] = null
        $array = $array|array_filter
        break
    /if
/foreach

if $array
    <ul>
    foreach $array as $item
        <li>$item.text nofilter</li>
    /foreach
    </ul>
/if

【讨论】:

【参考方案6】:

我认为,您不应该这样,因为所有逻辑都必须在代码中而不是在模板中。

但你可以编写自己的修饰符http://www.smarty.net/docs/en/plugins.modifiers.tpl

【讨论】:

【参考方案7】:

你不覆盖这个值吗?

assign var="array" value=array()
$array['index']='1'
$array['index2']='2'
$array['index']=''
$array|print_r

这在 smarty

【讨论】:

【参考方案8】:
$array=$links.lists|array_diff_key:(['10']|array_flip)
$array|print_r

这里10是一个数组索引。

【讨论】:

【参考方案9】:

试试

assign var=$array.index value=null)

【讨论】:

以上是关于Smarty:取消设置模板中的数组索引的主要内容,如果未能解决你的问题,请参考以下文章

取消设置数组中的索引将其转换为对象

如何在 smarty 模板文件中分配数组?

PHP数组中可否存放对象?如果可以,那么在smarty的模板中应当如何获取对象的属性值?

Smarty模本引擎

Smarty模板中使用getpostrequestcookiessession变量的方法

Smarty 模板引擎下缓存设置