Уважаемые пользователи!
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.

Простой мультиаплоад для phpbb3 (массовая загрузка файлов)

Форум для авторов модов для phpBB 3.0.x. Здесь можно попросить помощи в разработке у коллег.
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Nick
phpBB 1.4.2
Сообщения: 64
Стаж: 14 лет 2 месяца
Откуда: СПб
Благодарил (а): 7 раз
Поблагодарили: 21 раз
Контактная информация:

Простой мультиаплоад для phpbb3 (массовая загрузка файлов)

Сообщение Nick »

Долго искал что-то простое, что позволило бы загружать сразу много файлов. И желательно без flash. И чтобы просто :).

В итоге сделал на основе вот этого мода свою поделку:
Мультизагрузка вложений (Multiple File Upload)

Сделано на html5, а именно используется <input type="file" multiple>. Поэтому работать может не на всех браузерах!
Хотя на них наверняка будет работать как единичная загрузка.

В итоге в диалоге выбора файла можно выбрать сразу несколько файлов, все они будут загружены одновременно. Коммент к файлам будет один и тот же, но после загрузки его можно поменять. На виртуальных хостингах аккуратнее, после загрузки файлы могут обрабатываться и масштабироваться...

Опыта модифицирования у меня не много, если кто-то все красиво оформит буду благодарен :).


Мод целиком в одном пакете можно нужно брать тут:
https://www.phpbb.com/customise/db/mod/ ... one_click/
или тут:
Простой мульти аплоад для phpbb3 (массовая загрузка файлов)




Итак, изменения:
posting.php
Найти

Код: Выделить всё

	$message_parser->parse_attachments('fileupload', $mode, $forum_id, $submit, $preview, $refresh);
заменить на:
тут такой кривой цикл, который преобразует массив файлов в старый вид с 1 фалом.

Код: Выделить всё

	// modified by custom mod
	$_FILES_NEW = array();
	foreach ($_FILES as $form_name => $array1){
		foreach($array1 as $key_name => $array2){
			foreach($array2 as $number => $array3){
				$_FILES_NEW[$form_name."$number"][$key_name] = $_FILES[$form_name][$key_name][$number];
			}
		}
	}
	foreach ($_FILES_NEW as $form_name => $value){
		$_FILES = array($form_name=>$value);
		$message_parser->parse_attachments($form_name, $mode, $forum_id, $submit, $preview, $refresh);
	}
includes/message_parser.php
найти:

Код: Выделить всё

			$this->warn_msg[] = $error_msg;
заменить на:

Код: Выделить всё

			$this->warn_msg[] = $_FILES[$form_name]['name'] . ' => ' . $error_msg;
includes/ucp/ucp_pm_compose.php
найти:

Код: Выделить всё

		$message_parser->parse_attachments('fileupload', $action, 0, $submit, $preview, $refresh, true);
заменить на:

Код: Выделить всё

		// modified by custom mod
		$_FILES_NEW = array();
		foreach ($_FILES as $form_name => $array1){
			foreach($array1 as $key_name => $array2){
				foreach($array2 as $number => $array3){
					$_FILES_NEW[$form_name."$number"][$key_name] = $_FILES[$form_name][$key_name][$number];
				}
			}
		}
		foreach ($_FILES_NEW as $form_name => $value){
			$_FILES = array($form_name=>$value);
			$message_parser->parse_attachments($form_name, $action, 0, $submit, $preview, $refresh, true);
		}
styles/prosilver/template/posting_attach_body.html
найти:

Код: Выделить всё

			<input type="file" name="fileupload" id="fileupload" maxlength="{FILESIZE}" value="" class="inputbox autowidth" /> 
заменить на:

Код: Выделить всё

			<input type="file" name="fileupload[]" id="fileupload" maxlength="{FILESIZE}" multiple value="" class="inputbox autowidth" />
Все, я же говорил просто :)
Последний раз редактировалось Nick 13.05.2013 10:46, всего редактировалось 6 раз.
sweetah
phpBB 2.0.6
Сообщения: 505
Стаж: 14 лет 2 месяца
Благодарил (а): 107 раз
Поблагодарили: 26 раз

