Загрузка изображений TinyMCE с переопределением images_upload_handler
У меня есть TinyMCE и загрузка изображений с помощью перетаскивания мышью. Я указал images_upload_url: 'handler.php'
и написал обработчик, который получает данные и обрабатывает их соответствующим образом.
Однако есть один дополнительный параметр, который я хотел бы динамически передать в handler.php со стороны клиента во время размещения изображения на странице.
Я вижу в документации, что вы можете "свернуть свою" функцию, написав свою собственную функцию images_upload_handler. Этого было бы достаточно, однако я бы предпочел использовать существующий TinyMCE для простоты. Мне было интересно, есть ли способ, которым я могу каким-то образом динамически изменить images_upload_url, чтобы динамически добавлять параметр GET (например,? Foo=bar) непосредственно перед запуском функции images_upload_handler по умолчанию? Или есть способ, которым я мог бы указать свою собственную функцию для images_upload_handler, но затем сразу вызвать функцию TinyMCE 'parent' по умолчанию? Я думаю что-то вроде этого (просто как макет / идея):
tinyMCE.init({
selector: 'textarea',
images_upload_url: 'handler.php',
images_upload_handler: function (blobInfo, success, failure) {
// change images_upload_url to handler.php?foo=bar
// call default TinyMCE images_upload_handler function.
}
})
Или, в качестве альтернативы, вместо того, чтобы напрямую переопределять images_upload_handler, есть ли функция или событие, к которым я могу подключиться после того, как изображение будет добавлено в редактор, но до запуска images_upload_handler?
Редактировать:
Я попробовал другой подход динамической установки images_upload_url в событии init_instance_callback следующим образом:
images_upload_url: 'handler.php',
init_instance_callback : function(ed) {
ed.settings.images_upload_url += '?foo=bar';
console.log('changed images_upload_url to: ' + ed.settings.images_upload_url);
}
В этом случае console.log на самом деле выводит измененный 'handler.php? Foo=bar', однако, когда дело доходит до загрузки изображения, оно возвращается к handler.php - кажется, оно не изменено правильно?
1 ответ
Как вы уже видели, вы не можете изменить настройку после инициализации редактора... ваша попытка использовать init_instance_callback
сбой, потому что после инициализации редактора вы не можете изменить значение.
Я хотел бы попытаться внедрить данные, которые нужно добавить в переменную JavaScript, а затем заставить фактический объект init использовать эту переменную. Например:
var urlParams = <?php echo $urlParamsAsAString ?>
tinyMCE.init({
selector: 'textarea',
images_upload_url: 'handler.php' + urlParams,
.
.
.
})
В этом примере предполагается, что вы используете PHP и у вас есть переменная с именем $urlParamsAsAString, которая содержит нужную вам строку (например, '?foo=bar'
). Вы можете сделать то же самое с любым языком на стороне сервера.
Это позволяет каждой загрузке страницы определять, какие параметры являются правильными, и до тех пор, пока эта переменная будет определена при запуске TinyMCE, они будут добавлены правильно.
РЕДАКТИРОВАТЬ / ПРИМЕЧАНИЕ: Если вы используете одностраничное приложение, в котором вы не загружаете init при каждой перезагрузке страницы, вам необходимо remove()
а также init()
редактор каждый раз, когда вы хотите изменить детали конфигурации.