Использование PHPExel на примере экспорта пользователей Joomla

phpexelЯ сделал это на примере дополнительной задачи в панели инструментов раздела “Пользователи” Joomla.

В файле /administrator/components/com_users/controller.php компонента com_user административной части Joomla в функцию __construct() дописываем строчку:

$this->registerTask( 'downloadXLS', 'downloadXLS' );

В файл /administrator/components/com_users/views/users/tmpl/default.php дописываем строчку

JToolBarHelper::custom( 'downloadXLS', 'xls.png', 'xls.png', 'Download XSL', false );

Дополнительно заходим на хороший сервис поиска иконок iconsearch.ru и ищем подходящую иконку для кнопки экспорта списка пользователей.

В файле /administrator/components/com_users/controller.php создаем функцию с именем downloadXLS() со следующим содержимым:

$config = &JFactory::getConfig();
 $db = &JFactory::getDBO();

 jimport( 'phpexcel.PHPExcel' ); //заходим на сайт http://phpexcel.codeplex.com/, скачиваем последнюю версию библиотеки PHPExel и загружаем в папку /libraries/phpexcel.
 jimport( 'phpexcel.PHPExcel.Writer.Excel2007' );
 jimport( 'joomla.filesystem.file' );
 $objPHPExcel = new PHPExcel();
 $objPHPExcel->getProperties()->setCreator( $config->getValue('sitename') );
 $objPHPExcel->getProperties()->setLastModifiedBy( $config->getValue('sitename') );
 $objPHPExcel->getProperties()->setTitle("База данных пользователей сайта ".$config->getValue('sitename') );
 $objPHPExcel->getProperties()->setSubject( "База данных пользователей сайта ".$config->getValue('sitename') );
 $objPHPExcel->getProperties()->setDescription("База данных пользователей сайта ".$_SERVER['HTTP_HOST'] );
 $objPHPExcel->getActiveSheet()->getDefaultStyle()->getFont()->setSize(10);

 $objPHPExcel->setActiveSheetIndex(0);
 $objPHPExcel->getActiveSheet()->SetCellValue('A1', JText::_('ID') );
 $objPHPExcel->getActiveSheet()->SetCellValue('B1', JText::_('Username') );
 $objPHPExcel->getActiveSheet()->SetCellValue('C1', JText::_('Name') );
 $objPHPExcel->getActiveSheet()->SetCellValue('D1', JText::_('Email') );
 $objPHPExcel->getActiveSheet()->SetCellValue('E1', JText::_('Usertype') );
 $objPHPExcel->getActiveSheet()->SetCellValue('F1', JText::_('registerDate') );
 $objPHPExcel->getActiveSheet()->SetCellValue('G1', JText::_('Active') );

 $headerFill = new PHPExcel_Style_Fill;
 $headerFill->setFillType( 'NONE' );
 $objPHPExcel->getActiveSheet()->getStyle('A1')->applyFromArray(
 array(
 'font'    => array(
 'bold'      => true
 ),
 'alignment' => array(
 'horizontal' => PHPExcel_Style_Alignment::HORIZONTAL_CENTER,
 ),
 'borders' => array(
 'bottom'     => array(
 'style' => PHPExcel_Style_Border::BORDER_THIN,
 'color' => array( 'rgb' => '9A9A9A' )
 )
 )
 ),
 'A3:E3'
 );
 $objPHPExcel->getActiveSheet()->getStyle('A1')->getFill()->setFillType(PHPExcel_Style_Fill::FILL_SOLID);
 $objPHPExcel->getActiveSheet()->getStyle('A1')->getFill()->getStartColor()->setARGB('C0C0C0');
 $objPHPExcel->getActiveSheet()->duplicateStyle( $objPHPExcel->getActiveSheet()->getStyle('A1'), 'B1:G1' );

 $db->setQuery( '
 SELECT
 u.*
 FROM `#__users` u
 ORDER BY `id` ASC' );
 $result = $db->loadAssocList();
 $i=2;
 $col = array( 'A'=>8, 'B'=>8, 'C'=>4, 'D'=>5, 'E'=>8, 'F'=>12, 'G'=>6 );
 foreach( $result as $row )
 {
 $objPHPExcel->getActiveSheet()->SetCellValue('A'.$i, $row['id'] );
 $objPHPExcel->getActiveSheet()->SetCellValue('B'.$i, $row['username'] );
 $col['B']=(JString::strlen($row['username'])>$col['B'])?JString::strlen($row['username']):$col['B'];
 $objPHPExcel->getActiveSheet()->SetCellValue('C'.$i, $row['name'] );
 $col['C']=(JString::strlen($row['name'])>$col['C'])?JString::strlen($row['name']):$col['C'];
 $objPHPExcel->getActiveSheet()->SetCellValue('D'.$i, $row['email'] );
 $col['D']=(JString::strlen($row['email'])>$col['D'])?JString::strlen($row['email']):$col['D'];
 $objPHPExcel->getActiveSheet()->SetCellValue('E'.$i, $row['usertype'] );
 $col['E']=(JString::strlen($row['usertype'])>$col['E'])?JString::strlen($row['usertype']):$col['E'];
 $objPHPExcel->getActiveSheet()->SetCellValue('F'.$i, JText::_($row['registerDate']) );
 $col['F']=(JString::strlen($row['registerDate'])>$col['F'])?JString::strlen($row['registerDate']):$col['F'];
 $objPHPExcel->getActiveSheet()->SetCellValue('G'.$i, $row['Active']?JText::_('No'):JText::_('Yes') );
 $i++;
 }
 $objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth($col['A']);
 $objPHPExcel->getActiveSheet()->getColumnDimension('B')->setWidth($col['B']);
 $objPHPExcel->getActiveSheet()->getColumnDimension('C')->setWidth($col['C']);
 $objPHPExcel->getActiveSheet()->getColumnDimension('D')->setWidth( $col['D'] );
 $objPHPExcel->getActiveSheet()->getColumnDimension('E')->setWidth( $col['E'] );
 $objPHPExcel->getActiveSheet()->getColumnDimension('F')->setWidth( $col['F'] );
 $objPHPExcel->getActiveSheet()->getColumnDimension('G')->setWidth( $col['G'] );
 $objPHPExcel->getActiveSheet()->setTitle( JText::_('Users') );
 $objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
 $tmp_path = $config->getValue( 'tmp_path' );
 do{
 $tmp_file = md5( round(time()*microtime()) ).'.xlsx';
 } while(JFile::exists($tmp_path.DS.$tmp_file));
 $objWriter->save( $tmp_path.DS.$tmp_file );

 $this->upload( $tmp_path.DS.$tmp_file, 'fanclub_users_'.date('d-m-Y_H-i-s').'.xlsx', true ); //функция, которая отправляет файл на скачивание пользователю
 die();

1 Comment

  1. BaykoBayko  
    февраля 2, 2012
    REPLY))

  2. Здравствуйте. Сделал по примеру, файл сохраняется в папке темп, но скачивание не происходит, ругается вот так:
    Call to undefined method UsersController::upload()
    Джумла 1.5

    1F

Написать ответ

 Имя

 Mail

 Сайт

[Имя и Mail обязательны для заполнения. Mail не будет опубликован.]


 9fce13c8-2714-4603-b8e7-33be6c785d58