Загрузка изображений 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() редактор каждый раз, когда вы хотите изменить детали конфигурации.

Другие вопросы по тегам