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