从ContentTools中的自定义媒体管理器插入图像

何塞·爱德华多·比亚西奥利

在过去几年一直在开发的PHP框架中实现了出色的Content Tools编辑器,但是我走到了穷途末路。

我想从自定义媒体管理器(已实现)中将图像插入到当前可编辑区域内的光标位置,就像默认图像工具一样。

我尝试遵循有关开发自己的工具教程,但是我对Coffee Script和JavaScript的不太了解使我退缩。


从我的理解,也许这些步骤将是:

  1. 基于图像工具创建一个工具
  2. 这些工具将以模式(iframe)而不是ContentTools的默认对话框打开媒体管理器(这就是媒体管理器在固件中的工作方式)
  3. 在媒体管理器上做我的事情(上传,裁剪,分类图像等)
  4. 从列表中选择一个图像,然后单击“插入”
  5. 媒体管理器iframe会调用parent.someFunction({ image data }),它会插入图片,就像默认的“图片”工具一样。
  6. 完毕!

一些严重的疑问:

  1. 如何用我的模态调用覆盖默认对话框?

  2. 我是否必须将区域名称光标位置(?)作为参数传递给iframe或此信息存储在主作用域中的某个位置?(或者...我什至不必担心这件事,否则编辑器可以处理所有事情吗?)

  3. 是否有可能创建一个可以像这样调用的函数:

    parent.insertMediaManagerItem({
      url: 'my-image.png',
      width: '300px',
      height: '200px'
    });
    

同样,我是一个新手对ContentTools主题迷失了。任何帮助,将不胜感激。

安东尼·布莱克肖

我可以提供的最好的示例是用于KCFinder的实现,KCFinder是另一个用PHP编写的媒体管理器,我相信它(至少在我帮助过的实现中)使用新窗口而不是iframe,但我相信原理是相同的。

正如您已经指出的,最简单的解决方案是编写自己的映像工具以替换默认工具,这样,通过CT映像对话框和ImageUploader类讨论的上载和/或返回映像的责任将切换到自定义媒体管理器。本教程。

以下是我们用于KCFinder的工具代码的修改版本:

当我说我们,我指的是我和沃特·范·Marrum谁提出,并帮助创建github上KCFinder例子在这里

// So this little bundle of variables is required because I'm using CoffeeScript
// constructs and this code will potentially not have access to these.
var __slice = [].slice,
__indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; },
__hasProp = {}.hasOwnProperty,
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
__bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; };

// Define out custom image tool
var CustomImageTool = (function(_super) {
    __extends(CustomImageTool, _super);

    function CustomImageTool() {
      return CustomImageTool.__super__.constructor.apply(this, arguments);
    }

    // Register the tool with ContentTools (in this case we overwrite the 
    // default image tool).
    ContentTools.ToolShelf.stow(CustomImageTool, 'image');

    // Set the label and icon we'll use 
    CustomImageTool.label = 'Image';
    CustomImageTool.icon = 'image';

    CustomImageTool.canApply = function(element, selection) {    
        // So long as there's an image defined we can alwasy insert an image
        return true;
    };

    CustomImageTool.apply = function(element, selection, callback) {

        // First define a function that we can send the custom media manager
        // when an image is ready to insert.
        function _insertImage(url, width, height) {
            // Once the user has selected an image insert it

            // Create the image element
            var image = new ContentEdit.Image({src: url});

            // Insert the image
            var insertAt = CustomImageTool._insertAt(element);
            insertAt[0].parent().attach(image, insertAt[1]);

            // Set the image as having focus
            image.focus();

            // Call the given tool callback
            return callback(true);

            window.KCFinder = null;
        }

        // Make the new function accessible to your iframe
        window.parent.CustomMediaManager = {_inserImage: _insertImage};

        // Hand off to your custom media manager
        //
        // This bit you'll need to figure out for yourself or provide more
        // details about how your media manager works, for example in 
        // KCFinder here we open a new window and point it at the KCFinder
        // browse.php script. In your case you may be looking to insert an
        // iframe element and/or set the src for that iframe. 
        //
        // When the user uploads/selects an image in your media manager you
        // are ready to call the `_insertImage` function defined above. The
        // function is accessed against the iframe parent using:
        //
        //     window.parent.CustomMediaManager._insertImage(url, width, height);
        //

    };

    return CustomImageTool;

})(ContentTools.Tool);

我希望能提供足够的帮助您集成您的媒体管理器,但如果不能,那么您可以提供有关媒体管理器工作方式的更多详细信息(也许我可以查看一个示例),我将很乐意尝试并提供一个更完整的解决方案。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从ContentTools中的自定义媒体管理器插入图像

来自分类Dev

使用Google跟踪代码管理器在页面DOM中插入自定义HTML

来自分类Dev

新媒体上传器中的自定义图像大小

来自分类Dev

Android:自定义对象中的警报管理器?

来自分类Dev

在自定义叠加层图像上使用绘图管理器

来自分类Dev

Django:如何级联在不同抽象类中定义的自定义管理器?

来自分类Dev

在自定义验证器中获取实体管理器

来自分类Dev

AFNetworking 2自定义会话管理器

来自分类Dev

自定义内存管理器抽象

来自分类Dev

自己的自定义Android策略管理器

来自分类Dev

SBT自定义冲突管理器

来自分类Dev

自定义可拖动布局管理器

来自分类Dev

自定义模型管理器的链接方法

来自分类Dev

自定义下载管理器JavaScript

来自分类Dev

Django自定义模型管理器

来自分类Dev

django自定义管理器manytomany字段添加

来自分类Dev

自己的自定义Android策略管理器

来自分类Dev

SSRS-报表管理器自定义网址

来自分类Dev

AFNetworking 2自定义会话管理器

来自分类Dev

自定义对象下载管理器

来自分类Dev

使用 npm 作为自定义插件管理器?

来自分类Dev

自定义布局管理器滚动/动画

来自分类Dev

如何自定义 Nemo 文件管理器?

来自分类Dev

Phalcon \ MVC \ Models中的自定义事件管理器会引发错误

来自分类Dev

在Google跟踪代码管理器中设置自定义页面标题

来自分类Dev

自定义类和ContextErrorException中没有实体管理器

来自分类Dev

如何在自定义实现中访问配置了Spring Data的实体管理器(工厂)

来自分类Dev

通过Google跟踪代码管理器在Universal Analytics中实现多值自定义维度

来自分类Dev

在gnome中自定义文件管理器的顶部栏

Related 相关文章

热门标签

归档