Magento后台产品管理,删除产品同时删除图片

在Magento ver. 1.9.2.4版本中,通过覆盖核心代码实现产品管理功能优化。具体操作包括复制Product.php到local代码池并修改delete()函数,以便在后台删除产品时能同时删除相关图片。此外,还需修改Attribute/Backend/Media.php文件的afterSave()函数,以确保图片在产品更新时的正确处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

测试版本:Magento ver. 1.9.2.4
将app/code/core/Mage/Catalog/Model/下的Product.php
拷贝到
app/code/local/Mage/Catalog/Model/下
找到delete()函数修改成

public function delete()
    {   
        foreach ($this->getMediaGallery('images') as $image){
            $image_path = $this->getMediaConfig()->getMediaPath($image['file']);
            if(file_exists($image_path)){
                @unlink($image_path);
            }
        }
        parent::delete();
        Mage::dispatchEvent($this->_eventPrefix.'_delete_after_done', array($this->_eventObject=>$this));
        return $this;
    }

产品管理后台移除图片时同时删除图片
找到app/code/core/Mage/Catalog/Model/Product/Attribute/Backend/Media.php
找到afterSave()函数
改成

public function afterSave($object)
    {
        if ($object->getIsDuplicate() == true) {
            $this->duplicate($object);
            return;
        }

        $attrCode = $this->getAttribute()->getAttributeCode();
        $value = $object->getData($attrCode);
        if (!is_array($value) || !isset($value['images']) || $object->isLockedAttribute($attrCode)) {
            return;
        }

        $storeId = $object->getStoreId();

        $storeIds = $object->getStoreIds();
        $storeIds[] = Mage_Core_Model_App::ADMIN_STORE_ID;

        // remove current storeId
        $storeIds = array_flip($storeIds);
        unset($storeIds[$storeId]);
        $storeIds = array_keys($storeIds);

        $images = Mage::getResourceModel('catalog/product')
            ->getAssignedImages($object, $storeIds);

        $picturesInOtherStores = array();
        foreach ($images as $image) {
            $picturesInOtherStores[$image['filepath']] = true;
        }

        //修改开始
        $toDelete = array();
        $filesToValueIds = array();
        foreach ($value['images'] as &$image) {
            if(!empty($image['removed'])) {
                if(isset($image['value_id']) && !isset($picturesInOtherStores[$image['file']])) {

                    //var_dump($image);
                    //echo $image['url'];
                    //exit();
                    if(file_exists($image['url'])){
                        @unlink($image['url']);
                    }

                    $toDelete[] = $image['value_id'];

                }
                continue;
            }
            //修改结束

            if(!isset($image['value_id'])) {
                $data = array();
                $data['entity_id']      = $object->getId();
                $data['attribute_id']   = $this->getAttribute()->getId();
                $data['value']          = $image['file'];
                $image['value_id']      = $this->_getResource()->insertGallery($data);
            }

            $this->_getResource()->deleteGalleryValueInStore($image['value_id'], $object->getStoreId());

            // Add per store labels, position, disabled
            $data = array();
            $data['value_id'] = $image['value_id'];
            $data['label']    = $image['label'];
            $data['position'] = (int) $image['position'];
            $data['disabled'] = (int) $image['disabled'];
            $data['store_id'] = (int) $object->getStoreId();

            $this->_getResource()->insertGalleryValueInStore($data);
        }

        $this->_getResource()->deleteGallery($toDelete);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值