TinyMCE 图片上传覆盖 images_upload_handler
TinyMCE image uploading overriding images_upload_handler
我的 TinyMCE 和拖放图片上传功能运行良好。我已经指定 images_upload_url: 'handler.php'
并编写了接收数据并适当处理数据的处理程序。
但是,在将图像拖放到页面上时,我想从客户端动态传递一个额外的参数给 handler.php。
我在文档中看到您可以通过编写自己的 images_upload_handler 函数来 "roll your own" 发挥作用。这就足够了,但是为了简单起见,我宁愿使用现有的 TinyMCE。我想知道有没有一种方法可以动态更改 images_upload_url 以在默认 images_upload_handler 函数运行之前动态附加 GET 参数(例如?foo=bar)?或者有没有一种方法可以为 images_upload_handler 指定我自己的函数,然后直接调用默认的 'parent' TinyMCE 函数?我在想这样的事情(就像 mockup/idea):
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 触发之前,是否有我可以挂钩的函数或事件?
编辑:
我尝试了一种不同的方法,在 init_instance_callback 事件中动态设置 images_upload_url,如下所示:
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 - 似乎没有正确更改?
如您所见,编辑器初始化后无法修改设置...您尝试使用 init_instance_callback
失败,因为编辑器初始化后无法更改值。
我会做的是尝试注入您需要附加的数据作为 JavaScript 变量,然后让实际的初始化对象使用该变量。例如:
var urlParams = <?php echo $urlParamsAsAString ?>
tinyMCE.init({
selector: 'textarea',
images_upload_url: 'handler.php' + urlParams,
.
.
.
})
此示例假定您使用的是 PHP 并具有名为 $urlParamsAsAString 的变量,其中包含您需要的字符串(例如 '?foo=bar'
)。您当然可以对任何服务器端语言执行相同的操作。
这允许每个页面加载确定正确的参数是什么,只要在您初始化 TinyMCE 时定义了该变量,它们就会被正确附加。
EDIT/NOTE:如果您使用的是单页应用程序,您不会在每次重新加载页面时加载 init,则您将需要 remove()
和 init()
编辑器您想要更改配置详细信息的时间。
我的 TinyMCE 和拖放图片上传功能运行良好。我已经指定 images_upload_url: 'handler.php'
并编写了接收数据并适当处理数据的处理程序。
但是,在将图像拖放到页面上时,我想从客户端动态传递一个额外的参数给 handler.php。
我在文档中看到您可以通过编写自己的 images_upload_handler 函数来 "roll your own" 发挥作用。这就足够了,但是为了简单起见,我宁愿使用现有的 TinyMCE。我想知道有没有一种方法可以动态更改 images_upload_url 以在默认 images_upload_handler 函数运行之前动态附加 GET 参数(例如?foo=bar)?或者有没有一种方法可以为 images_upload_handler 指定我自己的函数,然后直接调用默认的 'parent' TinyMCE 函数?我在想这样的事情(就像 mockup/idea):
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 触发之前,是否有我可以挂钩的函数或事件?
编辑:
我尝试了一种不同的方法,在 init_instance_callback 事件中动态设置 images_upload_url,如下所示:
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 - 似乎没有正确更改?
如您所见,编辑器初始化后无法修改设置...您尝试使用 init_instance_callback
失败,因为编辑器初始化后无法更改值。
我会做的是尝试注入您需要附加的数据作为 JavaScript 变量,然后让实际的初始化对象使用该变量。例如:
var urlParams = <?php echo $urlParamsAsAString ?>
tinyMCE.init({
selector: 'textarea',
images_upload_url: 'handler.php' + urlParams,
.
.
.
})
此示例假定您使用的是 PHP 并具有名为 $urlParamsAsAString 的变量,其中包含您需要的字符串(例如 '?foo=bar'
)。您当然可以对任何服务器端语言执行相同的操作。
这允许每个页面加载确定正确的参数是什么,只要在您初始化 TinyMCE 时定义了该变量,它们就会被正确附加。
EDIT/NOTE:如果您使用的是单页应用程序,您不会在每次重新加载页面时加载 init,则您将需要 remove()
和 init()
编辑器您想要更改配置详细信息的时间。