0

我有一个使用这种方法的助手来获取客户购物车中的物品

public function getCartData()
{
    //Get cart DATA
    $quote = Mage::getSingleton('checkout/session')->getQuote();
    $cartItems = $quote->getAllVisibleItems();
    $items = '';
    foreach ($cartItems as $item) {
        $items .= $item->getId() . " ";
    }
    return $items;
}

但我想做的是替换这条线

$items .= $item->getId() . " ";

有一个实例template/checkout/cart/sidebar/default.phtml

我该怎么办?该方法在 ajax 控制器中被调用。我想在不刷新页面的情况下更新用户的购物车,但需要对其进行格式化。

4

1 回答 1

1

所以你想为$item循环中的每个渲染模板中的内容?

如果您查看app/design/frontend/base/default/layout/checkout.xml,您将看到定义的原始侧边栏块:

<block type="checkout/cart_sidebar" name="cart_sidebar" template="checkout/cart/sidebar.phtml" before="-">
    <action method="addItemRender"><type>simple</type><block>checkout/cart_item_renderer</block><template>checkout/cart/sidebar/default.phtml</template></action>
    <action method="addItemRender"><type>grouped</type><block>checkout/cart_item_renderer_grouped</block><template>checkout/cart/sidebar/default.phtml</template></action>
    <action method="addItemRender"><type>configurable</type><block>checkout/cart_item_renderer_configurable</block><template>checkout/cart/sidebar/default.phtml</template></action>
</block>

我不确定您是否能够简单地使用项目渲染器checkout/cart_item_renderer(根据您的问题,这是您想要的),但让我们尝试一下。因此,您必须以编程方式创建块的实例,为其提供项目,为其分配模板,并将其 HTML 输出到您的变量。

$items='';
foreach($cartItems as $item) {
    $items.=Mage::app()->getLayout()->createBlock('checkout/cart_item_renderer')
            ->setItem($item)
            ->setTemplate('checkout/cart/sidebar/default.phtml')
            ->toHtml();
}

请注意在创建块之后,我们如何设置项目。这很重要,因为如果您检查模板,您会在顶部看到它调用的内容:

<?php $_item = $this->getItem() ?>

试试这个,看看它是否有帮助!

于 2013-07-17T17:20:02.140 回答