экспорт продуктов в CSV из сетки продуктов администратора - PullRequest
2 голосов
/ 12 августа 2010

Профиль импорта товаров позволяет отфильтровывать, какие товары экспортировать по имени, ску ... Я хочу иметь такую ​​же функциональность на странице управления продуктами. Администратор отфильтрует продукты в сетке, а затем нажмите кнопку «Экспорт», чтобы получить отфильтрованные продукты.

Как добавить кнопку «экспорт»? какой шаблон / блок мне нужно переопределить? Когда администратор нажимает кнопку, как я могу получить отфильтрованную коллекцию? Как я могу экспортировать отфильтрованную коллекцию в CSV-файл? Могу ли я использовать поток данных для этого?

Спасибо

1 Ответ

9 голосов
/ 12 августа 2010

Вам потребуется реализовать новую massAction в контроллере продукта администратора.Хороший способ начать - взглянуть на контроллер продукта и посмотреть, как реализованы другие массовые действия.

Давайте посмотрим ... Сначала вам нужно добавить объявление массива в сетку.,Это можно сделать в app / code / core / Mage / Adminhtml / Block / Catalog / Product / Grid.php.Вам необходимо добавить следующее в метод _prepareMassaction:

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

Теперь вам нужно реализовать это новое действие в контроллере продукта (app / code / core / Mage / Adminhtml / controllers / 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');
        }

    }

Код в основном копируется из massDeleteAction, но вместо удаления продуктов вы должны добавить переменную $ content.После того как вы закончили создавать содержимое экспорта в csv (вам, вероятно, понадобится добавить в него другие поля), вам нужно вызвать метод _prepareDownloadResponse класса контроллера.Вот и все, у вас есть пользовательский экспорт на месте!

В заключение, как только вы будете довольны изменениями, не забудьте переместить их в локальный пул кодов , чтобы установка magento осталась.Доказательство обновления:)

...