Перейти к контенту
  • 0

Загрузка нескольких файлов одновременно


yeaseo

Вопрос

Поиск ничего не дал.

 

Подскажите, как сделать так чтобы можно было в пост загружать сразу несколько файлов, а потом все их разом добавить. Допустим у меня 5 картинок, и чтобы не по одной добавлять, а загрузить сразу. Я так подозреваю что это правится в HTML фрагментах, в конкретном скине, но где и что там писать незнаю.

Ссылка на комментарий
Поделиться на других сайтах

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

  • 0

че??

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

Ссылка на комментарий
Поделиться на других сайтах

  • 0

эргономичней для поста с большим колвом файлов

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

в разделе юмор часто..

поэтому поддерживаю вопрос об одновременном прикреплении нескольких файлов

Ссылка на комментарий
Поделиться на других сайтах

  • 0

РАБОТАЕТ

убрал надпись, можно выполнять

 

1.Посмотрим, что там в инсталлере..

ALTER TABLE ".SQL_PREFIX."groups ADD g_upload_fields int(11) NOT NULL DEFAULT '1' AFTER g_attach_max

 

2.

Заменяем содержимое skin_post--Upload_field на

<tr>
<td colspan='2' align='center' class='bg1'>
<div style='width:100%;' align='center' class='borderwrap'>
<table cellpadding='0' cellspacing='0' width='100%' class='darkrow3'>
 <tr>
<td align="right" valign='top' width='20%'>{ipb.lang['upload_text']} {$data}</td>
<td align="left" width='80%'>
  <table align='center' width='100%' cellspacing='0' cellpadding='0'>
  <!--UPLOAD_FIELDS-->
  <tr>
	<td colspan='2' align='center'><input type='submit' onclick='Override=1;' name='attachgo' value="{ipb.lang['button_add_attachment']}" class='button' />
  </table><!--IBF.UPLOADED_ITEMS-->
</td>
  </tr>
 </table>
</div>
</td>
</tr>

 

3. создаем в skin_post новый шаблон

upload_field_input

данные - $i

содержание:

<td width='50%'><input type='file' class='forminput' size='35' name='FILE_UPLOAD_{$i}' /></td>

 

4.теперь как этим управлять...

sources/action_admin/groups.php

ищем

'g_attach_max'		 => $this->ipsclass->input['g_attach_max'],

после вставляем

'g_upload_fields'	  => $this->ipsclass->input['g_upload_fields'],

 

Ищем

		$this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array( "<b>В сообщениях: Максимальное общее место на диске для прикрепленных файлов каждого сообщения или личного сообщения (в килобайтах)</b>".$this->ipsclass->adskin->js_help_link('mg_upload')."<div class='graytext'>Введите <b>0</b> для отключения действия ограничения на место.<br />Это значение должны быть меньшим, чем глобальное ограничение.</div>" ,
															 $this->ipsclass->adskin->form_input("g_attach_per_post", $group['g_attach_per_post'] ). ' (установлено: '.$group['g_attach_per_postdis'].')'
													)	  );

для английской версии (плохо нуленой админки) ищем похожий фрагмент по словосочетанию $group['g_attach_per_postdis']

 

вставляем после

		$this->ipsclass->html .= $this->ipsclass->adskin->add_td_row( array( "<b>Number Of Upload Fields To Show When Adding A Post/Topic.</b><div class='graytext'>Minimum is 1</div>" ,
															 $this->ipsclass->adskin->form_input("g_upload_fields", $group['g_upload_fields'])
													)	  );

 

5. ну и наконец, то чем управлять..

sources/classes/post/class_post.php

ищем

$upload_field = $this->ipsclass->compiled_templates['skin_post']->Upload_field(  $main_space_left );

добавляем после

		//-----------------------------------------
	//  A21-Multiple Attachment Uploads
	//-----------------------------------------

	$tf = 0;
	$br = 0;
	$this->ipsclass->member['g_upload_fields'] = ($this->ipsclass->member['g_upload_fields'] > 0) ? $this->ipsclass->member['g_upload_fields'] : 1;
	for ($i=1; $i<=$this->ipsclass->member['g_upload_fields']; $i++)
	{
		$tf++;
		if ($tf == 1)
		{
			$fields .= "<tr>";
		}
		$fields .= $this->ipsclass->compiled_templates['skin_post']->upload_field_input($i);
		if ($tf == 2)
		{
			$tf = 0;
			$fields .= "</tr>";
		}
	}

	$upload_field = str_replace("<!--UPLOAD_FIELDS-->", $fields, $upload_field);

 

