logo

额外区块类型 (EBT) - 全新的布局构建器体验❗

额外区块类型 (EBT) - 样式化、可定制的区块类型:幻灯片、标签页、卡片、手风琴等更多类型。内置背景、DOM Box、JavaScript 插件的设置。立即体验布局构建的未来。

演示 EBT 模块 下载 EBT 模块

❗额外段落类型 (EPT) - 全新的 Paragraphs 体验

额外段落类型 (EPT) - 类似的基于 Paragraph 的模块集合。

演示 EPT 模块 滚动

滚动
03/10/2025, by Ivan

CKEditor API 是 Drupal 8 中的新功能。

请注意,这里仅适用于 Drupal 8 的 CKEditor 模块 API,而不是 CKEditor JavaScript 库的 API —— 相关内容请参见 http://docs.ckeditor.com/

有关该模块功能的更多信息,请参见 文本编辑器模块文档

API 特性

按使用频率从低到高排列:

CKEditor 皮肤

Drupal 8 的 CKEditor 默认使用 Moono 皮肤。这对大多数站点来说已经足够,因为它是相对中性的皮肤。但某些站点希望获得更好的集成效果,这时您可以安装 其他皮肤 —— 甚至可以是您自己创建的皮肤。
为此,可以实现 hook_editor_js_settings_alter():

function hook_editor_js_settings_alter(array &$settings) {
  foreach (array_keys($settings['editor']['formats']) as $text_format_id) {
    if ($settings['editor']['formats'][$text_format_id]['editor'] === 'ckeditor') {
      $settings['editor']['formats'][$text_format_id]['editorSettings']['skin'] = 'SKIN_NAME,ABSOLUTE_URL_TO_SKIN';
    }
  }
}

CKEditor iframe CSS

加载到 CKEditor iframe 实例中的 CSS,例如 /node/add/article 页面中的编辑器(即非内联编辑),可能需要调整,使 CKEditor iframe 的样式符合前端样式(适合喜欢所见即所得的用户),或者能展示结构(适合喜欢简洁编辑器的用户)。
    - 前端主题 CSS
几乎所有前端主题都有针对段落、引用、图片标题等的 CSS 样式。因此,所有前端主题都必须告知 CKEditor iframe 实例加载这些 CSS 文件,以确保内容创建者所编辑的内容(文本/标记)样式一致。 他们可以在 *.info.yml 文件中指定 ckeditor_stylesheets 键。这里列出的 CSS 资源也会加载到 CKEditor iframe 中。请参见 Bartik 的示例。同时参考指南 如何让 CKEditor 与前端主题一致(“WYSIWYG 是谎言”)
    - 模块 CSS
在前端加载 CSS 的模块可以使用 hook_ckeditor_css_alter(),从而将该 CSS 加载到 CKEditor iframe 实例中

CKEditor 插件

为 CKEditor 添加更多功能!

\Drupal\ckeditor\CKEditorPluginInterfaceDrupal 插件,与 CKEditor 插件 一一对应,使 Drupal 能够识别可用的 CKEditor 插件。这就是所谓的“CKEditor 插件插件”的原因。

  • 您还可以实现四个额外的接口:

1. \Drupal\ckeditor\CKEditorPluginButtonsInterface:允许定义插件提供的按钮,以便用户可以通过拖拽界面配置 CKEditor 工具栏。
示例:\Drupal\ckeditor\Plugin\CKEditorPlugin\StylesCombo 提供了工具栏按钮(下拉列表)。
2. \Drupal\ckeditor\CKEditorPluginContextualInterface:允许插件根据上下文自动启用,例如:其他插件按钮启用时、某个过滤器启用时、某个插件设置为特定值时,或多种情况组合。
示例:\Drupal\ckeditor\Plugin\CKEditorPlugin\DrupalImageCaption 在图像按钮启用且启用对齐或标题过滤器时会自动启用。
3. \Drupal\ckeditor\CKEditorPluginConfigurableInterface:允许插件定义参数表单,用于配置该插件的任何设置。
示例:\Drupal\ckeditor\Plugin\CKEditorPlugin\StylesCombo 插件允许配置可应用的样式。
4. \Drupal\ckeditor\CKEditorPluginCssInterface(自 8.1.0 起):允许插件定义额外的 CSS,以加载到 CKEditor iframe 实例中。
示例:\Drupal\ckeditor\Plugin\CKEditorPlugin\DrupalImageCaption 插件会加载额外的 CSS。

注解中定义的插件 ID 必须与插件的 JavaScript 中定义的插件名一致:

// PHP 注解中的 pluginId 必须与这里定义的一致。
CKEDITOR.plugins.add('pluginId', { ... });
  • 可以通过 hook_ckeditor_plugin_info_alter() 修改已发现插件的注解元数据。
  • \Drupal\ckeditor\CKEditorPluginBase 提供了默认实现,因此插件无需实现每个方法。这意味着它针对最常见情况进行了优化:它仅对提供按钮的插件有用。

最后但同样重要的是,在实现新的文本编辑器插件时,您可能还需要确保其配置的用户体验良好。参见 ckeditor.drupalimage.admin.js 和 ckeditor.stylescombo.admin.js 示例。注意,这个方面(仅此方面!)可能会在 https://www.drupal.org/node/2567801 中更改。

调试

Drupal 8 包含一个自定义优化版的 CKEditor。请参见 core/assets/vendor/ckeditor/build-config.js。该文件的文档也解释了如何将 Drupal 8 中内置的 CKEditor 构建(优化为生产环境)替换为开发构建(未压缩)。

另见