Написание модулей - Поле загрузки файла

#
Написание модулей - Поле загрузки файла
Здравствуйте.

I. Я пишу сейчас модуль, похожий на Новости – соотв. с новостью может быть связана небольшая картинка, отображаемая в списке новостей.
Для этого в форму добавления элемента я поместил поле ввода типа 9 - Поле загрузки файла со следующими параметрами:


//4 - image
$param = array();
$param['tab_id'] = $tab_id;
$param['name'] = 'input_snew_image';
$param['caption'] = "Изображение";
$param['type'] = 9; // Поле ввода.

$param['options']['make_small_image_from_big_show'] = 0;
$param['options']['make_small_image_from_big_checked'] = 0;
$param['options']['load_small_image_show'] = 0;
$param['options']['image_big_max_width'] = 100;
$param['options']['image_big_max_height'] = 150;
$param['options']['image_small_max_width'] = 0;
$param['options']['image_small_max_height'] = 0;
$param['options']['used_watermark_big_image_show'] = 0;
$param['options']['used_watermark_big_image_checked'] =0;
$param['options']['watermark_position_x'] = 0;
$param['options']['watermark_position_y'] = 0;
$param['options']['used_watermark_small_image_show'] = 0;
$param['options']['used_watermark_small_image_checked']=0;
$param['options']['show_big_image_params'] = 1;
$param['options']['show_small_image_params'] = 0;
$admin_forms_fields->AddField($param);


Подскажите пожалуйста, какова его функциональность или что я делаю не так, а конкретно:
1.   В каком виде поле возвращает данные о самом выбранном через него файле? В массиве $_POST, насколько я увидел, есть только заданные широта и высота big_image_max_width_input_snew_image = 100
big_image_max_height_input_snew_image = 150
2.   Производится ли загрузка выбранного файла на сервер автоматически или нужно вручную загружать его, получив через поле только путь к файлу?
3.   Если добавить при создании поля в массив $params данные о имеющемся изображении:
$param['options']['big_image_path']= "http://test1.ru/a.jpg";
- то на форме появляется ошибка:   ЗАМЕЧАНИЕ: Undefined index: onclick_delete_big_image в файле U:\home\test1.ru\www\modules\admin_forms\admin_forms_fields.class.php (строка 0)
  } else {return false;}">

Как это понимать и как с этим бороться?

II. Еще хотелось бы узнать, есть ли где-то полное описание возможных параметров полей ввода, задаваемых через массив $param ? Или в API-документации приведен полный список? (хотя непохоже).

