如何在Smarty修改器函数中分配新变量?

时间:2012-10-16 15:22:16

标签: php plugins smarty modifier

我写了一个基本的Smarty修饰符来模仿JavaScript的推动。

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时,它是空的。因此,似乎在修改器运行后它永远不会被分配回模板。

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

尝试推动“&amp;”在$ array变量之前 像那样

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