Configuration Reference 

YAML Configuration Reference 

When configuring the CKEditor using YAML, these are the property names that are currently used:

processing 

Configuring transformations kicks in the RteHtmlParser API of TYPO3, to only allow certain HTML tags and attributes when saving the database or leaving the database to the RTE. However, defining transformations towards RTE is not really necessary anymore. Defining more strict processing options when storing content in the database also needs to be ensured that CKEditor allows this functionality too.

This configuration option was previously built within RTE.proc and can still be overridden via Page TSconfig. Everything defined via “processing” is available in RTE.proc and triggers RteHtmlParser options.

editor 

Editor contains all RTE-specific options. All CKEditor-specific options, which one could imagine are available under “config” property and handed over to CKEditor’s instance-specific config array.

All other sub-properties are usually handled via TYPO3 and then injected in the CKEditor instance at runtime. This is useful for registering extra plugins, like the TYPO3 core does with a custom typo3-link.js plugin, or adding third-party plugins like handling images.

editor.config 

editor.config

Configuration options For a list of all options see https://ckeditor.com/docs/ckeditor5/latest/api/module_core_editor_editorconfig-EditorConfig.html

editor.config.language

defines the editor’s UI language, and is dynamically calculated (if not set otherwise) by the backend users’ preference.

editor.config.contentsLanguage

defines the language of the data, which is fetched from the sys_language information, but can be overridden by this option as well. For referencing files, TYPO3's internal "EXT:" syntax can be used, for using language labels, TYPO3's "LLL:" language functionality can be used.

editor.config.contentsCss

defines the location of one or multiple CSS file(s) of the editor, containing the style definitions that will be applied to the backend editor RTE element.

Example with single file:

MyCKPreset.yaml
editor.config.contentsCss:
  - "EXT:rte_ckeditor/Resources/Public/Css/contents.css"
Copied!

This is the default, as defined in EXT:rte_ckeditor/Configuration/RTE/Editor/Base.yaml (GitHub).

Example with multiple files:

MyCKPreset.yaml
editor.config.contentsCss:
  - "EXT:rte_ckeditor/Resources/Public/Css/contents.css"
  - "EXT:my_sitepackage/Resources/Public/Css/contents.css?v=2"
Copied!

Since the CKEditor element is rendered within the page content of the TYPO3 backend (and not in an iframe or web-component), all CSS declarations in that file must refer to an actual element hierarchy ending like #data_tt_content__2687__bodytext_ckeditor5 .ck-content . To achieve this, TYPO3 automatically parses the contents of the CSS file with a process called "auto-prefixing" (via JavaScript, client-side) and converts all references to that "virtual" root hierarchy.

A CSS declaration like :root { background-color: green } gets turned into #data_tt_content__2687__bodytext_ckeditor5 .ck-content { background-color: green; } .

You can use a :root { ... } declaration, for example to reset relative/absolute sizes to ensure the CKEditor area being compatible to your usual frontend CSS. Also using body {...} is viable.

editor.config.heading

Defines headings available in the heading dropdown.

Example:

MyCKPreset.yaml
heading:
  options:
    - { model: 'heading2', view: 'h2', title: 'Heading 2' }
    - { model: 'heading3', view: 'h3', title: 'Heading 3' }
    - { model: 'heading4', view: 'h4', title: 'Heading 4' }
Copied!

It is also possible to set a class for a heading by default (for example, <h2 class="h2"> ):

MyCKPreset.yaml
heading:
  options:
     - { model: 'heading2', view: { name: 'h2', classes: 'h2' }, title: 'Heading 2' }
     - { model: 'heading3', view: { name: 'h3', classes: 'h3' }, title: 'Heading 3' }
     - { model: 'heading4', view: { name: 'h4', classes: 'h4' }, title: 'Heading 4' }
Copied!

To be able to reset a heading to a paragraph, add also the paragraph option:

MyCKPreset.yaml
heading:
  options:
     - { model: 'paragraph', title: 'Paragraph' }
     - { model: 'heading2', view 'h2', title: 'Heading 2' }
     # ...
Copied!

A title can also be localized with LLL:EXT:....

editor.config.style

Defines styles available in the style dropdown.

Example:

MyCKPreset.yaml
style:
  definitions:
    - { name: "Lead", element: "p", classes: ['lead'] }
    - { name: "Multiple", element: "p", classes: ['first', 'second'] }
Copied!
editor.config.importModules

Imports custom CKEditor plugins. See EXT:rte_ckeditor/Configuration/RTE/Editor/Plugins.yaml (GitHub) or How do I create a custom plugin? for examples.

