2010-08-12 36 views
2

Le profil de produits d'importation vous permet de filtrer les produits à exporter par nom, par ... Je veux avoir la même fonctionnalité dans la page de gestion des produits. L'administrateur va filtrer les produits dans la grille puis cliquer sur un bouton "Exporter" pour obtenir les produits filtrés.exporter des produits à csv à partir de la grille de produits d'administration

Comment puis-je ajouter le bouton "exporter"? Quel modèle/bloc dois-je remplacer? Lorsque l'administrateur clique sur le bouton, comment puis-je obtenir la collection filtrée? Comment puis-je exporter la collection filtrée dans un fichier csv? Puis-je utiliser le flux de données pour cela?

Merci

Répondre

9

Vous aurez besoin de mettre en œuvre une nouvelle massAction dans le contrôleur de produit admin. Une bonne façon de commencer est de regarder le contrôleur de produit et de voir comment les autres massActions sont implémentées. Jetons un coup d'oeil ... D'abord vous devrez ajouter une déclaration d'un massAction à une grille. Cela peut être fait dans app/code/core/Mage/Adminhtml/Bloc/Catalogue/Produit/Grid.php. Vous devez ajouter ce qui suit dans la méthode _prepareMassaction:

$this->getMassactionBlock()->addItem('export', array(
       'label' => Mage::helper('catalog')->__('Export to CSV'), 
       'url' => $this->getUrl('*/*/massExport', array('_current'=>true)), 
      )); 

Maintenant, vous devrez mettre en œuvre cette nouvelle action dans le contrôleur produit (app/code/core/Mage/Adminhtml/contrôleurs/Catalogue/ProductController.php) :

public function massExportAction() 
    { 
     $productIds = $this->getRequest()->getParam('product'); 
     if (!is_array($productIds)) { 
      $this->_getSession()->addError($this->__('Please select product(s).')); 
      $this->_redirect('*/*/index'); 
     } 
     else { 
      //write headers to the csv file 
      $content = "id,name,url,sku\n"; 
      try { 
       foreach ($productIds as $productId) { 
        $product = Mage::getSingleton('catalog/product')->load($productId); 
        $content .= "\"{$product->getId()}\",\"{$product->getName()}\",\"{$product->getProductUrl()}\",\"{$product->getSku()}\"\n"; 
       } 
      } catch (Exception $e) { 
       $this->_getSession()->addError($e->getMessage()); 
       $this->_redirect('*/*/index'); 
      } 
      $this->_prepareDownloadResponse('export.csv', $content, 'text/csv'); 
     } 

    } 

le code est principalement copié à partir du massDeleteAction, mais au lieu de supprimer des produits vous devez ajouter à la variable de contenu $. Une fois que vous avez créé le contenu de votre exportation csv (vous aurez probablement besoin d'ajouter d'autres champs), vous devez appeler la méthode _prepareDownloadResponse de la classe de contrôleur. Voilà, vous avez votre exportation personnalisée en place!

Sur une note finale, une fois que vous êtes satisfait des changements se souviennent de les déplacer à votre code local afin que votre installation magento reste mise à jour à l'épreuve :)

+0

Où est le contrôleur de produit d'administration? Je ne peux pas voir massAction dans Mage_Adminhtml_Catalog_ProductController Si vous pouvez trouver le code ce sera génial. merci – pablo

+0

@Pablo: J'ai modifié ma réponse. S'il vous plaît voir ci-dessus pour un exemple de code de travail ... – silvo

+0

Au lieu de créer le csv moi-même, est-il possible de passer les identifiants de produit ou des filtres au flux de données pour créer le csv? Est-il possible d'ajouter un filtre de catégorie à la grille? – pablo