Использование PHPExel на примере экспорта пользователей Joomla
Я сделал это на примере дополнительной задачи в панели инструментов раздела “Пользователи” 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();

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