Comment créer un nouvel observateur sur l'événement catalog_product_save_before


24

Je veux la génération automatique de méta description pour mes produits en créant un nouvel observateur sur l'événement catalog_product_save_before avec ce code:

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

Dans quel dossier / fichiers dois-je écrire le code?


Dans cette méthode, assurez-vous qu'il n'y a pas de problème pour le téléchargement des produits csv.
zus

Réponses:


51

Vous devez créer un nouveau module.
Appelons ça Easylife_Meta.
app/etc/modules/Easylife_Meta.xml- le dossier de déclaration

<?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 - le fichier de configuration

<?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 classe d'observation

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

Videz le cache lorsque vous avez terminé.


2
Devrait - il pas au <class>easylife_meta_Model_Observer</class>lieu de <class>easylife_meta/observer</class>dans config.xml?
kashish

2
@kashish NON ça ne devrait pas.
Marius

@Marius J'utilise Magento 1.9, le changement de classe pour le nom complet de la classe m'a aidé
TheKitMurkit

@TheKitMurkit Cela devrait fonctionner dans les deux sens. L'utilisation de l'alias permet une exécution correcte au cas où votre observateur serait écrasé.
Marius
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.