Перейти к контенту
  • 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;

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

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

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить на вопрос...

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

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

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

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

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

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

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

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