2013-07-17 55 views
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控制器中調用。我想在不刷新頁面的情況下更新用戶的購物車,但需要對其進行格式化。

回答

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() ?> 

試試看看是否有幫助!