kartik\export\ExportMenu::run PHP Метод

run() публичный Метод

public run ( )
    public function run()
    {
        $this->initI18N(__DIR__);
        $this->initColumnSelector();
        $this->setVisibleColumns();
        $this->initExport();
        if (!$this->_triggerDownload) {
            $this->registerAssets();
            echo $this->renderExportMenu();
            return;
        }
        if ($this->timeout >= 0) {
            set_time_limit($this->timeout);
        }
        if (!$this->_doNotStream) {
            $this->clearOutputBuffers();
        }
        $config = ArrayHelper::getValue($this->exportConfig, $this->_exportType, []);
        if ($this->_exportType === self::FORMAT_PDF) {
            $path = Yii::getAlias($this->pdfLibraryPath);
            if (!PHPExcel_Settings::setPdfRenderer($this->pdfLibrary, $path)) {
                throw new InvalidConfigException("The pdf rendering library '{$this->pdfLibrary}' was not found or installed at path '{$path}'.");
            }
        }
        if (empty($config['writer'])) {
            throw new InvalidConfigException("The 'writer' setting for PHPExcel must be setup in 'exportConfig'.");
        }
        $this->initPHPExcel();
        $this->initPHPExcelWriter($config['writer']);
        $this->initPHPExcelSheet();
        $this->generateBeforeContent();
        $this->generateHeader();
        $this->generateBody();
        $row = $this->generateFooter();
        $this->generateAfterContent($row);
        $writer = $this->_objPHPExcelWriter;
        $sheet = $this->_objPHPExcelSheet;
        if ($this->autoWidth) {
            foreach ($this->getVisibleColumns() as $n => $column) {
                $sheet->getColumnDimension(self::columnName($n + 1))->setAutoSize(true);
            }
        }
        $this->raiseEvent('onRenderSheet', [$sheet, $this]);
        if (!$this->stream) {
            $this->folder = trim(Yii::getAlias($this->folder));
            if (!file_exists($this->folder)) {
                $this->folder = Yii::getAlias('@webroot');
            }
            $file = self::slash($this->folder) . $this->filename . '.' . $config['extension'];
            $writer->save($file);
            if ($this->streamAfterSave) {
                $this->clearOutputBuffers();
                $this->setHttpHeaders();
                readfile($file);
                if ($this->deleteAfterSave) {
                    @unlink($file);
                }
                $this->destroyPHPExcel();
                exit;
            } else {
                $this->registerAssets();
                echo $this->renderExportMenu();
                if ($this->_triggerDownload && $this->_doNotStream && $this->afterSaveView !== false) {
                    $config = ArrayHelper::getValue($this->exportConfig, $this->_exportType, []);
                    if (!empty($config)) {
                        $file = $this->filename . '.' . $config['extension'];
                        echo $this->render($this->afterSaveView, ['file' => $file, 'icon' => ($this->fontAwesome ? 'fa fa-' : 'glyphicon glyphicon-') . $config['icon'], 'href' => Url::to([self::slash($this->linkPath, '/') . $file])]);
                    }
                }
            }
            if ($this->deleteAfterSave) {
                @unlink($file);
            }
        } else {
            $this->clearOutputBuffers();
            $this->setHttpHeaders();
            $writer->save('php://output');
            $this->destroyPHPExcel();
            exit;
        }
    }

Usage Example

Пример #1
0
 function run()
 {
     // We need this because this is a widget within a widget
     // Thus there has been an extra ob_start()
     $download = !empty($_POST) && !empty($_POST[$this->exportRequestParam]) && $_POST[$this->exportRequestParam];
     if ($download) {
         ob_end_clean();
     }
     return parent::run();
 }