Добавить загрузчика файлов в компонент Joomla Admin

Я создал компонент Joomla admin в соответствии с руководством Joomla – http://docs.joomla.org/Developing_a_Model-View-Controller_Component/2.5/Developing_a_Basic_Component

В том, что мне нужно иметь загрузчик файлов, которые позволяют пользователю загружать один файл.

В администраторе \ components \ com_invoicemanager \ models \ forms \ invoicemanager.xml я определил

<field name="invoice" type="file"/> 

В контроллере admin \ components \ com_invoicemanager \ controllers \ invoicemanager.php im пытается получить этот файл, как показано ниже. Но его не работает (невозможно получить файл)

Где я делаю это неправильно?

Как я могу получить файл и сохранить его на диске?

 class InvoiceManagerControllerInvoiceManager extends JControllerForm { function save(){ $file = JRequest::getVar( 'invoice', '', 'files', 'array' ); var_dump($file); exit(0); } } 

убедитесь, что вы включили enctype="multipart/form-data" в том виде, в котором файл отправляется. Это распространенная ошибка

 /// Get the file data array from the request. $file = JRequest::getVar( 'Filedata', '', 'files', 'array' ); /// Make the file name safe. jimport('joomla.filesystem.file'); $file['name'] = JFile::makeSafe($file['name']); /// Move the uploaded file into a permanent location. if (isset( $file['name'] )) { /// Make sure that the full file path is safe. $filepath = JPath::clean( $somepath.'/'.strtolower( $file['name'] ) ); /// Move the uploaded file. JFile::upload( $file['tmp_name'], $filepath );} 

Думаю, я нашел решение 🙂

 $file = JRequest::getVar('jform', null, 'files', 'array'); 

Здесь упоминается сохраненная часть – http://docs.joomla.org/Secure_coding_guidelines

Для загрузки файла с вашего компонента вам необходимо написать свой код в файле контроллера, и вы можете расширить метод save (). проверьте приведенный ниже код –

 public function save($data = array(), $key = 'id') { // Neccesary libraries and variables jimport('joomla.filesystem.file'); //Debugging ini_set("display_error" , 1); error_reporting(E_ALL); // Get input object $jinput = JFactory::getApplication()->input; // Get posted data $data = $jinput->get('jform', null, 'raw'); $file = $jinput->files->get('jform'); // renaming the file $file_ext=explode('.',JFile::makeSafe($file['invoice']['name'])); // invoice - file handler name $filename = round(microtime(true)) . '.' . strtolower(end($file_ext)); // Move the uploaded file into a permanent location. if ( $filename != '' ) { // Make sure that the full file path is safe. $filepath = JPath::clean( JPATH_ROOT."/media/your_component_name/files/". $filename ); // Move the uploaded file. if (JFile::upload( $file['invoice']['tmp_name'], $filepath )) { echo "success :)"; } else { echo "failed :("; } $data['name'] = $filename ; // getting file name $data['path'] = $filepath ; // getting file path $data['size'] = $file['invoice']['size'] ; // getting file size } JRequest::setVar('jform', $data, 'post'); $return = parent::save($data); return $return; } 

Стиль Joomla 2.5 и 3:

 $app = JFactory::getApplication(); $input = $app->input; $file= $input->files->get('file'); if(isset($file['name'])) { jimport('joomla.filesystem.file'); $file['name'] = strtolower(JFile::makeSafe($file['name'])); $fileRelativePath = '/pathToTheRightFolder/'.$file['name']; $fileAbsolutePath = JPath::clean( JPATH_ROOT.$fileRelativePath); JFile::upload( $file['tmp_name'], $fileAbsolutePath ); } 

http://docs.joomla.org/How_to_use_the_filesystem_package

имеет полный образец загрузки.

Небольшая выборка, в которой администратор выбирает тип файла или все, введите пользователей для доступа к загрузке формы. Папка для загрузки файлов в каталог Joomla или с абсолютным путем. Только избранные пользователи получают доступ к загрузке формы.