【问题标题】:How can I assign a new variable inside of a Smarty modifier function?如何在 Smarty 修饰符函数中分配新变量?
【发布时间】: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 中完成这一切会更简洁,更方便,所以我想我会问一下。

标签: php plugins smarty modifier


【解决方案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;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-02
      • 2013-04-17
      • 2015-03-20
      • 2012-05-03
      相关资源
      最近更新 更多