III. Кажется, у вас небольшая опечатка в файле API-документации. В разделе «Class admin_forms_fields -> admin_forms_fields::AddField» написано: «string $param['caption'] тестовое название поля». Наверное, имелось в виду "текстовое название поля". В принципе мелочь, но мало ли..
#
Re: Написание модулей - Поле загрузки файла
Пардон, забыл упомянуть: версия системы HostCMS.Free_5.2
#
Re: Написание модулей - Поле загрузки файла
Черт, глупость, естественно, данные в массиве $_FILES
Но остальная часть вопроса остается открытой(
Модератор
#
Re: Написание модулей - Поле загрузки файла
Inquisitor_I,
Вот пример из ИС:
// Изображение информационной группы.
$param = array();

$param['tab_id'] = $tab_id;
$param['name'] = 'information_group_image';
$param['caption'] = $GLOBALS['MSG_information_systems']['information_groups_add_form_image'];
$param['type'] = 9; // Поле загрузки файла.
$param['value'] = $information_group_name;

$param['options'] = array();
$param['options']['make_small_image_from_big_show'] = 1; // отображать ли checkbox с подписью "Создать малое изображение из большого" (1 -  отображать (по умолчанию), 0 - не отображать);

if (!isset($error_information_group))
{
   // вид ображения checkbox'а с подписью "Создать малое изображение из большого" выбранным (1 -  отображать выбранным (по умолчанию), 0 - невыбранным);
   $param['options']['make_small_image_from_big_checked'] = $information_group_small_image != '' ? 0 :1;
}
else
{
   // вид ображения checkbox'а с подписью "Создать малое изображение из большого" выбранным (1 -  отображать выбранным (по умолчанию), 0 - невыбранным);
   $param['options']['make_small_image_from_big_checked'] = isset($_POST['used_big_image_information_group_image']) ? 1 : 0;
}

// Отображать ли поле загрузки малого изображения (1 -  отображать (по умолчанию), 0 - не отображать);
$param['options']['load_small_image_show'] = 1;

// Заголовок поля загрузки малого изображения
$param['options']['load_small_image_caption'] = $GLOBALS['MSG_information_systems']['information_groups_add_form_small_image'];

// Значение максимальной ширины большого изображения;
$param['options']['image_big_max_width'] = $information_group_big_image_max_width;

// Значение максимальной высоты большого изображения;
$param['options']['image_big_max_height'] = $information_group_big_image_max_height;

// Значение максимальной ширины малого изображения;
$param['options']['image_small_max_width'] = $information_group_small_image_max_width;

// Значение максимальной высоты малого изображения;
$param['options']['image_small_max_height'] = $information_group_small_image_max_height;

// Отображать ли checkbox с подписью "Наложить водяной знак на большое изображение" (1 -  отображать (по умолчанию), 0 - не отображать);
$param['options']['used_watermark_big_image_show'] = 1;

if (isset($error_information_group))
{
   // Вид ображения checkbox'а с подписью "Наложить водяной знак на большое изображение" (1 -  отображать выбранным (по умолчанию), 0 - невыбранным);
   $param['options']['used_watermark_big_image_checked'] = isset($_POST['big_image_is_use_watermark_information_group_image']) ? 1 : 0;
}
else
{
   $param['options']['used_watermark_big_image_checked'] = to_int($information_system_row['information_systems_default_used_watermark']);
}

// Значение поля ввода с подписью "По оси X"
$param['options']['watermark_position_x'] = $information_systems_watermark_default_position_x;

// Значение поля ввода с подписью "По оси Y"
$param['options']['watermark_position_y'] = $information_systems_watermark_default_position_y;

// Отображать ли checkbox с подписью "Наложить водяной знак на малое изображение" (1 -  отображать (по умолчанию), 0 - не отображать);
$param['options']['used_watermark_small_image_show'] = 1;

if (isset($error_information_group))
{
   // Вид ображения checkbox'а с подписью "Наложить водяной знак на малое изображение" (1 -  отображать выбранным (по умолчанию), 0 - невыбранным);
   $param['options']['used_watermark_small_image_checked'] = isset($_POST['small_image_is_use_watermark_information_group_image']) ? 1 : 0;
}
else
{
   $param['options']['used_watermark_small_image_checked'] = to_int($information_system_row['information_systems_default_used_small_watermark']);
}

if ($information_group_image != '')
{
   // Адрес большого загруженного изображения
   $param['options']['big_image_path'] = '/' . UPLOADDIR . $information_group_image;
   // Ссылка для href
   $param['options']['href_delete_big_image'] = "javascript:void(0)";
   // Значение для onclick
   $param['options']['onclick_delete_big_image'] = "sendRequest('/admin/InformationSystems/InformationSystems.php?delete_information_group_big_image={$information_group_id}', 'get', callback_function_exec_from_return); return false;";
}
else
{
   $param['options']['big_image_path'] = '';
   // Ссылка для href
   $param['options']['href_delete_big_image'] = '';
   // Значение для onclick
   $param['options']['onclick_delete_big_image'] = '';
}

if ($information_group_small_image)
{
   // Адрес малого загруженного изображения
   $param['options']['small_image_path'] = '/' . UPLOADDIR.$information_group_small_image;

   // Ссылка для href
   $param['options']['href_delete_small_image'] = "javascript:void(0)";
   // Значение для onclick
   $param['options']['onclick_delete_small_image'] = "sendRequest('/admin/InformationSystems/InformationSystems.php?delete_information_group_small_image={$information_group_id}', 'get', callback_function_exec_from_return); return false;";
}
else
{
   $param['options']['small_image_path'] = '';
   // Ссылка для href
   $param['options']['href_delete_small_image'] = '';
   // Значение для onclick
   $param['options']['onclick_delete_small_image'] = '';
}

$admin_forms_fields->AddField($param);
#
Re: Написание модулей - Поле загрузки файла
Спасибо, почти разобрался!
Не могли бы вы, пожалуйста, пояснить эти строчки:

// Ссылка для href
$param['options']['href_delete_big_image'] = "javascript:void(0)";
// Значение для onclick
$param['options']['onclick_delete_big_image'] = "sendRequest('/admin/InformationSystems/InformationSystems.php?delete_information_group_big_image={$information_group_id}', 'get', callback_function_exec_from_return); return false;";


Т.е. обработка удаления картинки должна быть описана в файле /admin/module_name/module_name.php ? Или где и каким образом?
Что означает параметр callback_function_exec_from_return ?
'get' - просто указан метод передачи?
#
Re: Написание модулей - Поле загрузки файла
Все-таки очень хотелось бы услышать разъяснение, где именно нужно описывать обработчик удаления прикрепленного файла, если вас не затруднит.
Модератор
#
Re: Написание модулей - Поле загрузки файла
Inquisitor_I писал(а):
Т.е. обработка удаления картинки должна быть описана в файле /admin/module_name/module_name.php? Или где и каким образом?

Да, должна быть описана в указанном файле.

Inquisitor_I писал(а):
Что означает параметр callback_function_exec_from_return?

Имя Javascript-функции, которая будет вызвана после получения ответа. Вы можете написать свою JS-функцию по аналогии с callback_function_exec_from_return
#
Re: Написание модулей - Поле загрузки файла
Спасибо, почти всё получилось.
Единственный момент остался - когда файл удаляется (удаляется сам файл, и запись в БД о прикреплении файла к данному элементу), в форме редактирования остаются пиктограммы "Удалить файл" и "Посмотреть файл", хотя его уже нет ни физически, ни по БД.
Скажите пожалуйста, нужно ли при обработке удаления производить какие-то дополнительные операции, чтобы все работало идеально? Какие именно?
Модератор
#
Re: Написание модулей - Поле загрузки файла
Inquisitor_I,
При ответе backend-а на удаление нужно вернуть JavaScript, который удалит из формы эти элементы по их ID.
Авторизация