[3.2][3.3] Вставка картинок
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Мини [FAQ] по phpBB3.1.x/3.3.x | FAQ | Как задавать вопросы | Как устанавливать расширения
Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение
).
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Мини [FAQ] по phpBB3.1.x/3.3.x | FAQ | Как задавать вопросы | Как устанавливать расширения
Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение
-
Siava
- Поддержка

- Сообщения: 5557
- Стаж: 21 год 8 месяцев
- Откуда: Питер
- Благодарил (а): 187 раз
- Поблагодарили: 776 раз
Re: [3.2][3.3] Вставка картинок
Михаил Молчанов, добавьте в админке это расширение и будет поддерживать.
Еще одно нарушение правил и будете забанены. © Mr. Anderson
Ты очистил кеш? © Sheer
https://siava.ru (phpbb2.0.x 3.5.x)
Ты очистил кеш? © Sheer
https://siava.ru (phpbb
-
Michel
- Поддержка

- Сообщения: 650
- Стаж: 14 лет 8 месяцев
- Откуда: Липецк
- Благодарил (а): 144 раза
- Поблагодарили: 81 раз
Re: [3.2][3.3] Вставка картинок
По умолчанию не поддерживает. Но можно попробовать форум заставить поддерживать данный формат. Вопрос зачем? Ведь формат jfif является тем же самым jpeg. Можно изменить окончание файла на jpg и форум его примет как родного.
-
Михаил Молчанов
- phpBB 1.4.4
- Сообщения: 181
- Стаж: 2 года 1 месяц
- Откуда: Москва
- Благодарил (а): 3 раза
- Поблагодарили: 7 раз
-
Michel
- Поддержка

- Сообщения: 650
- Стаж: 14 лет 8 месяцев
- Откуда: Липецк
- Благодарил (а): 144 раза
- Поблагодарили: 81 раз
Re: [3.2][3.3] Вставка картинок
В движке phpBB встроена строгая система безопасности, которая сверяет реальный тип файла с его расширением. Для системы расширение .jfif является неизвестным "чужаком", хотя внутри находится стандартный MIME-тип image/jpeg. Чтобы подружить phpBB с форматом .jfif, нужно выполнить два шага: один в панели администратора, а второй — в коде самого форума.
Если просто добавить формат в админке, то при загрузке мы получим ошибку "Несовпадение типа изображения: ожидаемое расширение jpg вместо полученного jfif."
Отправлено спустя 25 минут 26 секунд:
Измените окончание файла с jfif на jpg и всё.Михаил Молчанов писал(а): Вчера 0:37 У меня jfif добавлено через админку. но всё равно не поддерживается
Так как:
Менять код движка не рекомендуется!!!
Отправлено спустя 9 минут 15 секунд:
Но если сильно хочется, то нужно отредактировать файл
Код: Выделить всё
phpbb/files/upload.phpКод: Выделить всё
IMAGETYPE_JPEG => ['jpg', 'jpeg'],Код: Выделить всё
IMAGETYPE_JPEG => ['jpg', 'jpeg', 'jfif'],-
rxu
- phpBB Guru

