2010-12-02 19 views
6

El módulo image-clean enumera las imágenes no utilizadas en/media/catalog/product y le permite eliminarlas. ¿Hay una secuencia de comandos que elimine automáticamente las imágenes no utilizadas sin interacción del usuario? Quiero ejecutar este script manualmente o usar un trabajo cron todas las noches.Eliminar imágenes de productos no utilizados en magento

Gracias

Respuesta

10

Si se echa un vistazo a la fuente para el controlador de administración de ese módulo, se puede ver el código que utilizan para llevar a cabo una masa borrar

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

Por lo tanto, esta acción del controlador acepta un número de ids de modelos "imaclean/imaclean", usa estos ids para realizar una eliminación. Por lo tanto, el código clave en que la acción es

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

Así, se podría replicar el código anterior en una versión independiente con algo como

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

Por último, se ve como una "imaclean/imaclean "Los modelos se utilizan para realizar un seguimiento de las imágenes que ya no se necesitan. Parece que el módulo los crea (es decir, ejecuta una comprobación de las imágenes no utilizadas) en la nueva Acción con el método compareList del ayudante predeterminado.

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

Por lo tanto, podemos añadir que al inicio de nuestro script, así como la inicialización de Magento de facto, lo que nos debe dar lo que necesitamos.

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

Eso debería al menos comenzar. ¡Buena suerte!

+0

No quiero usar un módulo para eso porque demasiados módulos confunden al administrador. Tampoco necesito otra tabla db solo para borrar imágenes antiguas. Trataré de tomar solo el código que necesito del módulo y publicar el resultado. Gracias – pablo

+0

¿Alguna vez se le ocurrió una solución? – styks

+0

@Alan Storm si utilizamos cleanup.php anterior. ¿afecta a nuestra otra imagen? o solo borre esas imágenes que existen pero su producto eliminado? – MageDev

1

Aquí hay una secuencia de comandos para eliminar imágenes de medios, asegúrese de hacer una copia de seguridad de la base de datos y los medios de antemano. También hay una instrucción SQL allí que elimina los registros de la galería que ya no tienen ningún producto asignado.

http://www.codefuel.co.uk/magento-removing-media-that-doesnt-belong-to-products/ Lo he usado en la versión 1.8.x de magento y funciona muy bien.

+0

tenga cuidado, este código tiene algunos riesgos de seguridad potenciales, pero sigue siendo útil – Flyingmana

Cuestiones relacionadas