安基塔,我要寫什麼是得到你想要什麼實際方式。雖然約翰希克林的正式答案將起作用,但並不是Magento如何修改主購物車模板。
Magento故意選擇使用不同的方法來設置購物車模板,即setCartTemplate
和setEmptyTemplate
。他們可以在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
,你會看到以下方法,在那裏熟悉setCartTemplate
和setEmptyTemplate
方法被調用,但是因爲它們是神奇的方法,所以它們在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的意圖,因此更新應該保持這種粒度。我還建議您將此標記爲正確答案。
您可以將cart.phtml放置在設計包中的checkout文件夾中並進行必要的更改。 – Slimshadddyyy
但我希望它保留在我的模塊的文件夾中。我不想替換默認的。 –
標記必須在您的local.xml中的標記之外 –
Slimshadddyyy