2013-04-30 66 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