1

我编写了一个模拟 JavaScript 推送的基本 Smarty 修饰符。

function smarty_modifier_push($array, $push){
    if(!isset($array)){
        $array = array($push);
    }elseif(is_array($array)){
        $array[] = $push;
    }
    return $array;
}

这是我的 .tpl 文件中的代码

Problems: 
<select name="problems[]" multiple="multiple">
    <option value="">Select Problems</option>
    {foreach from=$problems key=id item=name}
        {$newArray|push:$id}
        <option value="{$id}">{$name}</option>
    {/foreach}
</select>
{$newArray}

问题: 我的下拉列表包含大约 20 个元素,所以$newArray应该有大约 20 个 id,但是当我检查时$newArray,它是空的。因此,在修改器运行后,它似乎永远不会被分配回模板。

我知道我可以{assign var=newArray}事先在我的 .tpl 文件中使用,但我希望有一种方法可以从修饰函数中分配新变量。我也知道它可以从函数插件中获得,因为它通过了$smarty变量,但我只想知道,如何使用修饰符插件来完成这项工作?

4

2 回答 2

0

SMARTY FORUM上发布了一些代码,可能会对您有所帮助。其他人指出,这是一种让你做你需要的事情的方式,但它有点复杂,并且不能保证在新的更新出现时工作。希望它可以帮助你。干杯。

于 2012-10-16T16:26:10.680 回答
0

尝试像这样在 $array 变量之前按“&”

function smarty_modifier_push(& $array, $push){
    if(!isset($array)){
        $array = array($push);
    }elseif(is_array($array)){
        $array[] = $push;
    }
    return $array;
}
于 2012-10-16T18:01:46.603 回答