Удалить неиспользуемые изображения товара в magento - PullRequest
6 голосов
/ 02 декабря 2010

Модуль image-clean выводит список неиспользуемых изображений в / media / catalog / product и позволяет вам их удалять. Есть ли скрипт, который автоматически удаляет неиспользуемые изображения без участия пользователя? Я хочу запустить этот скрипт вручную или использовать задание cron каждую ночь.

Спасибо

Ответы [ 2 ]

10 голосов
/ 03 декабря 2010

Если вы посмотрите на источник для контроллера администратора этого модуля, вы увидите код, который они используют для массового удаления

#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 "идентификаторы модели, использует эти идентификаторы для выполнения удаления.Итак, код ключа в этом действии:

$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 используются для отслеживания того, какие изображения больше не нужны.Похоже, что модуль создает их (т.е. запускает проверку неиспользуемых изображений) в действии newAction с методом compareList помощника по умолчанию.

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 голос
/ 14 марта 2014

Здесь есть скрипт удаления образов мультимедиа, обязательно сделайте резервную копию базы данных и носителя заранее. Также там есть оператор SQL, который удаляет записи галереи, которым больше не присвоен продукт.

http://www.codefuel.co.uk/magento-removing-media-that-doesnt-belong-to-products/ Я использовал это на magento версии 1.8.x, и он прекрасно работает.

...