- Сообщения: 17252
- Стаж: 20 лет 4 месяца
- Откуда: Красноярск
- Благодарил (а): 587 раз
- Поблагодарили: 1781 раз
Re: [3.2][3.3] Вставка картинок
Оно же, но надо проверять на работоспособность.
Re: [3.1][3.2] BB3ImageUpload: загрузка изображений на внешние хостинги изображений
-
Kuskow
- phpBB 2.0.6
- Сообщения: 505
- Стаж: 10 лет 3 месяца
- Откуда: 🇰🇿 Караганда
- Благодарил (а): 29 раз
- Поблагодарили: 48 раз
Re: [3.2][3.3] Вставка картинок
Что-то пользователи без энтузиазма восприняли нововведение. Некоторые сказали, что им недостаточно выбирать файлы, нужен копипаст (перетаскивать выбранные файлы из проводника в окно загрузки понравилось). Но мы с Google-ИИ не стали это реализовывать, а пошли чуть дальше и сделали копипаст изображения прямо в текст сообщения. Теперь можно, например, сделать скриншот и вставить его в своё сообщение, не сохраняя на локальном диске. Или, листая свой web-фотоальбом, скопировать оттуда изображение и вставить в окно редактирования сообщения на форуме. Ну и в проводнике можно выбрать несколько локальных файлов, скопировать список и вставить их прямо в сообщение - файлы загрузятся на сервер, а в окне редактирования появятся ссылки на загруженные файлы, обрамлённые тегами img. Красота красивая!
Кому надо так же, измените код в этом файле. Не забудьте вместо контекста "ЗАМЕНИТЬ_ТОКЕН" подставить своё, что у вас там, чтобы было одинаково со вторым файлом.
Кому надо так же, измените код в этом файле. Не забудьте вместо контекста "ЗАМЕНИТЬ_ТОКЕН" подставить своё, что у вас там, чтобы было одинаково со вторым файлом.
Kuskow писал(а): 18.09.2026 5:43В папке шаблона
/styles/prosilver/templateсоздаём файлfast_upload.jsи записываем в него код:
Код: Выделить всё
(function() {
let globalFileInput = null;
const SECRET_TOKEN = 'ЗАМЕНИТЬ_ТОКЕН';
const ORIGINAL_ICON = '<i class="icon fa-cloud-upload fa-fw" aria-hidden="true"></i>';
function getOrCreateFileInput() {
if (globalFileInput) return globalFileInput;
const fileInput = document.createElement('input');
fileInput.type = 'file';
fileInput.id = 'fast-image-file-input';
fileInput.multiple = true;
fileInput.accept = 'image/*';
fileInput.style.display = 'none';
document.body.appendChild(fileInput);
globalFileInput = fileInput;
return fileInput;
}
// Универсальная функция для отправки файлов на сервер и вставки BB-кодов
function uploadAndInsertImages(files, newButton, statusSpan, textarea) {
if (!files || files.length === 0) return;
const formData = new FormData();
formData.append('token', SECRET_TOKEN);
for (let i = 0; i < files.length; i++) {
formData.append('images[]', files[i]);
}
// Анимация на кнопке
if (newButton) {
newButton.innerHTML = '⏳';
newButton.disabled = true;
}
if (statusSpan) statusSpan.textContent = '⏳';
fetch('/upload_compress.php', {
method: 'POST',
body: formData
})
.then(response => {
if (!response.ok) throw new Error('Ошибка сервера ' + response.status);
return response.json();
})
.then(data => {
if (data.links && data.links.length > 0) {
const startPos = textarea.selectionStart;
const endPos = textarea.selectionEnd;
const hasTextBefore = textarea.value.substring(0, startPos).trim().length > 0;
let bbcodeInsert = hasTextBefore ? '\r\n\r\n' : '';
data.links.forEach((link, index) => {
bbcodeInsert += `[img]${link}[/img]`;
if (index < data.links.length - 1) {
bbcodeInsert += '\r\n\r\n\r\n';
}
});
bbcodeInsert += '\r\n\r\n';
const textBefore = textarea.value.substring(0, startPos);
const textAfter = textarea.value.substring(endPos, textarea.value.length);
textarea.value = textBefore + bbcodeInsert + textAfter;
textarea.focus();
textarea.selectionStart = textarea.selectionEnd = startPos + bbcodeInsert.length;
if (newButton) newButton.innerHTML = '✅';
if (statusSpan) statusSpan.textContent = '✅';
} else {
if (newButton) newButton.innerHTML = '❌';
if (statusSpan) statusSpan.textContent = '❌';
}
})
.catch(error => {
console.error('Ошибка:', error.message);
if (newButton) newButton.innerHTML = '❌';
if (statusSpan) statusSpan.textContent = '❌';
})
.finally(() => {
setTimeout(() => {
if (newButton) {
newButton.innerHTML = ORIGINAL_ICON;
newButton.disabled = false;
}
if (statusSpan) statusSpan.textContent = '';
}, 2500);
});
}
function injectUploadButton(colorButton, textarea) {
if (!colorButton || !textarea || colorButton.parentNode.querySelector('.phpbb-fast-upload-trigger')) return;
const newButton = document.createElement('button');
newButton.type = 'button';
newButton.className = 'button button-icon-only phpbb-fast-upload-trigger';
newButton.title = 'Загрузить фото';
newButton.innerHTML = ORIGINAL_ICON;
newButton.style.marginLeft = '4px';
colorButton.parentNode.insertBefore(newButton, colorButton.nextSibling);
// Клик по кнопке (обычный выбор файлов с диска)
newButton.onclick = function(e) {
e.preventDefault();
e.stopPropagation();
const fileInput = getOrCreateFileInput();
fileInput.onchange = null;
fileInput.onchange = function() {
if (!fileInput.files || fileInput.files.length === 0) return;
uploadAndInsertImages(fileInput.files, newButton, null, textarea);
fileInput.value = '';
};
fileInput.click();
};
// НАЧАЛО БЛОКА КОПИПАСТА (Ctrl+V)
// Вешаем слушатель события вставки прямо на текстовое поле ввода сообщения
textarea.addEventListener('paste', function(e) {
// Проверяем, есть ли бинарные данные (файлы) в буфере обмена
if (!e.clipboardData || !e.clipboardData.files || e.clipboardData.files.length === 0) {
return; // Если вставили обычный текст — ничего не делаем, работает стандартно
}
const pastedFiles = [];
for (let i = 0; i < e.clipboardData.files.length; i++) {
const file = e.clipboardData.files[i];
// Нам нужны только изображения
if (file.type.indexOf('image/') !== -1) {
pastedFiles.push(file);
}
}
if (pastedFiles.length > 0) {
// Предотвращаем стандартное поведение браузера (чтобы в textarea не вставился мусор)
e.preventDefault();
// Запускаем процесс отправки скопированных картинок
uploadAndInsertImages(pastedFiles, newButton, null, textarea);
}
});
// КОНЕЦ БЛОКА КОПИПАСТА
}
function autoScanAndInject() {
const colorButtons = document.querySelectorAll('[name="bbpalette"], #bbpalette, .bbcode-color');
if (colorButtons.length > 0) {
colorButtons.forEach(colorBtn => {
const parentForm = colorBtn.closest('form') || colorBtn.closest('.quickreply') || colorBtn.closest('#qr_postform') || document;
const textarea = parentForm.querySelector('textarea');
if (textarea) {
injectUploadButton(colorBtn, textarea);
}
});
}
}
autoScanAndInject();
const observer = new MutationObserver(() => autoScanAndInject());
observer.observe(document.body, { childList: true, subtree: true });
})();


