Önceden yeniden yazılmış bir sınıfı nasıl yeniden yazabilirim?


15

Güncelleme: Yeniden yazmam gereken sınıfın aslında düşündüğüm gibi SMDesign_SMDZoom_Block_Product_View_Mediaolmadığını SMDesign_ColorswatchProductView_Block_Product_View_Mediabuldum. Ancak, aynı sorun hala geçerlidir.

SMDesign SMDZoom uzantısı, 'katalog / product_view_media' blok sınıfını yeniden yazar. Bunun için xml şuna benzer:

       <global>
    ...         
       <blocks>
        <smdzoom>
            <class>SMDesign_SMDZoom_Block</class>
        </smdzoom>
    </blocks>
    <blocks>
        <catalog>
            <rewrite>
                <product_view_media>SMDesign_SMDZoom_Block_Product_View_Media</product_view_media>
            </rewrite>
        </catalog>
    </blocks>
           ....
       </global>

Bu sınıfı tekrar yazmak istiyorum. Bu smdzoom modülünün yeniden yazıldığı katalog / product_view_media sınıfını yeniden yazmak istiyorum. Bu yapılabilir mi? Bunu yapmak için config xml modülümde nasıl görünür?

Şu anda bu benim modül init xml dosyası:

<config>
    <modules>
        <Goorin_SMDZoom>
            <active>true</active>
            <codePool>local</codePool>
        </Goorin_SMDZoom>
        <depends>
            <Mage_Catalog />
            <SMDesign_SMDZoom />
        </depends>
    </modules>
</config>

ve modül config.xml dosyası:

<global>
        <blocks>
            <gbismdzoom>
                <class>Goorin_SMDZoom_Block</class>
            </gbismdzoom>
            <catalog>
                <rewrite>
                    <product_view_media>Goorin_SMDZoom_Block_Product_View_Media</product_view_media>
                </rewrite>
            </catalog>
        </blocks>
    </global>

Yeni sınıfım test için şöyle görünüyor:

class Goorin_SMDZoom_Block_Product_View_Media extends SMDesign_SMDZoom_Block_Product_View_Media
{
    public function _construct() {
        parent::_construct();
    }
}

Bunu şablon yolu ipuçlarını görüntüleyerek test ediyorum ve ürün görünümü sayfasında hâlâ SMDesign bloğunun kullanıldığını görüyorum. Neyi yanlış yapıyorum?

Yanıtlar:


13

<depends>Düğümü modülümün init xml dosyasında yanlış yere koydum . Modül adının düğümünde iç içe yerleştirilmelidir, şöyle:

<config>
    <modules>
        <Goorin_SMDZoom>
            <active>true</active>
            <codePool>local</codePool>
            <depends>
                <Mage_Catalog />
                <SMDesign_SMDZoom />
            </depends>
        </Goorin_SMDZoom>
    </modules>
</config>

10

Bu kısım:

        <colorswatchproductview>
            <rewrite>
                <product_view_media>Goorin_ColorswatchProductView_Block_Product_View_Media</product_view_media>
            </rewrite>
        </colorswatchproductview>

createBlock('colorswatchproductview/product_view_media)
ilk uzantı bir yeniden yazma işlemi kullandığından , orijinal örnekleme bu şekilde yapılmazsa size yardımcı olur , yani
createBlock('catalog/product_view_media')kullanılan herhangi bir yerde göstermek isterler

Bir seçenek aynı blok için yeniden yazma kullanmak olabilir

  <catalog>
    <rewrite>
      <product_view_media>Goorin_ColorswatchProductView_Block_Product_View_Media</product_view_media>
    </rewrite>
  </catalog>

ve sonra blok sınıfınızda diğer uzantı bloğunu uzatın

class Goorin_ColorswatchProductView_Block_Product_View_Media extends SMDesign_ColorswatchProductView_Block_Product_View_Media

Bunun çalışması için uzantınızın birinciden sonra yüklenmesi gerekir. Buradaki testlerim sırasında http://magebase.com/magento-tutorials/magento-extension-clashes-winners-and-loosers/ Yükleme sırasının uygulamanızın / etc / modülleri / xml dosyalarınızın alfabetik sırasına dayandığını öğrendim . Alternatif olarak, bu sipariş bir Bağımlı düğüm (SMDesign_ColorswatchProductView) kullanılarak etkilenebilir.

Bloğu tek başına oluşturmaya çalıştığınız için hata iletisini görüyorsunuz, ancak üst bloğundan yüklediği bir ürün gerekiyor:

abstract class Mage_Catalog_Block_Product_View_Abstract extends Mage_Catalog_Block_Product_Abstract
{
    /**
     * Retrive product
     *
     * @return Mage_Catalog_Model_Product
     */
    public function getProduct()
    {
        $product = parent::getProduct();
        if (is_null($product->getTypeInstance(true)->getStoreFilter($product))) {
            $product->getTypeInstance(true)->setStoreFilter(Mage::app()->getStore(), $product);
        }

        return $product;
    }

Talimatlarınızdan vazgeçtim ve bağımlı düğümle bile sınıfı yeniden yazamıyorum.
Nick Rolando

Modül init xml dosyanızı z.xml olarak ve ardından önbellek yenilemesiyle yeniden adlandırmayı deneyin.
Kristof at Fooman

Üzgünüm, bir süredir buna geri dönmedim. Init xml dosyasını zzz.xml olarak yeniden adlandırdım ve yeniden yazma işlemi işe yaradı! Bu yüzden <depends>düğümün neden çalışmadığını anlamaya ihtiyacım var ..
Nick Rolando

Yardım için teşekkürler ve beni cevaba
götürdüm

3

Bu yüzden çekirdek sınıfların yeniden yazılması berbat.

Burada kalçadan çekim yapıyorum ama en iyi seçeneğinizin renk örneği uygulamasını genişletmek ve Mage_Catalog_Blog_Product_View_Mediamodülünüzü renk örneği modülüne bağlı hale getirmek olduğunu düşünüyorum.

Alan Storm benzer bir soruyu burada yanıtladı .

Daha da iyisi, bir gözlemci aracılığıyla yapmaya çalıştığınız her şeyi yapmaya çalışmaktır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.