Иногда, при написании модулей, необходимо загружать файлы на сервер. Но как это сделать стандартными средствами XOOPS? Для этого в XOOPS'е есть клас uploader. В данной статье мы познаковим вас с загрузкой файлов на сервер черзе ядро XOOPS.
Итак начнём, для начала создадим файл example.php. Его содержание такое:
include 'mainfile.php';
// Если мы нажали на кнопку "Отправить"
if( isset( $_POST['submit'] ) ) {
// Если мы на кнопку не нажимали, вырисовываем форму
} else {
}
?>
Т.е. файл состоит из двух частей:
1) Обработчик загрузки файлов
2) Форма загрузки файлов
Для начала рассмотрим форму загрузки файла.
// Задание тайтла страницы
$xoopsOption['xoops_pagetitle'] = 'Форма загрузки файла';
// Шаблон
//$xoopsOption['template_main'] = '***.html';
// Заголовок страницы
include $GLOBALS['xoops']->path('header.php');
// Подключаем файл с формами (ОБЯЗЯТАЛЬНО!)
include_once $GLOBALS['xoops']->path('class/xoopsformloader.php');
// Создаём объект формы
$sform = new XoopsThemeForm( 'Загрузка файлов', 'addfile', 'example.php', 'post' );
// Устанавливает тип формы (ОБЯЗЯТАЛЬНО!)
$sform->setExtra( 'enctype="multipart/form-data"' );
// Название, и т.д...
$sform->addElement( new XoopsFormText( 'Название:', 'title', 50, 255, ''), true );
// Фома первого файла
$sform->addElement( new XoopsFormFile( 'Первый файл:', 'attachedfile', $maxuploadsize ), true );
// Форма второго файла
$file2 = new XoopsFormFile( 'Второй файл:' , 'attachedimage', $xoopsModuleConfig['maxuploadsize']);
$file2->setDescription( sprintf( 'Максимальные параметры:
размер %s байт
ширина %s пиксель
высота %s пиксель', $maxuploadsize, $maxwidth, $maxheight ) );
$sform->addElement( $file2, false );
unset( $file2 );
// Кнопка отправить
$button_tray = new XoopsFormElementTray('' ,'');
$button_tray->addElement( new XoopsFormButton('', 'submit', _SUBMIT, 'submit') );
$sform->addElement($button_tray);
// Выводм форму в шаблон (ТОЛЬКО ЕСЛИ БЫЛ УКАЗАН ШАБЛОН!)
//$xoopsTpl->assign('themeForm', $sform->render());
// Выводим форму в браузер (ТОЛЬКО ЕСЛИ НЕ БЫЛ УКАЗАН ШАБЛОН!)
$sform->display();
// Удаляем объект формы
unset( $sform );
Данный код просто создаёт стандартную страничку XOOPS, и внутри неё вырисовываем форму загрузки файов. Поля могут быть любми и в негораниченных количествах.
Если вы всё сделали правильно, то должна появиться следующая форма.
Рассмотрим обработчик загрузки файлов:
// Подключаем класс uploader (ОБЯЗАТЕЛЬНО!)
include_once $GLOBALS['xoops']->path('class/uploader.php');
$file1_name = '';
// Если в форме было поле с первым файлом
if( isset( $_POST['xoops_upload_file'][0] ) ) {
// Имя, под которым фафл будет загружен на сервер
$destname = 'file1.name';
// Префикс, который будет дан файлу
$destprefix = 'prefix';
// Объявляем класс uploader (ОБЯЗАТЕЛЬНО!)
$uploader = new XoopsMediaUploader( $uploaddir, $mimetype, $maxuploadsize, NULL, NULL);
// Пытаемся прочитать файл
if( $uploader->fetchMedia( $_POST['xoops_upload_file'][0] ) ) {
// Есла файл был передан и нет ошибок размера и т.д.
// Устанавливаем имя загруженному файлу (ОПЦИОНАЛЬНО!)
//$uploader->setTargetFileName( $destname );
// Устанавливаем префикс имени загруженному файлу (ОПЦИОНАЛЬНО!)
//$uploader->setPrefix( $destprefix ) ;
// После всех операций нужно сново перечитать файл
$uploader->fetchMedia($_POST['xoops_upload_file'][0]);
// Если мы удачно загрузили файл
if( $uploader->upload() ) {
// Получаем имя загруженного файла
$file1_name = $uploader->getSavedFileName();
// Если не удалось загрузить файл
} else {
// Получаем ошибки, которые произошли во время загрузки файла
$errors = $uploader->getErrors();
redirect_header('example.php', 3, $errors);
}
// Если не удалось прочитать файл
} else {
$errors = $uploader->getErrors();
redirect_header('example.php', 3, $errors);
}
} else {
// если небыло поля с файлом
redirect_header( 'example.php', 3, 'Вы не выбрали файл' );
}
$file2_name = '';
// Если в форме было поле с первым файлом
if( isset( $_POST['xoops_upload_file'][1] ) ) {
// Имя, под которым фафл будет загружен на сервер
$destname = 'file2.name';
// Префикс, который будет дан файлу
$destprefix = 'prefix';
// Объявляем класс uploader (ОБЯЗАТЕЛЬНО!)
$uploader = new XoopsMediaUploader( $uploaddir, $mimetype, $maxuploadsize, $maxwidth, $maxheight);
// Пытаемся прочитать файл
if( $uploader->fetchMedia( $_POST['xoops_upload_file'][1] ) ) {
// Есла файл был передан и нет ошибок размера и т.д.
// Устанавливаем имя загруженному файлу (ОПЦИОНАЛЬНО!)
//$uploader->setTargetFileName( $destname );
// Устанавливаем префикс имени загруженному файлу (ОПЦИОНАЛЬНО!)
//$uploader->setPrefix( $destprefix ) ;
// После всех операций нужно сново перечитать файл
$uploader->fetchMedia($_POST['xoops_upload_file'][1]);
// Если мы удачно загрузили файл
if( $uploader->upload() ) {
// Получаем имя загруженного файла
$file2_name = $uploader->getSavedFileName();
// Если не удалось загрузить файл
} else {
// Получаем ошибки, которые произошли во время загрузки файла
$errors = $uploader->getErrors();
redirect_header('example.php', 3, $errors);
}
// Если не удалось прочитать файл
}
}
$message = '';
$message .= 'Загрузка фйлов';
if( $file1_name ) $message .= ' ' . $file1_name . ',';
if( $file2_name ) $message .= ' ' . $file2_name . ',';
$message .= ' успешно завершена.';
redirect_header('example.php', 3, $message);
Комментарии говорят обо всём. В конце выйдет сообщение об удачной загрузке или ошибки:

Единственное, мы ещё не указали настройки, в какую папку загружать, какая высота картинок и т.д. Это нужно вписывать в конфигурацию модуля. В данном примере мы просто впишем её в начале файла:
// Максимальный размер загружаемого файла
$maxuploadsize = 1048576;
// Максимальная ширина загружаемого изображения
$maxwidth = 1024;
// Максимальная высота загружаемого изображения
$maxheight = 1024;
// Папка для загузки
$uploaddir = 'E:/tmp';
// Массив разрешённых для загрузки mime-типов
$mimetype = array();
$mimetype[] = 'image/gif';
$mimetype[] = 'image/jpeg';
$mimetype[] = 'image/pjpeg';
$mimetype[] = 'image/x-png';
$mimetype[] = 'image/png';
Скачать исходный текст примера вы можете по ссылке ниже.
Скачать исходники.
|