Cómo crear un nuevo observador en el evento catalog_product_save_before


24

Quiero la generación automática de metadescripción para mis productos creando un nuevo observador en el evento catalog_product_save_before con este código:

public function autoMetaDescription($observer) {
     $product = $observer->getEvent()->getProduct();
     $metaDescription = "Buy ". $product->getName()." for Rs ".number_format($product->getFinalPrice(), 2)." at sitename.com | New Book | Authorised seller for ". $product->getAttributeText('publisher');
    $product->setMetaDescription($metaDescription);
} 

¿En qué carpeta / archivos tengo que escribir el código?


En este método, asegúrese de que no haya problemas para cargar productos csv.
zus

Respuestas:


51

Necesitas crear un nuevo módulo.
Digamos que es Easylife_Meta.
app/etc/modules/Easylife_Meta.xml- el archivo de declaración

<?xml version="1.0"?>
<config>
    <modules>
        <Easylife_Meta>
            <codePool>local</codePool>
            <active>true</active>
            <depends>
                <Mage_Catalog />
            </depends>
        </Easylife_Meta>
    </modules>
</config>

app/code/local/Easylife/Meta/etc/config.xml - el archivo de configuración

<?xml version="1.0"?>
<config>
    <modules>
        <Easylife_Meta>
            <version>0.0.1</version>
        </Easylife_Meta>
    </modules>
    <global>
        <models>
            <easylife_meta>
                <class>Easylife_Meta_Model</class>
            </easylife_meta>
        </models>
    </global>
    <adminhtml>
        <events>
            <catalog_product_save_before><!-- observe the event -->
                <observers>
                    <easylife_meta>
                        <class>easylife_meta/observer</class>
                        <method>autoMetaDescription</method>
                    </easylife_meta>
                </observers>
            </catalog_product_save_before>
        </events>
    </adminhtml>
</config>

app/code/local/Easylife/Meta/Model/Observer.php - la clase de observación

<?php 
class Easylife_Meta_Model_Observer {
    public function autoMetaDescription($observer) {
        $product = $observer->getEvent()->getProduct();
        $metaDescription = "Buy ". $product->getName()." for Rs ".number_format($product->getFinalPrice(), 2)." at sitename.com | New Book | Authorised seller for ". $product->getAttributeText('publisher');
        $product->setMetaDescription($metaDescription);
    } 
}

Borre el caché cuando haya terminado.


2
¿No debería ser en <class>easylife_meta_Model_Observer</class>lugar de <class>easylife_meta/observer</class>adentro config.xml?
kashish

2
@kashish NO, no debería.
Marius

@Marius Estoy usando Magento 1.9, el cambio de clase al nombre completo de la clase me ayudó
TheKitMurkit

@TheKitMurkit Debería funcionar en ambos sentidos. El uso del alias permite una ejecución adecuada en caso de que su observador se sobrescriba.
Marius
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.