Cách tạo người quan sát mới trên danh mục sự kiện_product_save_b Before


24

Tôi muốn tự động tạo mô tả meta cho các sản phẩm của mình bằng cách tạo một người quan sát mới trên danh mục sự kiện_product_save_b Before với mã này:

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

Trong thư mục / tập tin nào tôi phải viết mã?


Trong phương pháp này, đảm bảo không có vấn đề gì khi tải lên sản phẩm csv.
zus

Câu trả lời:


51

Bạn cần tạo một mô-đun mới.
Hãy gọi nó Easylife_Meta.
app/etc/modules/Easylife_Meta.xml- hồ sơ khai

<?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 - tập tin cấu hình

<?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 - lớp quan sát

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

Xóa bộ nhớ cache khi bạn hoàn tất.


2
Không nên <class>easylife_meta_Model_Observer</class>thay thế <class>easylife_meta/observer</class>trong config.xml?
kashish

2
@kashish KHÔNG nên.
Marius

@Marius Tôi đang sử dụng Magento 1.9, việc đổi lớp thành tên lớp đầy đủ đã giúp tôi
TheKitMurkit

@TheKitMurkit Nó nên hoạt động cả hai cách. Sử dụng bí danh cho phép thực thi đúng trong trường hợp người quan sát của bạn bị ghi đè.
Marius
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.