删除magento中未使用的产品图像

时间:2010-12-02 20:50:24

标签: image magento product

image-clean模块列出/ media / catalog / product下的未使用图像,并允许您删除它们。 是否有脚本在没有用户交互的情况下自动删除未使用的图像 我想手动运行此脚本或每晚使用cron作业。

由于

2 个答案:

答案 0 :(得分:10)

如果您查看该模块的管理控制器的源代码,您可以看到他们用于执行批量删除的代码

#File: app/code/local/Mage/Imaclean/controllers/Adminhtml/ImacleanController.php
public function massDeleteAction() {
    $imacleanIds = $this->getRequest()->getParam('imaclean');
    if(!is_array($imacleanIds)) {
        Mage::getSingleton('adminhtml/session')->addError(Mage::helper('adminhtml')->__('Please select item(s)'));
    } else {
        try {
            $model = Mage::getModel('imaclean/imaclean');
            foreach ($imacleanIds as $imacleanId) {
                $model->load($imacleanId);
                unlink('media/catalog/product'. $model->getFilename());
                $model->setId($imacleanId)->delete();
            }
            Mage::getSingleton('adminhtml/session')->addSuccess(
                Mage::helper('adminhtml')->__(
                    'Total of %d record(s) were successfully deleted', count($imacleanIds)
                )
            );
        } catch (Exception $e) {
            Mage::getSingleton('adminhtml/session')->addError($e->getMessage());
        }
    }
    $this->_redirect('*/*/index');
}

因此,此控制器操作接受许多“imaclean / imaclean”模型ID,使用这些ID执行删除。因此,该操作中的关键代码是

$imacleanIds = $this->getRequest()->getParam('imaclean');
$model = Mage::getModel('imaclean/imaclean');
foreach ($imacleanIds as $imacleanId) {
    $model->load($imacleanId);
    unlink('media/catalog/product'. $model->getFilename());
    $model->setId($imacleanId)->delete();
}

因此,您可以使用类似

的独立版本复制上述代码
//itterates through all 'imaclean/imaclean' models in the database
$models = Mage::getModel('imaclean/imaclean')->getCollection();
foreach ($models as $model) {
    unlink('media/catalog/product'. $model->getFilename());
    $model->setId($model->getId())->delete();
}

最后,看起来像“imaclean / imaclean”模型用于跟踪不再需要哪些图像。看起来模块使用默认帮助器的compareList方法在newAction中创建这些(即运行未检查图像的检查)。

public function newAction(){    
    Mage::helper('imaclean')->compareList();
    $this->_redirect('*/*/');
}

所以,我们可以将它添加到我们脚本的开头,以及事实上的Magento初始化,它应该为我们提供我们需要的东西。

#File: cleanup.php
require_once "app/Mage.php";
$app = Mage::app("default");

Mage::helper('imaclean')->compareList();
$models = Mage::getModel('imaclean/imaclean')->getCollection();
foreach ($models as $model) {
    unlink('media/catalog/product'. $model->getFilename());
    $model->setId($model->getId())->delete();
}   

至少应该让你开始。祝好运!

答案 1 :(得分:1)

这里有一个关于删除媒体图像的脚本,请务必事先备份数据库和媒体。此外还有一个SQL语句,它删除了没有任何产品分配的图库记录。

http://www.codefuel.co.uk/magento-removing-media-that-doesnt-belong-to-products/ 我在magento 1.8.x版上使用过它,效果很好。