Re: Простой мульти аплоад для phpbb3 (массовая загрузка файл

Сообщение sweetah »

Спасибо за мод!
В идеале ещё надо бы скрестить это с модом, который по ссылке (Multiple File Upload) для поддержки всех браузеров. То есть, если браузер не поддерживает html5, ему бы выдавалась старая форма.
Аватара пользователя
evrus01
Former team member
Сообщения: 1274
Стаж: 13 лет
Откуда: Москва
Благодарил (а): 107 раз
Поблагодарили: 234 раза
Контактная информация:

Re: Простой мульти аплоад для phpbb3 (массовая загрузка файл

Сообщение evrus01 »

Очень радует, что члены сообщества, пытаются что-то сделать своими руками. Изучают код phpBB, читают FAQ и пр.
Но у меня все же вопрос именно по этому моду — зачем? Multiple File Upload прекрасно работает и не требует каких-то там современных браузеров.
Или тут была задача — получится или нет? В любом случае, вы молодец.
p.s. мод не проверял...
sweetah
phpBB 2.0.6
Сообщения: 505
Стаж: 14 лет 2 месяца
Благодарил (а): 107 раз
Поблагодарили: 26 раз

Re: Простой мульти аплоад для phpbb3 (массовая загрузка файл

Сообщение sweetah »

evrus01, вы описание-то читали? :) Это единственный мод с таким функционалом.
Nick
phpBB 1.4.2
Сообщения: 64
Стаж: 14 лет 2 месяца
Откуда: СПб
Благодарил (а): 7 раз
Поблагодарили: 21 раз
Контактная информация:

Re: Простой мульти аплоад для phpbb3 (массовая загрузка файл

Сообщение Nick »

evrus01 писал(а):Но у меня все же вопрос именно по этому моду — зачем? Multiple File Upload прекрасно работает и не требует каких-то там современных браузеров.
Главная идея, чтобы появилась возможность добавить сразу 10 файлов в 3 клика, с Multiple File Upload надо выбирать каждый файл по отдельности, а тут с шифтом выделил и добавил.
Без html5 это можно сделать только на flash или может быть на java (причем не скрипт), более того, неполучится изменять значения поля input file, т.к. это противоречит политике безопасности, иначе можно автоматом запросить файлик /etc/shadow или все кукизы пользователя...
sweetah писал(а):В идеале ещё надо бы скрестить это с модом, который по ссылке (Multiple File Upload) для поддержки всех браузеров. То есть, если браузер не поддерживает html5, ему бы выдавалась старая форма.
Старые браузеры по идее должны игнорировать параметр multiple - будет просто единичная загрузка.
В последнее время все чаще задумываюсь о том, чтобы всем кто пришел на мой форум с браузером от "известного производителя" выдавать большое окно, с подробным описанием почему он не прав, и как ему изменить мир в лучшую сторону :lol:.
sweetah
phpBB 2.0.6
Сообщения: 505
Стаж: 14 лет 2 месяца
Благодарил (а): 107 раз
Поблагодарили: 26 раз

Re: Простой мульти аплоад для phpbb3 (массовая загрузка файл

Сообщение sweetah »

Nick, дык единичная загрузка - неудобно. А если надо загрузить 30 файлов? Поэтому и говорю о том, что сделать бы возможность добавлять несколько форм загрузки как с модом Multiple File Upload.
А по вопросу с браузером вам сюда http://browser-update.org
Аватара пользователя
evrus01
Former team member
Сообщения: 1274
Стаж: 13 лет
Откуда: Москва
Благодарил (а): 107 раз
Поблагодарили: 234 раза
Контактная информация:

Re: Простой мульти аплоад для phpbb3 (массовая загрузка файл

Сообщение evrus01 »

Nick, дико извиняюсь :oops: Не обратил внимание на строки:
Nick писал(а): можно выбрать сразу несколько файлов
Аватара пользователя
TyMaH
phpBB 2.0.3
Сообщения: 389
Стаж: 12 лет 9 месяцев
Благодарил (а): 182 раза
Поблагодарили: 18 раз
Контактная информация:

Re: Простой мульти аплоад для phpbb3 (массовая загрузка файл

Сообщение TyMaH »

Шикарно. Поставил все вроде работает. Ни у кого багов небыло?
Изображение
Sergiocharm
phpBB 2.0.7
Сообщения: 593
Стаж: 13 лет 6 месяцев
Благодарил (а): 57 раз
Поблагодарили: 5 раз

Re: Простой мульти аплоад для phpbb3 (массовая загрузка файл

Сообщение Sergiocharm »

ТС мегамозх =), а я прям грезил о такой мультизагрузке. Поставил, все летает. Спасиб автору.
зы: может у вас еще приколюхи есть?
Nick
phpBB 1.4.2
Сообщения: 64
Стаж: 14 лет 2 месяца
Откуда: СПб
Благодарил (а): 7 раз
Поблагодарили: 21 раз
Контактная информация:

Re: Простой мульти аплоад для phpbb3 (массовая загрузка файл

Сообщение Nick »

Нашелся маленький баг:
После публикации сообщения файлы меняют свой порядок на обратный.

Т.е. загружаем 5 файлов, нажимаем предпросмотр, все ок - файлы идут 1 2 3 4 5, можно даже вставить их в сообщение все будет точно так же 1 2 3 4 5.

Но сразу после отправки сообщения файлы меняют порядок на 5 4 3 2 1. Причем нажимаем правка - файдлы именно в таком порядке - 5 4 3 2 1. Если в ручную переставить файлы местами, то в последствие сохраняется все нормально.

Не понимаю с чем это может быть связанно :? ?

ЗЫ в настройках формы добавления файлов стоит обратный (от стандартного) порядок, т.е. те файлы которые добавленны раньше появляются ниже.
Shredder
Former team member
Сообщения: 2217
Стаж: 15 лет 3 месяца
Благодарил (а): 236 раз
Поблагодарили: 561 раз
Контактная информация:

Re: Простой мульти аплоад для phpbb3 (массовая загрузка файл

Сообщение Shredder »

Nick
Это не маленький, это довольно значительный баг. В своём моде, на который вы ссылаетесь в первом сообщении, я устранил его заменой всех сортировок по filetime на сортировку по attach_id - во всех файлах, где нашёл. Посмотрите инструкцию.
Nick
phpBB 1.4.2
Сообщения: 64
Стаж: 14 лет 2 месяца
Откуда: СПб
Благодарил (а): 7 раз
Поблагодарили: 21 раз
Контактная информация:

Re: Простой мульти аплоад для phpbb3 (массовая загрузка файл

Сообщение Nick »

Да, я это видел... но на тот момент не стал переделывать... Т.к. много изменений а мод "простой" :).

Вообще, как-то это странно, почему в предпросмотре они показываются нормально? Может это какой-то баг в самом phpbb?

И зачем придумывать другую сортировку, если порядок точно противоположный?
Может попробовать сделать array_reverse?
Shredder
Former team member
Сообщения: 2217
Стаж: 15 лет 3 месяца
Благодарил (а): 236 раз
Поблагодарили: 561 раз
Контактная информация:

Re: Простой мульти аплоад для phpbb3 (массовая загрузка файл

Сообщение Shredder »

Nick писал(а):Вообще, как-то это странно, почему в предпросмотре они показываются нормально?
У меня было то же самое.
Nick писал(а):Может это какой-то баг в самом phpbb?
Нет, это зависит от сортировки. Т.к. старый способ сортирует-отображает по времени, а время при мультизагрузке у всех файлов получается одинаковым, то показывает он их в совершенно произвольном порядке. Для чего и была введена сортировка по attach_id, каждый из которых - уникален.
Nick писал(а):И зачем придумывать другую сортировку, если порядок точно противоположный?
Может попробовать сделать array_reverse?
Он не точно противоположный. В разных местах и ситуациях он будет "такой, как ему вздумается". Я тоже сначала думал, что "точно противоположный"...
Но вы вольны придумать и попробовать всё, что угодно, на своём тестовом сервере. Там и выясните.
Nick
phpBB 1.4.2
Сообщения: 64
Стаж: 14 лет 2 месяца
Откуда: СПб
Благодарил (а): 7 раз
Поблагодарили: 21 раз
Контактная информация:

Re: Простой мульти аплоад для phpbb3 (массовая загрузка файл

Сообщение Nick »

Решил проблему инкрементом filetime каждого следующего файла на 1.

В файле includes/functions_posting.php
Эту строчку:

Код: Выделить всё

	$filedata['filetime'] = time();
заменить на эти:

Код: Выделить всё

	if (!isset($GLOBALS['attachements_time_increment'])){$GLOBALS['attachements_time_increment']=0;}
	$filedata['filetime'] = time() + $GLOBALS['attachements_time_increment'];
	$GLOBALS['attachements_time_increment'] += 1;
Как оцениваете такой вариант?
Shredder
Former team member
Сообщения: 2217
Стаж: 15 лет 3 месяца
Благодарил (а): 236 раз
Поблагодарили: 561 раз
Контактная информация:

Re: Простой мульти аплоад для phpbb3 (массовая загрузка файл

Сообщение Shredder »

Можно было намного проще:

Код: Выделить всё

	$filedata['filetime'] = time() + str_replace('fileupload', '', $form_name);
Но в своё время я от этого варианта отказался, не помню уже, по каким именно причинам.
Закрыто

Вернуться в «Для авторов (phpBB 3.0.x)»