Перейти к содержимому
Русский язык для Invision Community 5

Отправка параметров вместе с постом

Здравствуйте, у меня стоит IPB 3.2.3. Как можно передать параметр с помощью HTTP-post классу class_attach.php из поста (скин uploadForm), в который я добавил следующий checkbox?

<input type="checkbox" checked="checked" name="isrec">

Рекомендованные сообщения

Отправить с помощью формы. Кэп?

  • Автор

Забыл добавить, что отправить значение надо вместе с заливаемым файлом, чтобы потом сделать проверку параметра. IPB же не перезагружает всю страницу, когда заливает файл (AJAX) и если я сделаю в скине Post Screen/UploadForm форму,

<form method="post" action="/forums/admin/applications/core/sources/classes/attach/class_attach.php">
<input type="checkbox" checked="checked" name="isrec" value="1" onclick="showRecForm(this);" />
<input type="submit" value="Submit">

то нужного результата не получу.

Изменено пользователем Dmitry

А зачем делать вторую форму, отправляйте свой параметр вместе с формой загрузки файла. Даже если бы там не было аджакса, как вы собрались отправлять одновременно две разные формы, а главное зачем? Нонсенс какой-то у вас здесь вырисовывается.

Там по умолчанию используется флэш загрузчик, код которого формируется через js (public\js\3rd_party\swfupload\swfupload.js). Так что можно там поколдовать с параметрами.

  • Автор

Сейчас посмотрю. А то я не мог понять, ведь в skin_post.php (который формируется в т.ч. из uploadForm и attachiFrame) две формы:

<form id='postingform' action='{$this->settings['base_url']}' method='post' enctype='multipart/form-data'>

и

<form id='iframeUploadForm' method='post' enctype=\"multipart/form-data\" action=''>

,

а кнопка загрузки файла входит как раз в первую.

 

upd:

В swfupload есть метод

void addPostParam(name, value)

The addPostParam function adds a name/value pair that will be sent in the POST for all files uploaded.

 

The name/value pair will also appear in the post_params setting.

По описанию похоже - попробую прицепить.

 

upd2: Вторая форма как раз к базовому загрузчику относится (не swf). Она описана в attachiFrame и если в неё <input/> поместить, то в классе class_attach.php появляется переменная в $_POST.

Изменено пользователем Dmitry

Кстати, параметры можно еще передать с помощью кукисов. Повесьте на чекбоксе функцию js записи куки, а в скрипте получите доступ к ней из массива $this->request

 

Зы.

Увы, но через кукисы не получится, для php они обновляются после перезагрузки страницы.

Судя по контексту вопроса, вам надо определять, является ли загруженный файл файлом определенного типа. А не проще ли на основании mime это делать, без всяких галочек и доп.полей? :)

  • Автор

Спасибо, с помощью кукизов сделал. Лучше, конечно, как-то передать SWFuploader-у параметр и там с помощью addPostParam запихнуть в $_POST - вдруг кукизы отключены у человека. Я попробовал приписать к

 

ipb.attach.registerUploader( 'attach_{$id}', useType, 'attachments', {
		'upload_url': uploadURL,
		'attach_rel_module': "{$type}",
		'attach_rel_id': "{$id}",
		'attach_post_key': "{$post_key}",
		'forum_id': "{$forum_id}",
		'file_size_limit': "{$stats['max_single_upload']}"
	} )});

в uploadForm ещё один параметр:

'isrec': document.postForm.isrec.checked 

в форму поста postFormTemplate добавил имя name='postForm',

<form name='postForm' id='postingform' action='{$this->settings['base_url']}' method='post' enctype='multipart/form-data'>

но уже в ips.attach.js не понял, как всё-таки применить addPostParam(). Там есть место, где объект загрузчика инициализируют,

swfu = new SWFUpload( settings );

если после этого захардкодить,

name = 'isrec';
value = 'isrec';
addPostParam(name, value);

то в $_POST у class_attach.php эта пара не появляется. Тут уже у меня матчасть хромает.

 

Судя по контексту вопроса, вам надо определять, является ли загруженный файл файлом определенного типа. А не проще ли на основании mime это делать, без всяких галочек и доп.полей?

А с MIME-типом вряд ли получится: тот скрипт, который обрабатывает файл написан для .zip файлов, в которых хранятся файлы .mgx - записи матчей одной старой компьютерной игры.

Изменено пользователем Dmitry

Создайте аккаунт или войдите в него для комментирования

Аккаунт

Навигация

Поиск

Поиск

Настроить push-уведомления браузера

Chrome (Android)
  1. Нажмите на иконку замка рядом с адресной строкой.
  2. Нажмите Права доступа -> Уведомления.
  3. Измените свои настройки.
Chrome (компьютер)
  1. Нажмите на иконку замка в адресной строке.
  2. Выберите Настройки сайта.
  3. Найдите Уведомления и измените свои настройки.