Вывод CSV данных в качестве файла для загрузки в Drupal

При работе с большими объемами данных в Drupal часто приходится обеспечивать возможность их экспорта в CSV. Если мы работаем с Views, то для него написан хороший модуль Views data export, который справляется с большинством поставленных задач по экспорту данных в CSV. Если же мы работаем с программно созданными страницами, то для экспорта данных этот модуль не подходит. В этом случае нам поможет использоваление двух простых функций fopen() и fputcsv().

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

Для начала объявим путь по которому будет происходить загрузка файла. Для этого используем hook_menu().

function mymodule_menu() {
  $items = array();
  $items['dsta/download'] = array(
    'title' => t('Node types data export'),
    'page callback' => '_mymodule_download_data_callback',
    'access arguments' => TRUE,
    'type' => MENU_CALLBACK,
  );
 return $items;
}

В функции обратного вызова реализум логику экспорта.

function _mymodule_download_data_callback {
  //получаем все типы нод
  $types = node_type_get_types();
 
  //добавляем необходимые заголовки для браузера
  drupal_add_http_header('Content-Type', 'text/csv; utf-8');
  drupal_add_http_header('Content-Disposition', 'attachment; filename = nodes.csv');
 
  //вместо того чтобы писать в файл, мы пишем в выходной поток
  $fh = fopen('php://output', 'w');
 
  //формируем header
  fputcsv($fh, array(t('Machine name'), t('Name')));
 
  //записываем данные в формате CSV
  foreach ($types as $node_types) {
    fputcsv($fh, array($node_types->type, $node_types->name));
  }
 
  //закрываем поток
  fclose($fh);
}

Теперь, когда пользователь осуществит переход по ссылке /dsta/download, то ему будет предложено сохранить файл с данными в качестве CSV.

 

Smartweb

Мы надеемся данный материал будет для вас полезен. Спасибо что читаете нас!

Smartweb

«Smartweb» — это эффективная технология запуска, развития и продвижения бизнеса в интернете.

Заказать

Контакты

  • Smartweb
    Минск, Беларусь
  • Пн-Пт с 9:00 до 19:00 
  • +375 (29) 25-33-555
  • info@smartweb.by
Наша рассылка: