2013-02-21 75 views
0

我对Smarty比较陌生,似乎无法弄清楚这一点。PHP在SmartyBC中的Foreach。 Smarty模板

在我的php控制器中,我创建了一个类“产品”,我需要多次展示它。例如,如果我的页面上有5个不同的项目,我会将“产品”实例化5次。然后我创建一个包含这些的数组。它是这样的: (我的对象充满了产品的信息)。

代码:

$product_array = array ( 0 => Object1, 1 => Object2); etc.

我然后分配该数组到smarty的变量{$ product_array}。 一旦进入我的.tpl,我会经历一个显示产品的循环。那时我需要将$ products_array [0]或{$ products_array.0}赋值给另一个变量$ products,以显示我需要的所有产品信息。然后它会再次通过循环并显示给我{$ products_array.1}等等。

但是,这似乎是不可能的,看到任何方式,我尝试和实现这一点(我甚至尝试使用{php}耻辱我)我似乎无法弄清楚。 我收到此错误:类Product的对象无法转换为字符串。

+1

你不能这样做,它不会工作。你需要改变逻辑。要么使用纯PHP或纯Smarty。不要把两者结合起来。 – 2013-02-21 15:44:55

+1

在控制器中执行业务逻辑,并且不要在视图中实例化模型。 – 2013-02-21 15:46:56

回答

1

我很确定你不能混合在一个{php}标签smarty的东西。但问题是为什么要这样做?为什么不创建所有产品并将它们放入数组中,然后将它们分配给smarty并以smarty语法循环使用它?

{php} 
    $accesories = $GLOBALS['accessories']; 
    $products = array(); 
    foreach($accesories as $k => $v) 
    { 
     var_dump($instantProduct = new Product($accesories[$k], TRUE)); 
     $products[$k] = new Product($accesories[$k], TRUE); 
    } 

    $smarty->assign('products', $products); 
{/php} 

// now loop and conditions in smarty 

这就是说,你真的应该只是解决这个问题,现在使用的“控制器”移动这个逻辑到任何您选择。它可能会揭示更广泛的设计问题,您将不得不以这种或那种方式解决问题。