2012-12-09 121 views
1

在我的主題我已經(在local.xml中)使用方法:覆蓋「setTemplate」 Magento的XML

<reference name="top.links"> 
    <action method="setTemplate"><template>page/html/header/links.phtml</template></action> 
</reference> 

現在我正在做一個模塊,我想改變模板,從而使得模塊的安裝不需要任何需要修改主題。從模塊中的XML文件 所以幾乎相同的代碼:

<reference name="top.links"> 
    <action method="setTemplate"><template>sociallogin/header/links.phtml</template></action> 
</reference> 

的Magento總是挑local.xml中 第一個我怎麼可以重寫呢?

回答

4

你不應該(雖然我會在這篇文章的最後給你一些可能的想法)。 Magento的設計使local.xml中的代碼可以在可安裝的模塊文件中「勝出」代碼。基本思想是local.xml是商店所有者增加布局更新以覆蓋模塊文件更新的地方。這就是系統工作原理™,改變它會產生比解決問題更多的混亂。

也就是說,如果將代碼放在不同的佈局句柄中,您可能能夠在系統內工作。手柄是圍繞佈局更新

<default> 
    ... 
</default> 

<catalog_category_view> 
</catalog_category_view> 

<customer_logged_out> 
</customer_logged_out> 

etc... 

Magento的佈局系統的工作方式是在default標籤的所有更新從模塊文件運行,然後從local.xml節點。然後從catalog_category_view的所有更新都從模塊文件中運行,然後從local.xml運行。然後從customer_logged_out的所有更新從模塊文件,然後從local.xml運行。

也就是說,有句柄順序/特異性。檢查the Commerce Bug Demo store的佈局選項卡(單擊調試後)以查看頁面的句柄順序。 (免責聲明:商務部錯誤是我出的產品及銷售)

因此,如果您local.xml文件應用及其更新中default,你真的不能rejigger這一點,那麼你可以適用於了後者一個手柄的模塊更新。

祝你好運。

+0

感謝您的澄清艾倫!第一個更新是在默認句柄中運行的,是否有另一個句柄在每個頁面視圖上應用後運行? – Vindfrisk

+0

@Vindfrisk無處不在的'default'以外沒有單個句柄。但總是有一個'customer_logged_in'或'customer_logged_out',所以如果你將XML複製到這兩個,它將覆蓋'default'。 – clockworkgeek

2

您的local.xml佈局文件將優先於所有其他xml文件(除/app/etc/local.xml文件外,您不應將其用於佈局)。

您應該從local.xml文件中刪除聲明。