【问题标题】:Send custom parameters to image manager in TinyMCE editor在 TinyMCE 编辑器中将自定义参数发送到图像管理器
【发布时间】:2012-08-07 19:57:53
【问题描述】:
我需要根据各种场景设置图片管理器的路径和根路径。
同一用户可以使用图片管理器从不同页面上传图片。我想从客户端发送一个参数来指示场景。例如,如果用户在主页使用编辑器,则发送 home;同样,如果在联系我们页面中使用,请发送联系方式。我所能做的就是在初始化期间在客户端设置根路径。例如,imagemanager_rootpath: "test"。但是我的路径是根据我发送的参数在服务器端计算的。有没有办法做到这一点。
【问题讨论】:
标签:
tinymce
url-parameters
mcimagemanager
【解决方案1】:
根据我对您的问题的了解,您有两种选择:
1:从服务器上的模板生成 Javascript(比如使用 Smarty 或等效的)并将正确的根路径插入到 TinyMCE 初始化代码中。
所以,在直接的 PHP 中,你可能会得到这样的结果:
<?php
$root_path = get_root_path();
?>
// Other javascript goes here
tinymceInstance = tinyMce.init({
//parameters
imagemanager_rootpath: "<?php echo $root_path ?>"
});
2:生成一个 Javascript 参数文件,其中包含您希望 Javascript 具有的所有参数,然后在初始化 tinyMCE 实例时使用它。
参数文件:
<?php
echo "window.serverParameters = ".json_encode(array("imageRoot" => get_root_path()));
?>
HTML:
<html>
<head>
<script src="serverParameters.php" type="text/javascript" />
</head>
</html>
Javascript:
tinymceInstance = tinyMce.init({
//parameters
imagemanager_rootpath: window.serverParameters.imageRoot
});
希望有帮助!
【讨论】:
-
我确实尝试了这两个选项。而且我不得不重复很多代码。它几乎类似于做 Session["imagemanager.filesystem.rootpath"] = "";在我使用编辑器的每个页面上。有时页面在同一页面上有多个编辑器,他们需要上传到不同的位置。如果我可以在 tinyMce.init() 中设置自定义参数并在服务器端接收它,那就太好了。我目前使用的是第二个选项,但是我在会话中设置了根路径,而不是 js 参数。
【解决方案2】:
目前,我找不到更好的方法来做到这一点。我最终创建了一个辅助方法,该方法接受一个指示资源类型的参数并确定根路径并设置 Session["imagemanager.filesystem.rootpath"] = "someRootPath"。在使用编辑器返回视图的控制器中,我调用了这个辅助方法。这几乎没有缺点。一是无论您是否使用图像管理器,都会预先调用辅助方法。我最初的方法是在单击图像管理器后设置路径。因此,如果视图中的编辑器不使用图像管理器,请不要调用辅助方法。这样做的第二个缺点是,如果您在同一个视图上有多个编辑器,但他们需要上传到不同的位置;这是不可能的。所有编辑器都使用会话中设置的相同根路径。同样,更好的方法是从每个编辑器向服务器发送一个值并设置根路径。使用多个位置的一种方法是获取所有位置并使用 magemanager_rootpath:“someRootPath”在 tinyMce 编辑器的 init() 中设置它们。
然而,这样做的一个好处是,如果您的视图使用多个编辑器并且它们都使用该视图中的相同位置,则辅助方法仅被调用一次,而不是使用原始方法多次调用。
因此,我将 Skurrier 的答案标记为正确,但如果您找到更好的方法,请离开 cmets。