Как экспортировать коллекцию в CSV в Magento? - PullRequest
0 голосов
/ 08 февраля 2012

Я хочу сделать cronjob, чтобы экспортировать коллекцию в csv для сравнения цен ciao и kelkoo.

Где я могу увидеть пример в ядре Magento ??

Я вижу в следующем месте:

Mage/Dataflow/Model/Batch/export.php

но этот файл ничего не находит.

Может быть, можно посмотреть, как работать в:

Mage/importexport/

1 Ответ

4 голосов
/ 08 февраля 2012

Посмотрите на Mage_Adminhtml_Block_Widget_Grid::getCsv() и Mage_Adminhtml_Block_Widget_Grid::getCsvFile() в качестве примера.
Вот соответствующая часть первого в качестве примера (комментарии, добавленные мной).

public function getCsv()
{
    $csv = '';
    $this->_isExport = true;
    $this->_prepareGrid(); // add the attributes to load, maybe required filters
    $this->getCollection()->getSelect()->limit(); // only unique records
    $this->getCollection()->setPageSize(0); // no paging, all records matching the set filters
    $this->getCollection()->load();
    $this->_afterLoadCollection(); // load additional data on the collection items if needed

    $data = array();
    // This foreach block adds headers to the columns
    foreach ($this->_columns as $column) {
        if (!$column->getIsSystem()) {
            $data[] = '"'.$column->getExportHeader().'"';
        }
    }
    $csv.= implode(',', $data)."\n";

    // $column is an instance of Mage_Adminhtml_Block_Widget_Grid_Column
    // Just a wrapper for getting the values from the collection items
    foreach ($this->getCollection() as $item) {
        $data = array();

        foreach ($this->_columns as $column) {
            if (!$column->getIsSystem()) {
                $data[] = '"' . str_replace(array('"', '\\'), array('""', '\\\\'),
                    $column->getRowFieldExport($item)) . '"';
            }
        }
        $csv.= implode(',', $data)."\n";
    }

    // Grid totals are only used by reports
    if ($this->getCountTotals())
    {
        $data = array();
        foreach ($this->_columns as $column) {
            if (!$column->getIsSystem()) {
                $data[] = '"' . str_replace(array('"', '\\'), array('""', '\\\\'),
                    $column->getRowFieldExport($this->getTotals())) . '"';
            }
        }
        $csv.= implode(',', $data)."\n";
    }

    return $csv;
}
...