2014-01-27 86 views
1

我想在我的模塊的佈局文件即mymodule.xml無法通過佈局更新更改結賬/ cart.phtml

<layout> 
    <checkout_cart_index> 
     <reference name="checkout.cart"> 
      <action method="setCartTemplate"><value>mymodule/checkout/cart.phtml</value></action> 
     </reference> 
    </checkout_cart_index> 
</layout> 

通過佈局的更新以更改結賬/ cart.phtml但它不能正常工作。任何線索?

+0

您可以將cart.phtml放置在設計包中的checkout文件夾中並進行必要的更改。 – Slimshadddyyy

+0

但我希望它保留在我的模塊的文件夾中。我不想替換默認的。 –

+0

標記必須在您的local.xml中的標記之外 – Slimshadddyyy

回答

0

的方法是setTemplate不setCartTemplate,就像這樣:

<layout> 
    <checkout_cart_index> 
     <reference name="checkout.cart"> 
      <action method="setTemplate"><value>mymodule/checkout/cart.phtml</value></action> 
     </reference> 
    </checkout_cart_index> 
</layout> 
6

安基塔,我要寫什麼是得到你想要什麼實際方式。雖然約翰希克林的正式答案將起作用,但並不是Magento如何修改主購物車模板。

Magento故意選擇使用不同的方法來設置購物車模板,即setCartTemplatesetEmptyTemplate。他們可以在Magento自己的app/design/frontend/base/default/layout/checkout.xml中看到。這樣做是爲了可以管理兩個模板,每個模板都可以處理它們自己的情況。第一個條件是裝有物品的購物車,而第二個條件是沒有物品的購物車。通過使用常見的setTemplate方法,該區別將會丟失:具有物品的購物車和沒有物品的購物車都將顯示相同的模板。這不好。

你太親近了。你試圖使用setCartTemplate方法是正確的。這就是你應該使用的。但是,您錯過了一個可以讓Magento甚至考慮使用它的基本方法調用:您忘記了包含chooseTemplate方法調用。注意Magento的自己checkout.xml文件:

<block type="checkout/cart" name="checkout.cart"> 
    <action method="setCartTemplate"><value>checkout/cart.phtml</value></action> 
    <action method="setEmptyTemplate"><value>checkout/cart/noItems.phtml</value></action> 
    <action method="chooseTemplate"/> 

看這最後的方法調用,chooseTemplate。如果你看看app/code/core/Mage/Checkout/Block/Cart.php,你會看到以下方法,在那裏熟悉setCartTemplatesetEmptyTemplate方法被調用,但是因爲它們是神奇的方法,所以它們在Magento的源代碼中很難被搜索到,這對於很多人來說是有問題的:

public function chooseTemplate() 
{ 
    $itemsCount = $this->getItemsCount() ? $this->getItemsCount() : $this->getQuote()->getItemsCount(); 
    if ($itemsCount) { 
     $this->setTemplate($this->getCartTemplate()); 
    } else { 
     $this->setTemplate($this->getEmptyTemplate()); 
    } 
} 

您錯過了chooseTemplate方法調用。這是你自己的佈局XML文件應該是這樣的:

<checkout_cart_index> 
    <reference name="checkout.cart"> 
     <action method="setCartTemplate"><value>mymodule/checkout/cart.phtml</value></action> 
     <action method="setEmptyTemplate"><value>mymodule/checkout/noItems.phtml</value></action> 
     <action method="chooseTemplate"/> 
    </reference> 
</checkout_cart_index> 

我建議你更新你的代碼,如果它仍然在你的控制之下。這就是Magento如何更新購物車模板。常見的setTemplate方法對於此任務太具破壞性。粒度是Magento的意圖,因此更新應該保持這種粒度。我還建議您將此標記爲正確答案。