Magento - geçersiz kılma Adminhtml blok

2 Cevap php

Ben buna başka bir metin kutusu eklemek için, "Ekle mağaza" ve bir uzantısı "Edit mağaza" sayfaları için Magento blok geçersiz kılmak için çalışırken saat geçirdim. Kitap ve google'da geçiyor sonra, insanlar benim için değil ancak çalıştıklarını söylüyorlar çeşitli çözümler bulduk.

Bir öneri idi this one.

Ben orijinal posteri için değil, benim için çalışan Lee Saferite gelen sözde doğru çözümü kopyalanan ettik. Tabii ki, ben geçersiz ediyorum sınıfı ve yeni değiştirilmiş sınıfa değerleri değişti.

Benim config.xml (ilgili kısım):

<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>

Ve Nintera / Genel / Blok / StoreEdit.php bulunan blok sınıfı:

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()
    { ... }
}

Bu sınıf yeni girdi alanlarını içermektedir. Ben de orijinal çekirdek dosyayı değiştirirseniz alanlar mükemmel göstermek:

app / çekirdek / Büyücü / Adminhtml / Blok / Sistem / Mağaza / Edit.php

Ama gerçekten benim uzantısı geçersiz kılmak istiyorum. Gerekirse benim tüm config.xml duyurabilirsiniz ama çoğunlukla bir üst düzey yönetici menü oluşturma ve uzatma bilgi değil, çok başka belirtir oluyor.

Yanlış giden ne herhangi bir fikir? Bir çözüm son derece mutluluk duyacağız!

2 Cevap

Hafif bir değişiklik ile, aşağıda gösterildiği. Bu "sdit" olarak "düzenlemek" misspelt ettik görünür.

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

Ayrıca Mage :: getModel ("nintera_general / myblock") sözdizimi kullanan diğer blokları aramak istiyorsanız, aşağıda gösterildiği gibi, sen de bu kodu kendi blokları eklemeniz gerekir unutmayın.

<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>

Birkaç konuları Okuma sonra Mage_Adminhtml_Block_Widget_Grid geçersiz kılma bu sorun için bir çözüm buldum.

As mentioned in this thread
"You can override (rewrite) in config only the blocks that are instantiated. You cannot inject anything into classes hierarchy as it is not supported by PHP"

Ben yöntemi geçersiz kılmak istedim protected function _addColumnFilterToCollection($column)

genişletilmiş hiyerarşisi için Mage_Adminhtml_Block_Sales_Order_Grid.

Yerine geçersiz kılma Mage_Adminhtml_Block_Widget_Grid I Mage_Adminhtml_Block_Sales_Order_Grid sınıfı geçersiz kılmak ve orada benim fonksiyonu yerleştirin.

Ve benim için bu gayet iyi çalışıyor.