Ajax загрузка изображений на imgur

Как сделать загрузку изображений на внешний хостинг для форума phpBB3

Небольшие моды и хаки для форума phpBB3
Правила форума
При размещении мода/статьи взятой с другого форума/сайта обязательно необходимо указывать первоисточник сообщения.
 • Просмотры: 8084
Аватара пользователя
PPK
Администратор
Благодарил (а): 82 раза
Поблагодарили: 1621 раз
Сообщения: 10284
Зарегистрирован: 21 мар 2009, 17:13
Сообщение

Ajax загрузка изображений на imgur

30 авг 2012, 12:18

Мод для загрузки изображений на сервис изображений imgur.
На imgur установлен максимальный лимит в 225 отображаемых изображений для бесплатного аккаунта.
Для работы мода необходимо установленное расширение php-curl.
На imgur установлен максимальный лимит в 50 загрузок в час.
Данный мод НЕ совместим с модом Ajax загрузка изображений на imageshack (Ajax загрузка изображений на imageshack), если указанный мод уже установлен, из этой инструкции нужно выполнить только пункты: 1, 2, 5
minimods_imgur_uploader.zip
1. Скачиваем архив, распаковываем, заменяем файлы форума файлами из директории /root/

2. Для загрузки изображений на imgur необходимо получить API ключ, идём по этой https://imgur.com/register/api_anon ссылке, заполняем форму, после этого в поле Developer API Key: отобразится ключ, сохраняем это значение.

3. В phpmyadmin выполнить (если префикс таблиц не phpbb_ - заменить на свой)

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

INSERT INTO `phpbb_config` (`config_name`, `config_value`, `is_dynamic`) VALUES ('ppkbb_upload_max_image_size', '0 1048576', '0');
4. Переделать файлы:

/includes/acp/acp_board.php после

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

						'allow_birthdays'		=> array('lang' => 'ALLOW_BIRTHDAYS',		'validate' => 'bool',	'type' => 'radio:yes_no', 'explain' => true),
						'allow_quick_reply'		=> array('lang' => 'ALLOW_QUICK_REPLY',		'validate' => 'bool',	'type' => 'custom', 'method' => 'quick_reply', 'explain' => true),
добавить

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

						'ppkbb_upload_max_image_size'		=> array('lang' => 'PPKBB_UPLOAD_MAX_IMAGE_SIZE',		'validate' => 'string',	'type' => 'text:14:14', 'explain' => true),//PPK
/posting.php перед

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

