2009-12-09 99 views
3

我花了數小時試圖覆蓋Magento塊的擴展中的「添加商店」和「編輯商店」頁面,以添加另一個文本框。在瀏覽書籍和谷歌搜索之後,我發現了幾種人們說的解決方案,但不適合我。Magento - 覆蓋Adminhtml塊

一個建議是this one

我已經複製了Lee Saferite的原本正確的解決方案,該解決方案適用於原始海報,但不適合我。當然,我將這些值更改爲我重寫的類和新的修改後的類。

我config.xml文件(相關部分):

<global> 
    <blocks> 
     <adminhtml> 
     <rewrite> 
      <system_store_sdit_form>Nintera_General_Block_StoreEdit</system_store_sdit_form> 
     </rewrite> 
     </adminhtml> 
    </blocks> 
    <resources></resources> 
    <helpers> 
     <Nintera_General> 
     <class>Nintera_General_Helper</class> 
     </Nintera_General> 
    </helpers> 
    </global> 

而且位於Nintera /一般/座/ StoreEdit.php塊類:

class Nintera_General_Block_StoreEdit extends Mage_Adminhtml_Block_System_Store_Edit_Form 
{ 
    /** 
    * Prepare form data 
    * 
    * return Mage_Adminhtml_Block_Widget_Form 
    */ 
    protected function _prepareForm() 
    { ... } 
} 

這個類包含了新的輸入域。該字段顯示了完美的,如果我修改原始核心文件在:

應用程序/核心/法師/ Adminhtml /模塊/系統/存儲/ Edit.php

但我真的希望我的擴展覆蓋它。如果有必要,我可以發佈我的整個config.xml,但它主要是創建頂級管理菜單並指定擴展信息,而不是其他。

有什麼錯誤的想法嗎?高度讚賞解決方案!

回答

10

顯示如下,稍作修改。看起來你的拼寫錯誤是「編輯」爲「sdit」。

<global> 
    <blocks> 
     <adminhtml> 
     <rewrite> 
      <system_store_edit_form>Nintera_General_Block_StoreEdit</system_store_edit_form> 
     </rewrite> 
     </adminhtml> 
    </blocks> 
</global> 

也請記住,如果你想使用法師:: getModel(「nintera_general/myblock」)語法調用其他塊,你需要自己的塊添加到代碼爲好,如如下所示。

<global> 
    <blocks> 
     <adminhtml> 
     <rewrite> 
      <system_store_edit_form>Nintera_General_Block_StoreEdit</system_store_edit_form> 
     </rewrite> 
     </adminhtml> 
     <nintera_general> 
     <class>Nintera_General_Block</class> 
     </nintera_general> 
    </blocks> 
</global> 
2

讀幾條線後,我已經找到了覆蓋Mage_Adminhtml_Block_Widget_Grid這個問題的解決方案。

在本thread
提到「您可以覆蓋(重寫)在配置只被實例化的塊。你不能注入任何東西到類層次結構,因爲它不是由PHP支持」

我想覆蓋方法protected function _addColumnFilterToCollection($column)

對於Mage_Adminhtml_Block_Sales_Order_Grid的擴展層次結構。

而不是重寫Mage_Adminhtml_Block_Widget_Grid我重寫類Mage_Adminhtml_Block_Sales_Order_Grid並將我的功能放在那裏。

對我來說這工作正常。