我有一个帮助这个方法来获取顾客购物车中的物品
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控制器中调用。我想在没有页面刷新的情况下更新用户的购物车,但需要格式化。
答案 0 :(得分: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() ?>
尝试一下,看看它是否有帮助!