2010-12-02 23 views

Répondre

10

Si vous jetez un oeil à la source pour le contrôleur d'administration de ce module, vous pouvez voir le code qu'ils utilisent pour effectuer une masse supprimer

#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'); 
} 

Ainsi, cette action du contrôleur accepte un certain nombre des ID de modèle "imaclean/imaclean", utilise ces identifiants pour effectuer une suppression. Ainsi, le code clé dans cette action est

$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(); 
} 

Ainsi, vous pouvez répliquer le code ci-dessus dans une version autonome avec quelque chose comme

//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(); 
} 

Enfin, il ressemble à un « imaclean/imaclean "Les modèles sont utilisés pour suivre quelles images ne sont plus nécessaires. Il semble que le module les crée (c'est-à-dire exécute une vérification des images inutilisées), dans la nouvelle action avec la méthode compareList de l'assistant par défaut.

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

Ainsi, nous pouvons ajouter que le début de notre script, ainsi que l'initialisation de Magento de facto, ce qui devrait nous donner ce que nous avons besoin.

#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(); 
} 

Cela devrait au moins vous aider à démarrer. Bonne chance!

+0

Je ne veux pas utiliser un module pour cela car trop de modules confondent l'admin. Je n'ai pas besoin d'une autre table db pour effacer les vieilles images. Je vais essayer de prendre seulement le code dont j'ai besoin du module et afficher le résultat. Merci – pablo

+0

Avez-vous déjà trouvé une solution? – styks

+0

@Alan Storm si nous utilisons ci-dessus cleanup.php. est-ce que cela affecte notre autre image? ou seulement supprimer ces images qui existent mais son produit supprimé? – MageDev

1

Il existe un script sur la suppression des images multimédias, veillez à sauvegarder la base de données et les médias avant de les utiliser. Il y a aussi une instruction SQL là-bas qui supprime les enregistrements de galerie auxquels aucun produit n'est assigné. Je l'ai utilisé sur magento version 1.8.x et ça marche très bien.

+0

attention, ce code présente des risques de sécurité potentiels, mais toujours utile – Flyingmana