The shipped whitespace plugin ( @typo3/rte-ckeditor/plugin/whitespace.js ) renders non-breaking spaces and soft hyphens visibly in the backend editor, as described in Non-breaking spaces and soft hyphens. It replaces the former SoftHyphen plugin ( @typo3/rte-ckeditor/plugin/soft-hyphen.js ), which has been removed. Presets that still import the old module, or reference SoftHyphen or softhyphen in the toolbar, are migrated automatically and log a console warning.

Link Browser specific options 

There are more configuration options that can be defined in the YAML file of an RTE preset related to the Link Browser, when managing hyperlinks inside the CKEditor.

Note that the Link Browser can also be displayed based on FormEngine TCA definitions. These use similar configuration, but from their TCA PHP configuration, and unrelated to the YAML definition.

The additional example file EXT:rte_ckeditor/Configuration/RTE/Editor/LinkBrowser.yaml (GitHub) lists all of the following options as an example.

These options are a bit fragmented, it is important to watch for the proper indentation as well the proper option relation.

A short overview:

  • allowedOptions - allowed list of additional attribute boxes
  • allowedTypes - list of allowed Link Types inside the RTE
  • classesAnchor - list of default CSS and link target values per Link Type
  • buttons - Additional sub-configuration array for specific dropdowns
  • buttons.link.options - Global options for the Link Browser
  • buttons.link.relAttribute - Configuration for the rel attribute block
  • buttons.link.queryParametersSelector - Configuration for the queryParameter (URI arguments) attribute block
  • buttons.link.targetSelector - Configuration for the target attribute block
  • buttons.link.properties.class.allowedClasses - Allowed additional CSS classes in the CSS attribute block
  • buttons.link.[LinkType].properties.class.default - Default CSS class per Link Type
  • classes - Label definitions for CSS class names

allowedOptions 

This string contains a comma separated list of additional attributes used in the Link Browser. Available field lists can be found in EXT:backend/Classes/Controller/AbstractLinkBrowserController.php (GitHub), method getLinkAttributeFieldDefinitions() .

Note that the attributes target, class and rel are displayed differently depending on whether the Link Browser was opened for a TCA element, or a RTE element. See EXT:rte_ckeditor/Classes/Controller/BrowseLinksController.php (GitHub) in method getLinkAttributeFieldDefinitions().

Valid attributes keys are:

target

If set, an input box for link target (for example "_blank") is available.

title

If set, entering the link title is available.

class

If set, allowing to enter a CSS class name for the link is available. This needs to match the CSS classes made available to the CKEDitor instance.

params

If set, additional parameters are allowed to be set for a link.

rel

If set, relations ( rel attribute) for links can be set.

To set all of them, you can use:

MyCKPreset.yaml
allowedOptions: 'target,title,class,params,rel'
Copied!

To remove all options you can use an empty string:

MyCKPreset.yaml
allowedOptions: ''
Copied!

allowedTypes 

This string contains a comma-separated list of all allowed Link Types for the Link Browser. These are currently:

  • page
  • url
  • file
  • folder
  • email
  • ... any custom Link Type
MyCKPreset.yaml
allowedTypes: 'page,url,file,folder,email,customType'
Copied!

To remove all types you can use an empty string:

MyCKPreset.yaml
allowedTypes: ''
Copied!

classesAnchor 

This is a sub-array of default CSS classes and target attributes, per Link Type:

MyCKPreset.yaml
classesAnchor:
  - { class: "customPageCssClass", type: "page", target: "" }
  - { class: "customUrlCssClass", type: "url", target: "_blank" }
  - { class: "customFileCssClass", type: "file", target: "_parent" }
  - { class: "customFolderCssClass", type: "folder" }
  - { class: "customTelephoneCssClass", type: "telephone" }
  - { class: "customEmailCssClass", type: "email" }
Copied!

Note that the available CSS class here must also be part of the buttons.link.properties.class.allowedClasses definition.

classes.[CssClassName] 

The list of CSS classes defined in buttons.link.properties.class.allowedClasses can set a custom label as well as a styling the select option. Note that styling select options does not work in every browser, and is not suggested to use.

The name of the structure key must match the CSS class name, with a sub-structure defining name (the actual label) and value (the possible CSS styling of the option inside the dropdown):

MyCKPreset.yaml
classes:
  globalCss1:
    name: "A Label for globalCss1"
    value: "color: red"
  customEmailCssClass:
    name: "An email-specific class for VIPs"
Copied!

Page TSconfig 

We recommend you to put all configurations for the preset in the YAML configuration. However, it is still possible to override these settings through the page TSconfig.

You can find a list of configuration properties in the Page TSconfig reference, chapter RTE.