【问题标题】:PHP Foreach in SmartyBC. Smarty templateSmartyBC 中的 PHP Foreach。智能模板
【发布时间】:2013-02-07 00:18:23
【问题描述】:

我对 Smarty 比较陌生,似乎无法弄清楚这一点。

在我的 php 控制器中,我实例化了一个类“Product”,我需要显示它的次数。例如,如果我的页面上有 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 的对象转换为字符串。

【问题讨论】:

  • 你不能这样做,它也行不通。你需要改变逻辑。使用纯 PHP 或纯 smarty。不要将两者结合起来。
  • 在控制器中做你的业务逻辑,不要在视图中实例化模型。

标签: php foreach smarty


【解决方案1】:

我很确定你不能在 {php} 标签中混入聪明的东西。但问题是为什么要这样做?为什么不创建所有产品并将它们放入一个数组中,然后将其分配给 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

也就是说你现在真的应该解决这个问题并将这个逻辑移动到你用作“控制器”的任何东西中。它可能会揭示您的设计中更普遍的问题,您将不得不以一种或另一种方式解决这些问题。

【讨论】:

    猜你喜欢
    • 2017-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-13
    • 1970-01-01
    • 1970-01-01
    • 2021-04-28
    相关资源
    最近更新 更多