коллекция не загружается в файл pdf в magento

Мне нужно экспортировать данные заказов в формате pdf в Magento

Но я получил эту ошибку:

Неустранимая ошибка: вызов неопределенного метода Mage_Reports_Model_Resource_Report_Collection::getSelect() в app/code/core/Mage/Adminhtml/Block/Widget/Grid.php в строке 1683

мой код для действия getpdf

public function getPdfFile(){

    $this->_isExport = true;
    $this->_prepareGrid();

    $this->getCollection()->getSelect()->limit();
    $this->getCollection()->setPageSize(0);
    $this->getCollection()->load();
    $this->_afterLoadCollection();

    $pdf = new Zend_Pdf();
    $page = new Zend_Pdf_Page(Zend_Pdf_Page::SIZE_A4);
    $font = Zend_Pdf_Font::fontWithName(Zend_Pdf_Font::FONT_TIMES);
    $page->setFont($font, 12);
    $width = $page->getWidth();
    $i=0;
    foreach ($this->_columns as $column) {
    if (!$column->getIsSystem()) {
        $i+=10;
        $header = $column->getExportHeader();                
        $page->drawText($header, $i, $page->getHeight()-20);                
        $width = $font->widthForGlyph($font->glyphNumberForCharacter($header));
        $i+=($width/$font->getUnitsPerEm()*12)*strlen($header)+10;
     }
    }
    $pdf->pages[] = $page;
    return $pdf->render();
}

и мой код действия контроллера

public function exportPdfAction(){

$fileName = 'daily_orders.pdf';        

$content = $this->getLayout()->createBlock('reportneworders/adminhtml_reportneworders_grid')->getPdfFile();

$this->_prepareDownloadResponse($fileName, $content);

}

сетка работает корректно в админке.

csv и excel данные экспортируются успешно, но pdf не может. кто-нибудь, пожалуйста, помогите мне.


person dpluv    schedule 01.05.2014    source источник


Ответы (1)


Оператор foreach ($this->_columns as $column), который у вас есть, печатает только заголовки сетки. Вы также должны перебирать коллекцию предметов. Перед строкой $pdf->pages[] = $page; добавьте что-то вроде этого:

$j = 40;
foreach ($collection as $item) {
  //  add code here, which is printing $item information
  //  Example:
  $y = $page->getHeight()-$j;
  $page->drawText($item->getincrement_id(), 20, $y);
  $page->drawText($item->getcreated_at(), 50, $y);
  // etc.
  $j += 20;
}

Кроме того, в моем собственном коде, чтобы экспорт PDF реагировал на фильтры сетки, мне пришлось изменить код function exportPdfAction() на следующий (в противном случае фильтры игнорировались):

public function exportPdfAction(){
   $fileName = 'daily_orders.pdf';        
   $grid = $this->getLayout()->createBlock('reportneworders/adminhtml_reportneworders_grid');
   $this->_initReportAction($grid);
   $content = $grid->getPdfFile();
   $this->_prepareDownloadResponse($fileName, $content);
}

Как видите, я добавил $this->_initReportAction($grid);

person EcoG    schedule 03.05.2014