// Start assigning vars for main posting page ...
$template->assign_vars(array(
добавить

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

//PPK
$ppkbb_upload_max_image_size=my_split_config($config['ppkbb_upload_max_image_size'], 2, 'my_int_val');
$user->lang['IMAGE_MAX_SIZE']=sprintf($user->lang['IMAGE_MAX_SIZE'], get_formatted_filesize(get_upload_max_filesize($ppkbb_upload_max_image_size[1])));
//PPK
перед

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

	'S_PRIVMSGS'				=> false,
добавить

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

	'S_ENABLE_IMAGE_UPLOAD' => $ppkbb_upload_max_image_size[0] ? true : false,
	'S_IMAGE_UPLOAD' => append_sid($phpbb_root_path.'image_upload.'.$phpEx),
	'S_MAX_IMAGE_SIZE' => $ppkbb_upload_max_image_size[1],
/viewtopic.php перед

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

// Send vars to template
$template->assign_vars(array(
добавить

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

//PPK
$ppkbb_upload_max_image_size=my_split_config($config['ppkbb_upload_max_image_size'], 2, 'my_int_val');
$user->lang['IMAGE_MAX_SIZE']=sprintf($user->lang['IMAGE_MAX_SIZE'], get_formatted_filesize(get_upload_max_filesize($ppkbb_upload_max_image_size[1])));
//PPK
перед

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

	'DELETE_IMG' 		=> $user->img('icon_post_delete', 'DELETE_POST'),
	'INFO_IMG' 			=> $user->img('icon_post_info', 'VIEW_INFO'),
добавить

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

	'S_ENABLE_IMAGE_UPLOAD' => $ppkbb_upload_max_image_size[0] ? true : false,
	'S_IMAGE_UPLOAD' => append_sid($phpbb_root_path.'image_upload.'.$phpEx),
	'S_MAX_IMAGE_SIZE' => $ppkbb_upload_max_image_size[1],
/language/ru/common.php перед
добавить

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

	'IMAGE_MAX_SIZE' => 'Максимальный размер изображения: %s',
	'UPLOAD_IMAGE' => 'Добавить изображения',
	'IMAGE_NAME' => 'Имя изображения',
	'ADD_IMAGE' => 'Добавить изображение',
/language/ru/acp/board.php перед
добавить

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

	'PPKBB_UPLOAD_MAX_IMAGE_SIZE' => 'Максимальный размер загружаемых изображений',
	'PPKBB_UPLOAD_MAX_IMAGE_SIZE_EXPLAIN' => 'Два числа через пробел, <br /><strong>число 1</strong>: включить возможность загрузки изображений на внешний хостинг, <br /><strong>число 2</strong>: максимальный размер загружаемых изображений на внешний хостинг (в байтах), данная опция может быть переопределена в файле конфигурации php',
/includes/functions.php после

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

// Common global functions
добавить

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

function get_upload_max_filesize($s=0)
{
	$max_filesize = @ini_get('upload_max_filesize');
	$unit = 'MB';
	if(!empty($max_filesize))
	{
		$unit = strtolower(substr($max_filesize, -1, 1));
		$max_filesize = (int) $max_filesize;

		$unit = ($unit == 'k') ? 'KB' : (($unit == 'g') ? 'GB' : 'MB');
	}
	else
	{
		$max_filesize=0;
	}
	switch($unit)
	{
		case 'KB':
			$max_filesize=$max_filesize*1024;
		break;
		case 'MB':
			$max_filesize=$max_filesize*1024*1024;
		break;
		case 'GB':
			$max_filesize=$max_filesize*1024*1024*1024;
		break;
	}
	$s && $s < $max_filesize ? $max_filesize=$s : '';

	return $max_filesize;
}
ищем текст

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

function my_split_config
если ничего не нашлось, после

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

// Common global functions
добавить

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

function my_split_config($config, $count=0, $type=false, $split='')
{
	$count=intval($count);
	$s_config=$count > 0 ? @explode($split ? $split : ' ', $config, $count) : @explode($split ? $split : ' ', $config);
	$count=$count > 0 ? $count : sizeof($s_config);
	if($count)
	{
		for($i=0;$i<$count;$i++)
		{
			if($type)
			{
				if(is_array($type) && @function_exists(@$type[$i]))
				{
					$s_config[$i]=call_user_func($type[$i], @$s_config[$i]);
				}
				else if(@function_exists($type))
				{
					$s_config[$i]=call_user_func($type, @$s_config[$i]);
				}
				else
				{
					$s_config[$i]=@$s_config[$i];
				}
			}
			else
			{
				$s_config[$i]=@$s_config[$i];
			}
		}
	}

	return $s_config;
}
/styles/prosilver/template/posting_editor.html после

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

<script type="text/javascript">
// <![CDATA[
	onload_functions.push('apply_onkeypress_event()');
// ]]>
</script>
добавить

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

<script type="text/javascript" src="{ROOT_PATH}tracker/addons/js/jquery.form.js"></script>
<script type="text/javascript">
// <![CDATA[
jQuery(document).ready(
	function($)
	{
		$('#uploadForm').ajaxForm({
			beforeSubmit: function(a,f,o)
			{
				o.dataType = $('#uploadResponseType')[0].value;
				$('#uploadOutput').html('<img src="./images/ajax-loader.gif" alt="" />');
			},
			resetForm: true,
			dataType: 'html',
			success: function(data)
			{
				var $out = $('#uploadOutput');
				$('#uploadOutput').html('');
				$out.append('<div>'+ data +'</div>');
			}
			});
		}
	);
// ]]>
</script>
/styles/prosilver/template/posting_layout.html после
добавить

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

<!-- IF S_ENABLE_IMAGE_UPLOAD -->
<div class="panel">
	<div class="inner"><span class="corners-top"><span></span></span>
			<div style="text-align:center;">
			<form id="uploadForm" action="{S_IMAGE_UPLOAD}" method="POST" enctype="multipart/form-data">
				<!-- IF S_MAX_IMAGE_SIZE --><input type="hidden" name="MAX_FILE_SIZE" value="{S_MAX_IMAGE_SIZE}" /><!-- ENDIF -->
				<strong>{L_IMAGE_NAME}</strong>: <input title="{L_IMAGE_MAX_SIZE}" size="50" class="inputbox autowidth" type="file" name="fileupload" />
				<input type="hidden" id="uploadResponseType" name="mimetype" value="html" />
				<input type="submit" value="{L_ADD_IMAGE}" class="button2" />
			</form>
			<div id="uploadOutput"></div>
			</div>
	<span class="corners-bottom"><span></span></span></div>
</div>
<!-- ENDIF -->
/styles/prosilver/template/quickreply_editor.html удалить

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

<form method="post" action="{U_QR_ACTION}">
или

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

<form id="postform" method="post" action="{U_QR_ACTION}">
перед

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

				<h2>{L_QUICKREPLY}</h2>
добавить

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

<form id="postform" method="post" action="{U_QR_ACTION}">
удалить
перед

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

				<a href="" class="right-box up" onclick="hide_qr(false); return false;" title="{L_COLLAPSE_QR}">{L_COLLAPSE_QR}</a>
добавить

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

		</form>
		<!-- IF S_ENABLE_IMAGE_UPLOAD -->
		<div style="text-align:center;">
			<form id="uploadForm" action="{S_IMAGE_UPLOAD}" method="POST" enctype="multipart/form-data">
				<!-- IF S_MAX_IMAGE_SIZE --><input type="hidden" name="MAX_FILE_SIZE" value="{S_MAX_IMAGE_SIZE}" /><!-- ENDIF -->
				<strong>{L_IMAGE_NAME}</strong>: <input title="{L_IMAGE_MAX_SIZE}" size="50" class="inputbox autowidth" type="file" name="fileupload" />
				<input type="hidden" id="uploadResponseType" name="mimetype" value="html" />
				<input type="submit" value="{L_ADD_IMAGE}" class="button2" />
			</form>
			<div id="uploadOutput"></div>
		</div>
		<!-- ENDIF -->
после

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

	onload_functions.push('init_qr();');
	// ]]>
</script>
добавить

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

<script type="text/javascript" src="{ROOT_PATH}tracker/addons/js/jquery.form.js"></script>
<script type="text/javascript">
// <![CDATA[
jQuery(document).ready(
	function($)
	{
		$('#uploadForm').ajaxForm({
			beforeSubmit: function(a,f,o)
			{
				o.dataType = $('#uploadResponseType')[0].value;
				$('#uploadOutput').html('<img src="./images/ajax-loader.gif" alt="" />');
			},
			resetForm: true,
			dataType: 'html',
			success: function(data)
			{
				var $out = $('#uploadOutput');
				$('#uploadOutput').html('');
				$out.append('<div>'+ data +'</div>');
			}
			});
		}
	);
// ]]>
</script>
если мод устанавливается не на ppkBB3cker или форма стандартного быстрого ответа не доработана для отображения бб-кодов в форме быстрого ответа, после

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

	onload_functions.push('init_qr();');
	// ]]>
</script>
добавить

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

<script type="text/javascript">
// <![CDATA[
	var form_name = 'postform';
	var text_name = <!-- IF $SIG_EDIT -->'signature'<!-- ELSE -->'message'<!-- ENDIF -->;
	var load_draft = false;
	var upload = false;
// ]]>
</script>
<script type="text/javascript" src="{T_TEMPLATE_PATH}/editor.js"></script>
/styles/subsilver2/template/posting_body.html после

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

	{S_FORM_TOKEN}
	</form>
добавить

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

<script type="text/javascript" src="{ROOT_PATH}tracker/addons/js/jquery.form.js"></script>
<script type="text/javascript">
// <![CDATA[
jQuery(document).ready(
	function($)
	{
		$('#uploadForm').ajaxForm({
			beforeSubmit: function(a,f,o)
			{
				o.dataType = $('#uploadResponseType')[0].value;
				$('#uploadOutput').html('<img src="./images/ajax-loader.gif" alt="" />');
			},
			resetForm: true,
			dataType: 'html',
			success: function(data)
			{
				var $out = $('#uploadOutput');
				$('#uploadOutput').html('');
				$out.append('<div>'+ data +'</div>');
			}
			});
		}
	);
// ]]>
</script>
<!-- IF S_ENABLE_IMAGE_UPLOAD -->
		<table class="tablebg" width="100%" cellspacing="1">
		<tr>
			<td class="row1">
			<div style="text-align:center;">
			<form id="uploadForm" action="{S_IMAGE_UPLOAD}" method="POST" enctype="multipart/form-data">
				<!-- IF S_MAX_IMAGE_SIZE --><input type="hidden" name="MAX_FILE_SIZE" value="{S_MAX_IMAGE_SIZE}" /><!-- ENDIF -->
				<strong>{L_IMAGE_NAME}</strong>: <input title="{L_IMAGE_MAX_SIZE}" size="50" class="inputbox autowidth" type="file" name="fileupload" />
				<input type="hidden" id="uploadResponseType" name="mimetype" value="html" />
				<input type="submit" value="{L_ADD_IMAGE}" class="button2" />
			</form>
			<div id="uploadOutput"></div>
			</div>
			</td>
		</tr>
		</table>
<!-- ENDIF -->
/styles/subsilver2/template/quickreply_editor.html после
добавить

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

<script type="text/javascript" src="{ROOT_PATH}tracker/addons/js/jquery.form.js"></script>
<script type="text/javascript">
// <![CDATA[
jQuery(document).ready(
	function($)
	{
		$('#uploadForm').ajaxForm({
			beforeSubmit: function(a,f,o)
			{
				o.dataType = $('#uploadResponseType')[0].value;
				$('#uploadOutput').html('<img src="./images/ajax-loader.gif" alt="" />');
			},
			resetForm: true,
			dataType: 'html',
			success: function(data)
			{
				var $out = $('#uploadOutput');
				$('#uploadOutput').html('');
				$out.append('<div>'+ data +'</div>');
			}
			});
		}
	);
// ]]>
</script>
<!-- IF S_ENABLE_IMAGE_UPLOAD -->
		<table class="tablebg" width="100%" cellspacing="1">
		<tr>
			<td class="row1">
			<div style="text-align:center;">
			<form id="uploadForm" action="{S_IMAGE_UPLOAD}" method="POST" enctype="multipart/form-data">
				<!-- IF S_MAX_IMAGE_SIZE --><input type="hidden" name="MAX_FILE_SIZE" value="{S_MAX_IMAGE_SIZE}" /><!-- ENDIF -->
				<strong>{L_IMAGE_NAME}</strong>: <input title="{L_IMAGE_MAX_SIZE}" size="50" class="inputbox autowidth" type="file" name="fileupload" />
				<input type="hidden" id="uploadResponseType" name="mimetype" value="html" />
				<input type="submit" value="{L_ADD_IMAGE}" class="button2" />
			</form>
			<div id="uploadOutput"></div>
			</div>
			</td>
		</tr>
		</table>
<!-- ENDIF -->
заменить (если найдено)

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

<form method="post" action="{U_QR_ACTION}">
на

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

<form id="postform" method="post" action="{U_QR_ACTION}">
если мод устанавливается не на ppkBB3cker или форма стандартного быстрого ответа не доработана для отображения бб-кодов в форме быстрого ответа, после
добавить

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

<script type="text/javascript">
// <![CDATA[
	var form_name = 'postform';
	var text_name = <!-- IF $SIG_EDIT -->'signature'<!-- ELSE -->'message'<!-- ENDIF -->;
	var load_draft = false;
	var upload = false;
// ]]>
</script>
<script type="text/javascript" src="{T_TEMPLATE_PATH}/editor.js"></script>
5. /image_upload.php в строке

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

$imgur_key='00000000000000000';
заменить

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

00000000000000000
на значение API ключа, который был получен на сайте imgur

6. Очистить кеш, обновить стили, настроить опцию.

Результат, скриншоты:
Опция в адм. разделе:


Форма загрузки изображения при создании темы:


Ссылка для вставки бб-кода загруженного изображения:


--
Для работы мода так же необходимо подключение библиотеки jQuery.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
US
USER57
Откуда: от туда
Благодарил (а): 49 раз
Поблагодарили: 72 раза
Сообщения: 610
Зарегистрирован: 28 авг 2010, 20:18
Сообщение

Ajax загрузка изображений на imgur

30 авг 2012, 14:32

PPK
Супер ты нас балуешь :D
http://star-anime.ru
vu
vulkan3
Благодарил (а): 45 раз
Поблагодарили: 36 раз
Сообщения: 1801
Зарегистрирован: 28 сен 2009, 03:36
Сообщение

Ajax загрузка изображений на imgur

01 сен 2012, 00:58

Все сменил все работает , спасибо PPK
ga
gazgaz
Сообщения: 5
Зарегистрирован: 04 сен 2012, 13:57
Сообщение

Ajax загрузка изображений на imgur

04 сен 2012, 15:02

День добрый Уважаемые!

Установил Ваш отличный мод для заливки изображений. Все сделал как написано. Все прошло гладко и без проблем. НО...

При попытке загрузки изображения мне пишет:
"Ошибка загрузки изображения, попробуйте позже ... (Максимальный размер изображения: 1 МБ)"


Подскажите в чем может быть проблема?
Есть мысль, может конечно и глупая, что может API ключ еще не действует или еще что...
Аватара пользователя
PPK
Администратор
Благодарил (а): 82 раза
Поблагодарили: 1621 раз
Сообщения: 10284
Зарегистрирован: 21 мар 2009, 17:13
Сообщение

Ajax загрузка изображений на imgur

04 сен 2012, 17:47

API ключ в ЛС, любые изображения вызывают эту ошибку?
ga
gazgaz
Сообщения: 5
Зарегистрирован: 04 сен 2012, 13:57
Сообщение

Ajax загрузка изображений на imgur

04 сен 2012, 18:47

PPK писал(а):любые изображения вызывают эту ошибку?
все :(

Добавлено спустя 41 секунду:
API отправил Вам в ЛС

Добавлено спустя 2 минуты 59 секунд:
делал сегодня же тоже самое, но для imageshack все прекрасно работает

Добавлено спустя 22 часа 25 секунд:
никаких соображений? :oops:
Аватара пользователя
PPK
Администратор
Благодарил (а): 82 раза
Поблагодарили: 1621 раз
Сообщения: 10284
Зарегистрирован: 21 мар 2009, 17:13
Сообщение

Ajax загрузка изображений на imgur

05 сен 2012, 16:53

ещё не смотрел ..

Добавлено спустя 1 час 39 минут 51 секунду:
API ключ рабочий, в настройках мода что стоит?
ga
gazgaz
Сообщения: 5
Зарегистрирован: 04 сен 2012, 13:57
Сообщение

Ajax загрузка изображений на imgur

05 сен 2012, 21:05

Аватара пользователя
PPK
Администратор
Благодарил (а): 82 раза
Поблагодарили: 1621 раз
Сообщения: 10284
Зарегистрирован: 21 мар 2009, 17:13
Сообщение

Ajax загрузка изображений на imgur

06 сен 2012, 14:22

1. php-curl установлен?
2. ошибки в логах форума/сервера?
3.
image_upload.php.tar.gz
скачать, распаковать, подставить свой API ключ, заменить этим файлом файл из мода, посмотреть, что пишет при загрузке изображений.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
ga
gazgaz
Сообщения: 5
Зарегистрирован: 04 сен 2012, 13:57
Сообщение

Ajax загрузка изображений на imgur

06 сен 2012, 15:21

PPK писал(а):1. php-curl установлен?
2. ошибки в логах форума/сервера?
3.
image_upload.php.tar.gz
(1.59 КБ) Скачиваний: 1
1.
2.
3.скачал, ввёл API

итог:
ничего не изменилось(((

п.с.: Уважаемый PPK, не смею тебя более отвлекать. Придётся остановиться на решении для imageshack. Благо оно работает.

Благодарю за уделённое время!

Вернуться в «Минимоды и хаки для phpBB3»