Frage

Aktualisieren: Ich fand, dass die Klasse, die ich tatsächlich neu schreiben muss, ist SMDesign_SMDZoom_Block_Product_View_Media und nicht SMDesign_ColorswatchProductView_Block_Product_View_Media Wie ich ursprünglich dachte. Das genaue Problem gilt jedoch weiterhin.

Die SMDesign Smdzoom -Erweiterung blockiert die Blockklasse 'Catalog/product_view_media'. Das XML für das sieht so aus:

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

Ich möchte diese Klasse wieder umschreiben. Ich möchte die Catalog/product_view_media -Klasse umschreiben, die dieses Smdzoom -Modul umschreibt. Kann das getan werden? Wie würde die Konfiguration XML in meinem Modul aussehen, um dies zu tun?

Derzeit ist dies meine Modul -Init -XML -Datei:

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

und die Datei modul config.xml:

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

Meine neue Klasse sieht einfach so aus zum Testen:

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

Ich teste dies, indem ich Vorlagenpfadhinweise anzeige, und ich sehe, dass SMDesign -Block noch auf der Produktansichtsseite verwendet wird. Was mache ich falsch?

War es hilfreich?

Lösung

Ich lege das <depends> Knoten am falschen Ort in der Init XML -Datei meines Moduls. Es muss im Modulnamenknoten wie SO verschachtelt werden:

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

Andere Tipps

Dieser Teil hier:

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

hilft Ihnen nur, wenn die ursprüngliche Instanziierung über durchgeführt wird createBlock('colorswatchproductview/product_view_media)
Dies ist unwahrscheinlich, da die erste Erweiterung ein Umschreiben verwendet, dh sie möchten überall dort angezeigt werden, wo
createBlock('catalog/product_view_media') wird genutzt

Eine Option wäre die Verwendung eines Umschreibens für denselben Block

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

Und dann erweitern Sie in Ihrer Blockklasse den anderen Erweiterungsblock

class Goorin_ColorswatchProductView_Block_Product_View_Media extends SMDesign_ColorswatchProductView_Block_Product_View_Media

Damit dies funktioniert, muss Ihre Erweiterung nach dem ersten geladen werden. Während meiner Tests hier http://magebase.com/magento-tutorials/magento-eutsionclashes-winners--lososers/ Ich habe herausgefunden, dass die Ladereihenfolge auf alphabetischer Reihenfolge Ihrer App/etc/module/XML -Dateien basiert. Alternativ kann diese Reihenfolge durch die Verwendung eines Abhängigkeitsknotens (smdesign_colorswatchProductView) beeinflusst werden.

Sie sehen die Fehlermeldung, da Sie versuchen, den Block isoliert zu rendern, aber ein Produkt benötigt, das aus seinem übergeordneten Block lädt:

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

Deshalb ist das Wiederumschreiben von Kernklassen saugt.

Hier fotografieren Sie hier, aber ich denke Mage_Catalog_Blog_Product_View_Media Und dann lassen Sie Ihr Modul vom Farbmustermodul abhängen.

Alan Storm beantwortete eine ähnliche Frage hier.

Noch besser wäre es, durch einen Beobachter zu versuchen, alles zu tun, was Sie versuchen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top