Как сделать выгрузку чего либо из Opencart в Excel (xlsx)
Выгрузка данных в Excel файл - простой и эффективный способ
Часто так бывает что нам надо выгрузить какие-то данные из магазина Opencart в excel таблицу (файл xlsx).
Да, можно поискать модули, которые смогут это сделать. Но как правило готовые решения дорого стоят и это будет большой комбайн который будем использовать всего на 5%. Зачем все это придумывать, если имея прямые руки можно сделать выгрузку любых товаров в таблицу эксель.
Да и по моим наблюдениям того что хотят заказчики выгружать в файл как правило нет в готовых модулях. Ну что же нет, так нет. Будем делать свою "кастом" выгрузку :)
Для этого нам понадобится библиотека PHPExcel с помощью которой мы создадим файл excel и запишем в него любые данные из нашего магазина. Скачать PHP Excel.
После того как скачали, все содержимое архива загружаем в корень сайта (там где файл index.php). После этого идем в админку и делаем ссылку на выгрузку. Для этого открываем файл admin/view/template/common/header.tpl или admin/view/template/common/menu.tpl и в нужном месте прописываем ссылку
<a href="index.php?route=catalog/product/downexp&token=<?php echo $token; ?>">Скачать данные</a>
Где index.php?route=catalog/product/downexp - это путь к функции выгрузки, а именно функция downexp в файле admin/controller/catalog/product.php
Примечание. Если в ссылке будет ругаться на token, а именно undefined index token это означает что переменная token неопределена. В таком случае надо зайти в контроллер admin/controller/common/header.php (menu.php) и добавить в функцию index строку:
$data['token'] = $this->session->data['token']; //($this->data['token'] = $this->session->data['token']; - для Opencart 1.5)
После добавления ссылки на скачивание нам надо создать функцию для генерации xlsx. Для этого открываем файл admin/catalog/product.php и вставляем функцию:
public function downexp() {
$cwd = getcwd();
chdir( DIR_SYSTEM.'PHPExcel' );
require_once( 'Classes/PHPExcel.php' );
chdir( $cwd ); //подключили библиотеку
$phpexcel = new PHPExcel();
$this->load->model('catalog/product');
$this->load->model('catalog/category');
$this->load->model('catalog/manufacturer'); //подключили нужные для выгрузки модели
$filter = array(
'start' => 0,
'limit' => 9999999999999
);
$products = $this->model_catalog_product->getProducts($filter); //берем все продукты
$page = $phpexcel->setActiveSheetIndex(0); //создаем вкладку
$page->getColumnDimensionByColumn("0")->setWidth(40);
$page->getColumnDimensionByColumn("1")->setWidth(70);
$page->getColumnDimensionByColumn("2")->setWidth(20);
$page->getColumnDimensionByColumn("3")->setWidth(20);
$page->getColumnDimensionByColumn("4")->setWidth(8);
$page->getColumnDimensionByColumn("5")->setWidth(6);
$page->getColumnDimensionByColumn("6")->setWidth(12); //задаем ширину столбцов
$page->setCellValue("A1", "Категория");
$page->setCellValue("B1", "Товар");
$page->setCellValue("C1", "Производитель");
$page->setCellValue("D1", "Модель");
$page->setCellValue("E1", "Артикул");
$page->setCellValue("F1", "Цена");
$page->setCellValue("G1", "Количество"); //прописали в первой строке название столбцов
$i=2;
foreach($products as $product){ //перебираем массив продуктов и записываем в файл
$cats = $this->getPathByProduct($product['product_id']);
$cat_text = '';
$cats_arr = explode("_", $cats);
foreach($cats_arr as $category_id){
$category_info = $this->model_catalog_category->getCategory($category_id);
$cat_text .= $category_info['name'] . '/';
}
$cat_text = rtrim($cat_text, "/");
$manufacturer = $this->model_catalog_manufacturer->getManufacturer($product['manufacturer_id']);
$page->setCellValue("A$i", $cat_text);
$page->setCellValue("B$i", $product['name']);
$page->setCellValue("C$i", $manufacturer['name']);
$page->setCellValue("D$i", $product['model']);
$page->setCellValue("E$i", $product['sku']);
$page->setCellValue("F$i", $product['special']?$product['special']:$product['price']);
$page->setCellValue("G$i", $product['quantity']);
$i++;
}
$page->setTitle("Товары");
$filename = 'products.xlsx';
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="'.$filename.'"');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($phpexcel, 'Excel2007');
$objWriter->setPreCalculateFormulas(false);
$objWriter->save('php://output'); //отдаем файл в браузер по ссылке
}
Где у меня в файле есть функции из seopro getPathByProduct и getPathByCategory они в примере нужны для формирования правильной вложенности категорий.
После нажатия на ссылку Скачать данные у нас функция downexp генерирует файл в формате xlsx в котором выгружаются все товары.
В эту выгрузку можно запихнуть любые данные, товары, категории, заказы, покупателей, да все что потребуется в любом виде. Все что надо это сделать выборку из базы, сформировать и записать в файл, на примере видно как делается запись.
Если будут вопросы - спрашивайте в комментариях, подскажу по мере возможности. Также если нужна будет такая выгрузка обращайтесь смогу написать под заказ.