ищем

		//-----------------------------------------
	// Upload...
	//-----------------------------------------

	$upload->upload_process();

	//-----------------------------------------
	// Error?
	//-----------------------------------------

	if ( $upload->error_no )
	{
		switch( $upload->error_no )
		{
			case 1:
				// No upload
				return $attach_data;
			case 2:
				// Invalid file ext
				$this->obj['post_errors'] = 'invalid_mime_type';
				return $attach_data;
			case 3:
				// Too big...
				$this->obj['post_errors'] = 'upload_to_big';
				return $attach_data;
			case 4:
				// Cannot move uploaded file
				$this->obj['post_errors'] = 'upload_failed';
				return $attach_data;
			case 5:
				// Possible XSS attack (image isn't an image)
				$this->obj['post_errors'] = 'upload_failed';
				return $attach_data;
		}
	}

	//-----------------------------------------
	// Still here?
	//-----------------------------------------

	if ( $upload->saved_upload_name and @file_exists( $upload->saved_upload_name ) )
	{
		$attach_data['attach_filesize']   = @filesize( $upload->saved_upload_name  );
		$attach_data['attach_location']   = $upload->parsed_file_name;
		$attach_data['attach_file']	   = $upload->original_file_name;
		$attach_data['attach_is_image']   = $upload->is_image;
		$attach_data['attach_ext']		= $upload->real_file_extension;

		if ( $attach_data['attach_is_image'] == 1 )
		{
			$thumb_data = $this->create_thumbnail( $attach_data );

			if ( $thumb_data['thumb_location'] )
			{
				$attach_data['attach_thumb_width']	= $thumb_data['thumb_width'];
				$attach_data['attach_thumb_height']   = $thumb_data['thumb_height'];
				$attach_data['attach_thumb_location'] = $thumb_data['thumb_location'];
			}
		}

		$this->ipsclass->DB->do_insert( 'attachments', $attach_data );

		$newid = $this->ipsclass->DB->get_insert_id();

		$attach_data['attach_id'] = $newid;

		$this->per_post_count	+= $attach_data['attach_filesize'];
		$this->cur_post_attach[]  = $attach_data;

		return $newid;
	}

МЕНЯЕМ на

		//-----------------------------------------
	// Upload...
	//-----------------------------------------

	//-----------------------------------------
	// A21-Multiple Attachment Uploads
	//-----------------------------------------

	$this->ipsclass->member['g_upload_fields'] = ($this->ipsclass->member['g_upload_fields'] > 0) ? $this->ipsclass->member['g_upload_fields'] : 1;
	for ($i=1; $i<=$this->ipsclass->member['g_upload_fields']; $i++)
	{
		$upload->out_file_name		= 'post-'.$this->ipsclass->member['id'].'-'.(time()+$i);
		$upload->out_file_dir		= $this->ipsclass->vars['upload_dir'];
		$upload->max_file_size		= $main_space_left;
		$upload->make_script_safe	= 1;
		$upload->force_data_ext		= 'ipb';
		$upload->file_extension		= '';
		$upload->real_file_extension	= '';
		$upload->error_no		= 0;
		$upload->is_image		= 0;
		$upload->original_file_name	= '';
		$upload->parsed_file_name	= '';
		$upload->saved_upload_name	= '';
		$upload->upload_form_field	= "FILE_UPLOAD_".$i;
		$upload->upload_process();

		if ($upload->error_no)
		{
			if ($upload->error_no == 1)
			{
				continue;
			}
			else
			{
				switch ($upload->error_no)
				{
					case 2:
						// Invalid file ext
						$this->obj['post_errors'] = 'invalid_mime_type';
						return $attach_data;
					case 3:
						// Too big...
						$this->obj['post_errors'] = 'upload_to_big';
						return $attach_data;
					case 4:
						// Cannot move uploaded file
						$this->obj['post_errors'] = 'upload_failed';
						return $attach_data;
				}
			}
		}

		//-----------------------------------------
		// Still here?
		//-----------------------------------------

		if ( $upload->saved_upload_name and @file_exists( $upload->saved_upload_name ) )
		{
			$attach_data['attach_filesize']   = @filesize( $upload->saved_upload_name  );
			$attach_data['attach_location']   = $upload->parsed_file_name;
			$attach_data['attach_file']	   = $upload->original_file_name;
			$attach_data['attach_is_image']   = $upload->is_image;
			$attach_data['attach_ext']		= $upload->real_file_extension;

			if ( $attach_data['attach_is_image'] == 1 )
			{
				$thumb_data = $this->create_thumbnail( $attach_data );

				if ( $thumb_data['thumb_location'] )
				{
					$attach_data['attach_thumb_width']	= $thumb_data['thumb_width'];
					$attach_data['attach_thumb_height']   = $thumb_data['thumb_height'];
					$attach_data['attach_thumb_location'] = $thumb_data['thumb_location'];
				}
			}

			$this->ipsclass->DB->do_insert( 'attachments', $attach_data );
			$newid = $this->ipsclass->DB->get_insert_id();
			$attach_data['attach_id'] = $newid;

			$this->per_post_count	+= $attach_data['attach_filesize'];
			$this->cur_post_attach[]  = $attach_data;

			$upid = $newid;
		}

		if ($this->ipsclass->member['g_attach_max'] > 0)
		{
			$this->attach_sum = ($this->attach_sum + $attach_data['attach_filesize']);
			if ($this->ipsclass->member['g_attach_per_post'])
			{
				$main_space_left = intval(($this->ipsclass->member['g_attach_per_post'] * 1024) - $this->per_post_count);
			}
			else
			{
				$main_space_left = intval(($this->ipsclass->member['g_attach_max'] * 1024) - $this->attach_sum);
			}
		}
		else
		{
			if ($this->ipsclass->member['g_attach_per_post'])
			{
				$main_space_left = intval(($this->ipsclass->member['g_attach_per_post'] * 1024) - $this->per_post_count);
			}
			else
			{
				$main_space_left = 1000000000;
			}
		}

		$attach_data = array( 
						  'attach_ext'			=> "",
						  'attach_file'		   => "",
						  'attach_location'	   => "",
						  'attach_thumb_location' => "",
						  'attach_hits'		   => "",
						  'attach_date'		   => time(),
						  'attach_temp'		   => 0,
						  'attach_pid'			=> "",
						  'attach_post_key'	   => $this->ipsclass->input['post_key'],
						  'attach_member_id'	  => $this->ipsclass->member['id'],
						  'attach_filesize'	   => 0,
						);
	}

	return $upid;

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

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

Гость
Ответить на вопрос...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.