如何在 Smarty 修饰符函数中分配新变量?

Posted

技术标签:

【中文标题】如何在 Smarty 修饰符函数中分配新变量?【英文标题】:How can I assign a new variable inside of a Smarty modifier function? 【发布时间】:2012-10-16 15:22:15 【问题描述】:

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

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

【问题讨论】:

您的最终目标是什么?您可以使用 .each 函数遍历 javascript 中的选项列表并访问所有 ID。或者您可以在调用模板之前将仅包含 id 的数组保存在 php 中。 @nathanhayfield - $problems 是动态的,所以直到我的代码中的这一点我才知道它是什么样子。是的,我可以使用 JavaScript,但因为我已经在使用 Smarty,所​​以在 Smarty 中完成这一切会更简洁,更方便,所以我想我会问一下。 【参考方案1】:

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

【讨论】:

【参考方案2】:

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

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

【讨论】:

以上是关于如何在 Smarty 修饰符函数中分配新变量?的主要内容,如果未能解决你的问题,请参考以下文章

Smarty:在修饰符中组合两个变量

Smarty:如何修复“未知修饰符'rewrite'”异常?

使用 Smarty 修饰符

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

Smarty 修饰符 - 将 url 变成链接

在 .net 中分配新数组的大 O 成本