Главная » Статьи » OpenCart. Выгрузка заказов в Excel. Часть 3

OpenCart. Выгрузка заказов в Excel. Часть 3

OpenCart. Выгрузка заказов в Excel

От автора: приветствую вас, друзья. Итак, мы продолжаем цикл статей, посвященных знакомству с одной из популярнейших CMS для создания интернет-магазинов – OpenCart (Оперкарт). В этой и нескольких следующих статьях мы будем работать непосредственно с кодом CMS и реализуем выгрузку товаров из заказов за выбранный период в Excel. В этой статье мы занимаемся написанием обработчика, формирующего выгрузку в Excel.

Итак, в прошлой статье мы составили ajax-запрос, отправляющий даты выборки на сервер. На сервере мы создали в контроллере ControllerSaleOrder экшен wfm_export, где пока что находится простейший код, распечатывающий полученные данные. Теперь заменим данный код следующим:

public function wfm_export(){ if(isset($_GET['wfm_start_date'], $_GET['wfm_end_date'])){ $wfm_start_date = trim($_GET['wfm_start_date']); $wfm_end_date = trim($_GET['wfm_end_date']); if( empty($wfm_start_date) || empty($wfm_end_date)){ die('Error! Field required'); } $file = DIR_SYSTEM . '../wfm_export_orders/file.xlsx'; require_once DIR_SYSTEM . '../wfm_export_orders/phpexcel/Classes/PHPExcel.php'; $this->load->model('sale/order'); $results = $this->model_sale_order->getOrdersForExport($wfm_start_date, $wfm_end_date); if($results){ $objCreate = new PHPExcel; $page = $objCreate->setActiveSheetIndex(0); $i = 2; $style_header = [ 'font' => [ 'bold' => true, 'size' => 12, ], 'alignment' => [ 'horizontal' => PHPExcel_STYLE_ALIGNMENT::HORIZONTAL_CENTER, 'vertical' => PHPExcel_STYLE_ALIGNMENT::VERTICAL_CENTER, ], 'fill' => [ 'type' => PHPExcel_STYLE_FILL::FILL_SOLID, 'color'=> [ 'rgb' => 'CFCFCF' ] ] ]; $page->setCellValue("A1", '№ заказа'); $page->setCellValue("B1", 'Товар'); $page->setCellValue("C1", 'Цена'); $page->setCellValue("D1", 'Кол-во'); $page->setCellValue("E1", 'Итого'); $page->setCellValue("F1", 'Дата заказа'); $page->getStyle('A1:F1')->applyFromArray($style_header); foreach($results as $item){ $page->setCellValue("A{$i}", $item['order_id']); $page->setCellValue("B{$i}", $item['name']); $page->setCellValue("C{$i}", $item['price']); $page->setCellValue("D{$i}", $item['quantity']); $page->setCellValue("E{$i}", $item['total']); $page->setCellValue("F{$i}", $item['date_added']); $i++; } $page->getColumnDimension('A')->setAutoSize(true); $page->getColumnDimension('B')->setAutoSize(true); $page->getColumnDimension('C')->setAutoSize(true); $page->getColumnDimension('D')->setAutoSize(true); $page->getColumnDimension('E')->setAutoSize(true); $page->getColumnDimension('F')->setAutoSize(true); $objWriter = PHPExcel_IOFactory::createWriter($objCreate, 'Excel2007'); $objWriter->save($file); echo "<p>Файл создан! <a href='/wfm_export_orders/file.xlsx' class='text-danger'>Скачать</a></p>"; }else{ echo 'Заказы за указанный период не найдены...'; } die; }
}

Здесь мы подключаем библиотеку PHPExcel, вызываем из модели метод getOrdersForExport, которую добавим ниже, и формируем файл Excel. Напоминаю, по работе с библиотекой PHPExcel вы можете посмотреть этот урок.

Теперь давайте создадим метод getOrdersForExport в модели ModelSaleOrder, которая находится в файле admin\model\sale\order.php.

public function getOrdersForExport($wfm_start_date, $wfm_end_date){ $sql = "SELECT o.order_id, o.date_added, op.name, op.quantity, op.price, op.total FROM `" . DB_PREFIX . "order` o LEFT JOIN `" . DB_PREFIX . "order_product` op ON o.order_id = op.order_id WHERE DATE(o.date_added) BETWEEN DATE('" . $this->db->escape($wfm_start_date) . "') AND DATE('" . $this->db->escape($wfm_end_date) . "') ORDER BY DATE(o.date_added)"; $query = $this->db->query($sql); return $query->rows;
}

Осталось протестировать код. Если мы нигде не ошиблись, тогда в результате работы написанного кода мы получим для скачивания файл Excel с выгрузкой проданных товаров.

Собственно, наш скрипт, в целом, — готов. Остается лишь причесать код и оформить его в виде модуля при желании. Ну а мы на этом остановимся. Больше об OpenCart вы можете узнать из наших бесплатных или платных уроков.