2013-04-30 46 views
2

我想调用smarty模板中的foreach循环内部的函数,如果有人在smarty模板中熟知它是函数,请帮我解决这个问题。如何调用Smarty Foreach Loop中的函数?

实施例在PHP:

<?php 
function array_combine_($keys, $values) 
{ 
    $result = array(); 
    foreach ($keys as $i => $k) { 
     $result[$k][] = $values[$i]; 
    } 
    array_walk($result, create_function('&$v', '$v = (count($v) == 1)? array_pop($v): $v;')); 
    return $result; 
} 
$country = array("India","United States","United Kingdom","India","Australia"); 
$city = array("Coimbatore","Newyork","London","Bangalore","Melborne"); 
$output = array_combine_($country, $city); 
$get_array_keys = array_keys($output); 
$get_array_values = array_values($output); 
$get_count = count(array_keys($output)); 
for($i=0;$i<$get_count;$i++){ 
    if(is_array($get_array_values[$i])){ 
     echo "<b>".$get_array_keys[$i]."</b>&nbsp;-&nbsp;".implode(",",$get_array_values[$i])."<br>"; 
    } 
    else{ 
     echo "<b>".$get_array_keys[$i]."</b>&nbsp;-&nbsp;".$get_array_values[$i]."<br>"; 
    } 
} 
?> 

输出:

India - Coimbatore,Bangalore 
United States - Newyork 
United Kingdom - London 
Australia - Melborne 

实施例中的Smarty:

{foreach from=$companies item=record key=key} 
{$record.country} 
{$record.city} 
{/foreach} 

现在如何将这个{$ record.country}和{$ record.city}值传递给array_combine _($ arg1,$ arg2);在{foreach}循环中,如下所示:

{foreach from=$companies item=record key=key} 
{$record.country} 
{$record.city} 
array_combine_({$record.country},{$record.city}); 
{/foreach} 

在此先感谢。

+2

我不建议你把这样的功能里面Smarty的...你的PHP里面更好的只是准备要输出和智者的结果只会显示它。 – Svetoslav 2013-04-30 06:10:56

+0

所以PHP函数不可能在smarty模板中调用? – 2013-04-30 06:33:06

回答

1

正如我告诉你,我不建议你做..

如果你确信你这是在您的模板做你能描述你的功能和使用它。只要把PHP代码,因此智者不分析它..

{php} 
    function array_combine_(){ 
    } 
{/php} 
{foreach from=$companies item=record key=key} 
    {$record.country} 
    {$record.city} 
    array_combine_({$record.country},{$record.city}); 
{/foreach} 
+0

谢谢你的家伙:) – 2013-04-30 06:43:49

+0

@JohnPeter没问题,但它好得多从聪明出来,它不适合在那里。 – Svetoslav 2013-04-30 06:58:18

+0

当然,我知道这种方式,但我想知道,如果这是可能的或不在里面那个聪明的模板,就是这样。为此,您将得到解决方案,那就是我接受了您的答案。 – 2013-04-30 08:26:23

0

只需准备php一侧的array_combine()结果并将其传递给smarty即可显示它。尝试在smarty方面减少更多功能。

在smarty中只使用像大写字母那样的可用函数。不要尝试在smarty中使用php函数。

+0

{$ company_obj-> array_combine({$ record.country},{$ record.city})}它不适合我的朋友。 – 2013-04-30 06:20:52

+0

请再次通过我的答案。 – 2013-04-30 06:28:01

+0

所以PHP函数不可能在smarty模板中调用? – 2013-04-30 06:32:49