Magento刪除產品同時刪除圖片

在Magento後臺刪除產品時,默認不會刪除產品的圖片,若是長期不清理這些廢棄的圖片,會致使Media目錄下的文件愈來愈多,浪費服務器空間,爲了實現刪除產品的同時刪除圖片,網絡上常見的方法是修改Mage_Catalog_Model_Product的delete()方法:
public function delete()
{
    parent::delete();
    Mage::dispatchEvent($this->_eventPrefix.'_delete_after_done', array($this->_eventObject=>$this));
    return $this;
}

修改成php

public function delete()
{
    parent::delete();
    Mage::dispatchEvent($this->_eventPrefix.'_delete_after_done', array($this->_eventObject=>$this));
    foreach ($this->getMediaGallery('images') as $image) {
        $image_path = $this->getMediaConfig()->getMediaPath($image['file']);
        if (file_exists($image_path)) {
            @unlink($image_path);
        }
    }
    return $this;
}
這個方法是經過重寫Model的方法實現的,下面咱們將採用事件觸發的方法來實現,咱們觀察在delete()函數中觸發了catalog_product_delete_after_done事件,所以咱們能夠寫一個插件,當觀察到這個事件時刪除產品的圖片。
 
1 新建模塊
在/app/code/local/MagentoBoy/DeleteProductImages目錄下新建一個模塊MagentoBoy_DeleteProductImages,並添加模塊文件:
/app/etc/modules/MagentoBoy_DeleteProductImages.xml
<?xml version="1.0"?>
<config>
    <modules>
        <MagentoBoy_DeleteProductImages>
            <active>true</active>
            <codePool>local</codePool>
        </MagentoBoy_DeleteProductImages>
    </modules>
</config>
並添加配置文件:
/app/code/local/MagentoBoy/DeleteProductImages/etc/config.xml
<?xml version="1.0"?>
<config>
    <modules>
        <MagentoBoy_DeleteProductImages>
            <version>0.1.0</version>
        </MagentoBoy_DeleteProductImages>
    </modules>
</config>
2 添加Observer
/app/code/local/MagentoBoy/DeleteProductImages/Model/Observer.php
<?php

class MagentoBoy_DeleteProductImages_Model_Observer
{
    public function processProductAfterDeleteEvent(Varien_Event_Observer $observer)
    {
        $eventProduct = $observer->getEvent()->getProduct();
        if ($eventProduct && $eventProduct->getId()) {
            foreach ($eventProduct->getMediaGallery('images') as $image) {
                $image_path = $eventProduct->getMediaConfig()->getMediaPath($image['file']);
                if (file_exists($image_path)) {
                    @unlink($image_path);
                }
            }
        }
        return $this;
    }
}
並在config.xml中添加models和events
 
<config>
    <global>
        <models>
            <deleteproductimages>
                <class>MagentoBoy_DeleteProductImages_Model</class>
            </deleteproductimages>
        </models>
        <events>
            <catalog_product_delete_after_done>
                <observers>
                    <deleteproductimages>
                        <class>deleteproductimages/observer</class>
                        <method>processProductAfterDeleteEvent</method>
                    </deleteproductimages>
                </observers>
            </catalog_product_delete_after_done>
        </events>
    </global>
</config>
這樣就實現了在Magento中刪除產品同時刪除圖片的功能,使用事件觸發的方式更爲靈活,方便在多個模塊中擴展功能。
相關文章
相關標籤/搜索