测试版本: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);
}