Domanda

Aggiornamento: ho scoperto che la classe in realtà ho bisogno di riscrittura è SMDesign_SMDZoom_Block_Product_View_Media e non SMDesign_ColorswatchProductView_Block_Product_View_Media come ho inizialmente pensato. Tuttavia, lo stesso identico problema si applica ancora.

L'estensione SMDesign SMDZoom riscrive classe block 'Catalogo / product_view_media'. L'XML per che assomiglia a questo:

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

Voglio riscrivere ancora una volta questa classe. Voglio riscrivere la classe del catalogo / product_view_media che questo modulo smdzoom sta riscrivendo. Può essere fatto? Quale sarebbe l'aspetto di configurazione XML come nel mio modulo per fare questo?

Attualmente questo è il mio modulo di file init xml:

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

e il file del modulo 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>

La mia nuova classe appare semplicemente come questo per il test:

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

sto testando questo visualizzando sentori percorso del modello, e sto vedendo blocco SMDesign ancora in uso sulla pagina di visualizzazione del prodotto. Che cosa sto facendo di sbagliato?

È stato utile?

Soluzione

ho messo il nodo <depends> nella posizione sbagliata nel file xml init del mio modulo. Deve essere nidificato all'interno di nodo del nome del modulo, in questo modo:

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

Altri suggerimenti

Questa parte qui:

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

solo vi aiuterà se l'istanza originale è fatto tramite createBlock('colorswatchproductview/product_view_media)
questo è improbabile poiché la prima estensione è utilizzando una riscrittura, vale a dire che vogliono essere mostrato ovunque
createBlock('catalog/product_view_media') viene utilizzato

Una possibilità sarebbe quella di utilizzare una riscrittura per lo stesso blocco

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

e poi nella tua classe blocco estendere l'altro blocco estensione

class Goorin_ColorswatchProductView_Block_Product_View_Media extends SMDesign_ColorswatchProductView_Block_Product_View_Media

Per far funzionare tutto questo proprio interno deve essere caricato dopo il primo. Durante le mie prove qui http://magebase.com/magento-tutorials/magento-extension -clashes-vincitori-e-perdenti / ho lavorato che l'ordine di caricamento si basa su l'ordine alfabetico della vostra app / etc file / modules / xml. In alternativa questo ordine può essere influenzato utilizzando un nodo Dipende (SMDesign_ColorswatchProductView).

Stai visualizzando il messaggio di errore in quanto si sta cercando di rendere il blocco in modo isolato, ma è necessario un prodotto che viene caricato da suo blocco padre:

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

Questo è il motivo per ri-scrittura di classi di base fa schifo.

ripresa da lì hip qui, ma credo che la soluzione migliore sarebbe quella di estendere l'applicazione del campione di colore Mage_Catalog_Blog_Product_View_Media e poi fare il modulo dipenderà dal modulo di campione di colore.

Alan Tempesta risposto ad una simile domanda qui .

Ancora meglio sarebbe cercare di fare tutto ciò che si sta cercando di fare attraverso un osservatore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a magento.stackexchange
scroll top