Question

Mise à jour: J'ai trouvé qui est SMDesign_SMDZoom_Block_Product_View_Media et non SMDesign_ColorswatchProductView_Block_Product_View_Media comme je pensais à l'origine de la classe I réellement besoin de réécrire. Cependant, exactement le même problème est toujours valable.

L'extension SMDesign SMDZoom classe récrit bloc 'catalogue / product_view_media'. Le xml pour qui ressemble à ceci:

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

Je veux réécrire à nouveau cette classe. Je veux réécrire la classe catalogue / product_view_media que ce module smdzoom est en train de réécrire. Cela peut-il être fait? Qu'est-ce que l'apparence xml config comme dans mon module pour le faire?

À l'heure actuelle c'est mon module fichier xml init:

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

et le fichier config.xml du module:

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

Ma nouvelle classe ressemble simplement ceci pour tester:

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

Je teste ce en affichant des notes de chemin de modèle, et je vois bloc SMDesign encore utilisé sur la page d'affichage du produit. Qu'est-ce que je fais mal?

Était-ce utile?

La solution

Je mets le noeud <depends> au mauvais endroit dans le fichier xml init mon module. Il doit être imbriqué dans le nœud du nom du module, comme suit:

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

Autres conseils

Cette partie ici:

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

ne vous aider si l'instanciation d'origine se fait via createBlock('colorswatchproductview/product_view_media)
il est peu probable depuis la première extension avec une réécriture, à savoir qu'ils veulent être montré partout où
createBlock('catalog/product_view_media') est utilisé

Une option serait d'utiliser une ré-écriture pour le même bloc

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

puis dans votre classe de bloc étendre l'autre bloc d'extension

class Goorin_ColorswatchProductView_Block_Product_View_Media extends SMDesign_ColorswatchProductView_Block_Product_View_Media

Pour que cela fonctionne votre extension doit être chargé après le premier. Au cours de mes tests ici http://magebase.com/magento-tutorials/magento-extension -clashes-gagnants-et-loosers / J'ai travaillé que l'ordre de charge est basé sur l'ordre alphabétique de votre application / etc / modules / fichiers xml. En variante, cette commande peut être influencée à l'aide d'un noeud Depends (SMDesign_ColorswatchProductView).

Vous voyez le message d'erreur puisque vous essayez de rendre le bloc en vase clos, mais il a besoin d'un produit, il charge de son bloc parent:

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

C'est pourquoi les classes de base ré-écriture suce.

Tir de là hanche ici, mais je pense que le mieux serait d'étendre la mise en œuvre de la couleur de swatch Mage_Catalog_Blog_Product_View_Media puis faire votre module dépend du module nuancier de couleurs.

Alan tempête a répondu à une question similaire ici .

Encore mieux serait d'essayer de faire tout ce que vous essayez de le faire par un observateur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top