0

У меня есть TinyMCE и перетаскивание изображений с эффектом перетаскивания. Я указал images_upload_url: 'handler.php' и написал обработчик, который получает данные и обрабатывает их соответствующим образом.Загрузка изображения TinyMCE с переопределением image_upload_handler

Однако есть один дополнительный параметр, который я бы хотел динамически передать обработчику handler.php со стороны клиента в момент удаления изображения на страницу.

Я вижу в документации, что вы можете «сворачивать свою собственную» функцию, написав собственную функцию image_upload_handler. Этого было бы достаточно, однако я бы предпочел использовать существующий TinyMCE для простоты. Мне было интересно, есть ли способ каким-то образом динамически изменить image_upload_url для динамического добавления параметра GET (например,? Foo = bar) непосредственно перед запуском функции images_upload_handler по умолчанию? Или есть способ, которым я мог бы указать свою собственную функцию для image_upload_handler, но затем сразу же вызвать функцию родительского TinyMCE по умолчанию? Я имею в виду что-то вроде этого (так же, как макете/идеи):

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?

Edit:

Я попробовал другой подход динамического установления 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 - кажется, он не изменился правильно?

ответ

0

Как вы видели, вы не можете изменить параметр после того, как редактор инициализировал себя ... ваша попытка использовать 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, они будут добавлены правильно.

EDIT/NOTE: Если вы используете одностраничное приложение, в котором вы не загружаете init при каждой перезагрузке страницы, вам нужно будет редактировать и init() каждый раз, когда вы хотите изменить данные конфигурации.

+0

Спасибо. Я пробовал этот подход, но мое приложение - одностраничное приложение. Каждая загрузка/изменение экрана управляется js, а начальная инициализация запускается только один раз на первой загрузке приложения php-страницы приложения (происходит только один раз). Поэтому при попытке этого подхода он загружает переменные правильно при первом загрузке, но затем при каждом изменении экрана javascript он не обновляется новыми динамическими переменными, которые меняются со стороны js. Это было сделано по соображениям производительности, так что init не нужно вызывать с каждой сменой страницы. – Manachi

+0

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

+0

Я надеялся избежать этого, но в конечном итоге пошел таким путем и повторно инициализировал редактор с каждой сменой страницы и, похоже, работает до сих пор. Я пометил ответ, хотя технически это был ваш комментарий, с которым я пошел. Но ваш ответ также помог, подтвердив, что настройки не могут быть изменены после init, что остановило меня, прижав голову к стене этим. Спасибо за вашу помощь :) – Manachi

Смежные вопросы