Комментарии

Метод контроллера для создания файла экспорта
( 0 Голосов )

 

Итак, у нас имеются все данные для файла экспорта. Поэтому осталось лишь создать этот файл и отправить его браузеру. И делается это в методе exportReport () из класса контроллера JoomproSubsControllerSubManager, объявляемого в файле controllers/submanager.php. Ниже приведен исходный код этого метода.

protected function exportReport($data) {

// задать заголовки header('Content-Type: text/csv'); header('Content-Disposition: attachment;filename='.'subscriptions.csv'); if ($fp - fopen('php://output', 'w')) {
// вывести первую строку с  заголовками столбцов if ($data[0]) { fputcsv($fp, array_keys(JArrayHelper::fromObject($data[0]))); }
// вывести строки таблицы foreach ($data as  $row) { fputcsv($fp, JArrayHelper::fromObject($row)); }
// закрыть файл fclose($fp); } JFactory::getApplication()->close(); } }  
//  конец класса

В первых двух строках кода данного метода используется функция header () языка РНР для отправки необработанного HTTP-заголовка браузеру, т.е. в таком формате, как показано выше. В первой строке кода браузер уведомляется о том, что ему посылается текстовый файл формата CSV, а во второй строке — о том, что файл subscriptions. csv посылается как вложение. В зависимости от настроек браузера пользователь может открыть или сохранить этот файл в формате CSV.

Затем в данном методе используется функция fopen () языка РНР для открытия объекта файла, в который можно записывать данные. Эта функция принимает два аргумента. В качестве первого из них указывается имя файла. В данном случае указано специальное имя php: //output, позволяющее выводить результат в буфер. Оно выбрано потому, что имя файла уже указано в HTTP-заголовке. А в качестве второго аргумента данной функции указывается режим вывода данных. В данном случае указан режим "w", обозначающий поток только для записи данных.

Данная функция вызывается в условном выражении оператора if, чтобы не производить никаких других операций с файлом, если по какой-нибудь причине выполнение функции fopen () завершится неудачно. В кодовом блоке условного оператора if проверяется наличие каких-нибудь данных в первом элементе массива. Если такие данные имеются, то вызывается функция fputcsv () языка РНР для записи ключей массива в виде заголовков столбцов отчета в файле формата CSV. Функция fputcsv () делает все необходимое для преобразования исходных данных в текст формата CSV, для чего используется объект $fp, созданный ранее в функции fopen ().

Обратите внимание на то, что для преобразования объекта в массив вызывается метод fromObject () из класса JArrayHelper. А затем для получения ключей из массива вызывается функция array_keys () языка РНР. Таким образом, составляется список всех имен столбцов, размещаемых в первой строке из файла отчета.

Как только будет сформирована первая строка отчета, выполняется цикл fоreach, в котором происходит поочередное обращение ко всем элементам массива и запись строки в файл отчета по каждому элементу. И в этом случае вызывается метод fromObject () для преобразования объекта в массив, прежде чем передавать его функции f putcsv (), а в качестве первого аргумента ей передается все тот же объект $fр.

И наконец, метод fclose () вызывается для закрытия файлового буфера. Затем вызывается функция close () языка РНР для объекта приложения Joomla ($fp). На этом цикл запроса завершается, и файл отчета отправляется браузеру.

 


Понравился материал? Пригодилась информация? Плюсани в социалки!


 
Похожие новости
Добавить комментарий


Защитный код