djangocms-text-ckeditor, 使用CKEditor的Django CMS文本插件

分享于 

15分钟阅读

GitHub

  繁體 雙語
Text Plugin for django-cms with TinyMCE
  • 源代码名称:djangocms-text-ckeditor
  • 源代码网址:http://www.github.com/divio/djangocms-text-ckeditor
  • djangocms-text-ckeditor源代码文档
  • djangocms-text-ckeditor源代码下载
  • Git URL:
    git://www.github.com/divio/djangocms-text-ckeditor.git
    Git Clone代码到本地:
    git clone http://www.github.com/divio/djangocms-text-ckeditor
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/divio/djangocms-text-ckeditor
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    djangocms-text-ckeditor

    带有ck编辑器的django cms文本插件。

    这里软件包的最新版本支持:

    • Django> = 1.8
    • Django CMS> = 3.3

    警告

    • 对于 Django CMS 3.4. x 使用 djangocms-text-ckeditor> = 3.2. x ( 比如 ): 版本 3.2.1 )。
    • 对于 Django CMS 3.3. x 使用 djangocms-text-ckeditor> = 3.1. x ( 比如 ): 版本 3.1.0 )。
    • 对于 Django CMS 3.2. x 使用 djangocms-text-ckeditor <= 2.9. x ( 比如 ): 版本 2.9.3 )。
    • 对于 Django CMS 3.0和 3.1,使用 djangocms-text-ckeditor <= 2.7 ( 比如 ): 版本 2.7.0 )。
    • 对于 Django CMS 2.3和 2.4,请使用 djangocms-text-ckeditor 1.x 发行版( 比如: 版本 1.0.10 )。
    • 对于 Django 1.4和 1.5使用 djangocms-text-ckeditor <2.7.
    • cms.plugins.textdjangocms-text-ckeditor 不能同时使用。

    安装

    这里插件需要 Django CMS 3.3或者更高版本才能正确安装。

    • 在你的项目 virtualenv 中,运行 pip install djangocms-text-ckeditor
    • djangocms_text_ckeditor 添加到 INSTALLED_APPS ( 顺序不重要)。
    • 运行 manage.py migrate djangocms_text_ckeditor

    cms.plugins.text 升级

    • INSTALLED_APPS 中删除 cms.plugins.text
    • djangocms_text_ckeditor 添加到 INSTALLED_APPS
    • 运行 python manage.py migrate djangocms_text_ckeditor 0001 --fake

    用法

    占位符的默认内容

    如果使用 django,可以在"default_plugins"中使用 TextPlugin ( 有关中的CMS_PLACEHOLDER_CONF 设置,请参阅文档)。 TextPlugin 只需要一个值: body,你可以在其中编写默认的HTML内容。 如果你想添加一些"默认子级"到你的自动添加插件( 例如。 一个 LinkPlugin ),你必须在 body 中放置子引用。 引用是 "%(_tag_child_<order>)s",它的插入顺序为 chidren。 例如:

    CMS_PLACEHOLDER_CONF = {
     'content': {
     'name' : _('Content'),
     'plugins': ['TextPlugin', 'LinkPlugin'],
     'default_plugins':[
     {
     'plugin_type':'TextPlugin',
     'values':{
     'body':'<p>Great websites : %(_tag_child_1)s and %(_tag_child_2)s</p>'
     },
     'children':[
     {
     'plugin_type':'LinkPlugin',
     'values':{
     'name':'django',
     'url':'https://www.djangoproject.com/'
     },
     },
     {
     'plugin_type':'LinkPlugin',
     'values':{
     'name':'django-cms',
     'url':'https://www.django-cms.org'
     },
     },
     ]
     },
     ]
     }
    }

    CKEDITOR_SETTINGS

    你可以重写 settings.py 中的设置 CKEDITOR_SETTINGS:

    CKEDITOR_SETTINGS = {
     'language': '{{ language }}',
     'toolbar': 'CMS',
     'skin': 'moono-lisa',
    }

    这是默认的,它保存所有的设置。

    自定义插件编辑器

    要自定义插件编辑器,请使用toolbar_CMS属性,如下所示:

    CKEDITOR_SETTINGS = {
     'language': '{{ language }}',
     'toolbar_CMS': [
     ['Undo', 'Redo'],
     ['cmsplugins', '-', 'ShowBlocks'],
     ['Format', 'Styles'],
     ],
     'skin': 'moono-lisa',
    }
    定制编辑器

    如果你在自己的模型中使用 djangocms_text_ckeditor.fields 中的HTMLField,请使用toolbar_HTMLField属性:

    CKEDITOR_SETTINGS = {
     'language': '{{ language }}',
     'toolbar_HTMLField': [
     ['Undo', 'Redo'],
     ['ShowBlocks'],
     ['Format', 'Styles'],
     ],
     'skin': 'moono-lisa',
    }

    你可以在设置中使用不同的配置参数进一步自定义每个HTMLField字段:

    models.py
    class Model1(models.Model):
     text = HTMLField(configuration='CKEDITOR_SETTINGS_MODEL1')
    class Model2(models.Model):
     text = HTMLField(configuration='CKEDITOR_SETTINGS_MODEL2')
    settings.py
    CKEDITOR_SETTINGS_MODEL1 = {
     'toolbar_HTMLField': [
     ['Undo', 'Redo'],
     ['ShowBlocks'],
     ['Format', 'Styles'],
     ['Bold', 'Italic', 'Underline', '-', 'Subscript', 'Superscript', '-', 'RemoveFormat'],
     ]
    }
    CKEDITOR_SETTINGS_MODEL2 = {
     'toolbar_HTMLField': [
     ['Undo', 'Redo'],
     ['Bold', 'Italic', 'Underline', '-', 'Subscript', 'Superscript', '-', 'RemoveFormat'],
     ]
    }
    • 向要自定义的HTMLField使用添加 configuration='mysetting';
    • 定义一个设置参数,该参数名为HTMLField实例配置参数中使用desidered配置的字符串;

    不能在自定义配置中指定的值将从全局 CKEDITOR_SETTINGS 中获取。

    有关所有可用设置的概述,请参见这里:

    http://docs.ckeditor.com/#!/api/CKEDITOR.config

    inline-预览

    如果 text_editor_preview 不是 False,TextPlugin的子插件可以直接呈现在 inside CKEditor中。 但是,有几个要点需要注意:

    • 默认情况下,CKEditor不加载项目 inside的CSS,并且在空标记中具有特定设置,这可能意味着在CKEditor配置正确之前,事情不会看起来像。

      请参阅示例:

    • 如果你覆盖widget默认行为- 请注意,它要求属性" allowedContent"包含cms-plugin[*],因为这个定制标记是允许渲染 inline

    • 重要提示:请避免在 __str__ 表示文本的文本中使用html标记- 这会使 inline 预览混乱。

    拖放&拖放图像

    在基于 IE 和 Firefox的浏览器中,可以将图片拖放到文本编辑器中。 这里图像是base64编码的,并作为'数据'标记存在于'src'属性中。

    我们检测这些图像,编码它们并将它们转换为图片插件。 如果你想要为自己的图片插件设置这里行为,请执行以下操作:

    有一个设置被调用:

    TEXT_SAVE_IMAGE_FUNCTION = 'djangocms_text_ckeditor.picture_save.create_picture_plugin'

    你可以在 settings.py 中覆盖这里设置,并将它的指向处理图像保存的函数。 查看函数 create_picture_plugin的详细信息。

    要完全禁用该功能,请设置 TEXT_SAVE_IMAGE_FUNCTION = None

    翻译

    如果你想帮助翻译插件,请在transifex上执行这里操作:

    https://www.transifex.com/projects/p/django-cms/resource/djangocms-text-ckeditor/

    作为模型字段的用法

    如果你想在自己的模型字段中使用小部件,你可以 ! 只需导入所提供的HTMLField,如下所示:

    from djangocms_text_ckeditor.fields import HTMLField

    在模型中使用它,就像 TextField 一样:

    class MyModel(models.Model):
     myfield = HTMLField(blank=True)

    这里字段不允许你在文本编辑器中嵌入任何其他CMS插件。 插件只能嵌入在 Placeholder 字段内。

    如果需要在HTML字段中嵌入附加插件,请将 HTMLField 转换为 Placeholderfield 并配置占位符,只接受 TextPlugin。 有关在CMS之外使用占位符的详细信息,请参阅:

    http://docs.django-cms.org/en/latest/how_to/placeholders.html

    自动断字

    可以将输入到编辑器中的文本断开,以便在单词之间的正确音节边界中自动添加HTML实体 &shy; ( 软连字符)。

    要激活这里功能,pip install django-softhyphen。 在 settings.py 中将 'softhyphen' 添加到 INSTALLED_APPS 列表中。 还安装了 25种自然语言的hyphening字典。

    如果你已经安装了 django-softhyphen 但不希望使用软连字符,请将 TEXT_AUTO_HYPHENATE 设置为 False

    扩展插件

    便笺

    在版本 2.0.1中添加

    你可以使用这个插件来创建你自己的基于ckeditor的插件。

    你需要创建自己的插件模型扩展 AbstractText:

    from djangocms_text_ckeditor.models import AbstractText
    class MyTextModel(AbstractText):
     title = models.CharField(max_length=100)

    扩展 TextPlugin 类的插件类:

    from djangocms_text_ckeditor.cms_plugins import TextPlugin
    from. models import MyTextModel
    class MyTextPlugin(TextPlugin):
     name = _(u"My text plugin")
     model = MyTextModel
    plugin_pool.register_plugin(MyTextPlugin)

    注意,如果重写从基 TextPlugin 类继承的渲染方法,则任何子文本插件都不会正确呈现。 为了使 plugin_tags_to_user_html() 能够输出 body 字段中的所有子插件,你必须调用超级 render 方法。 例如:

    from djangocms_text_ckeditor.cms_plugins import TextPlugin
    from. models import MyTextModel
    class MyTextPlugin(TextPlugin):
     name = _(u"My text plugin")
     model = MyTextModel
     def render(self, context, instance, placeholder):
     context.update({
     'name': instance.name,
     })
     # Other custom render code you may have
     return super(MyTextPlugin, self).render(context, instance, placeholder)
    plugin_pool.register_plugin(MyTextPlugin)

    你可以进一步定制你的插件插件,像其他插件一样。

    向"cms插件"下拉列表添加插件

    如果你有另一个插件,你想使用 inside 文本,你可以让它们出现在下拉列表中,使它们成为 text_enabled。 查看 django cms文档如何执行这里操作。

    可以配置的消毒剂

    djangocms-text-ckeditor 使用 html5lib 过滤HTML以避免安全问题,并检查正确的HTML代码。 Sanitisation可以为某些用例( 如 iframe ) 提供标签 usesful ;你可以通过重写 TEXT_ADDITIONAL_TAGSTEXT_ADDITIONAL_ATTRIBUTES 设置来自定义标记和属性:

    TEXT_ADDITIONAL_TAGS = ('iframe',)
    TEXT_ADDITIONAL_ATTRIBUTES = ('scrolling', 'allowfullscreen', 'frameborder')

    在sanitisation上需要更多的控制时,可以扩展AllowTokenParser类并将逻辑定义为 parse() 方法。 例如如果你想在sanitisation期间跳过donut属性,可以创建这样的类:

    from djangocms_text_ckeditor.sanitizer import AllowTokenParser
    class DonutAttributeParser(AllowTokenParser):
     def parse(self, attribute, val):
     return attribute.startswith('donut-')

    并将你的类添加到 ALLOW_TOKEN_PARSERS 设置中:

    ALLOW_TOKEN_PARSERS = (
     'mymodule.DonutAttributeParser',
    )

    注释:一些版本的CKEditor在将文本传递给web服务器之前会预先清除文本,从而使 上面 设置变得无用。 为了确保不会发生这种情况,你可能需要将以下参数添加到 CKEDITOR_SETTINGS:

    ...
    'basicEntities': False,
    'entities': False,
    ...

    要完全禁用该功能,请设置 TEXT_HTML_SANITIZE = False

    有关更多信息,请参阅 html5lib文档

    全文搜索

    djangocms-text-ckeditor与 aldryn搜索插件配合使用,使文本内容使用 Haystack。

    关于 CKEditor

    当前集成版本的CKeditor为 4.7.3。 要获得完整的文档访问,请访问: http://ckeditor.com/

    构建 JavaScript

    djangocms-text-ckeditor 将插件需要的一个javascript包分发给工作,它包含CKEditor本身以及在CMS中运行的所有必要。 要构建包,你需要安装与 npm install的依赖项,然后运行 gulp bundle

    这里命令还更新基于文件内容加载的文件 NAME。

    更新 CKEditor

    确保在生成配置 <https://github.com/divio/djangocms-text-ckeditor/blob/master/djangocms_text_ckeditor/static/djangocms_text_ckeditor/ckeditor/build-config.js#L16> _ 中使用 url。


    plugin  文本  TEX  cms  Ckeditor  Django Cms  
    相关文章