如何在 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 修饰符函数中分配新变量?的主要内容,如果未能解决你的问题,请参考以下文章