.. include:: /Includes.rst.txt .. _config-ref: ======================= Configuration Reference ======================= .. _config-ref-yaml: YAML Configuration Reference ============================ When configuring the CKEditor using YAML, these are the property names that are currently used: .. contents:: :local: :depth: 1 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 :file:`typo3-link.js` plugin, or adding third-party plugins like handling images. editor.config ~~~~~~~~~~~~~ .. option:: editor.config Configuration options For a list of all options see http://ckeditor.com/docs/ckeditor5/latest/api/module_core_editor_editorconfig-EditorConfig.html .. note:: Some configuration options from the official CKEditor 5 documentation do not apply to TYPO3, since they are related to specific plugins (for example: CKBox, CloudServices) which are not bundled in TYPO3's CKEditor build. .. option:: editor.config.language defines the editor’s UI language, and is dynamically calculated (if not set otherwise) by the backend users’ preference. .. option:: 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. .. option:: 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: .. code-block:: yaml :caption: MyCKPreset.yaml editor.config.contentsCss: - "EXT:rte_ckeditor/Resources/Public/Css/contents.css" This is the default, as defined in :t3src:`rte_ckeditor/Configuration/RTE/Editor/Base.yaml`. Example with multiple files: .. code-block:: yaml :caption: MyCKPreset.yaml editor.config.contentsCss: - "EXT:rte_ckeditor/Resources/Public/Css/contents.css" - "EXT:my_sitepackage/Resources/Public/Css/contents.css?v=2" 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 :css:`#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 :css:`:root { background-color: green }` gets turned into :css:`#data_tt_content__2687__bodytext_ckeditor5 .ck-content { background-color: green; }`. You can use a :css:`: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. .. note:: Referenced CSS stylesheets need to be downloadable via :js:`fetch()` in order for the JavaScript-based prefixing to work. .. note:: Also note that the generated CSS file is cached by your browser. If you change the contents of your CSS file, be sure to either reload the browser cache, or use a directive like :yaml:`editor.config.contentsCss: "EXT:my_sitepackage/Resources/Public/Css/contents.css?v=2"` where you change the `?v=` URI string after any file modification to enforce requesting an updated version of the file. .. option:: editor.config.heading Defines headings available in the heading dropdown. Example: .. code-block:: yaml :caption: 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' } It is also possible to set a class for a heading by default (for example, :html:`

`): .. code-block:: yaml :caption: 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' } To be able to reset a heading to a paragraph, add also the :yaml:`paragraph` option: .. code-block:: yaml :caption: MyCKPreset.yaml :emphasize-lines: 3 heading: options: - { model: 'paragraph', title: 'Paragraph' } - { model: 'heading2', view 'h2', title: 'Heading 2' } # ... A title can also be localized with `LLL:EXT:...`. .. option:: editor.config.style Defines styles available in the style dropdown. Example: .. code-block:: yaml :caption: MyCKPreset.yaml style: definitions: - { name: "Lead", element: "p", classes: ['lead'] } - { name: "Multiple", element: "p", classes: ['first', 'second'] } .. option:: editor.config.importModules Imports custom CKEditor plugins. See :t3src:`rte_ckeditor/Configuration/RTE/Editor/Plugins.yaml` or :ref:`How do I create a custom plugin? ` for examples. .. _config-linkbrowser: 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 :t3src:`rte_ckeditor/Configuration/RTE/Editor/LinkBrowser.yaml` 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. .. important:: Please note that these options are set at the topmost level, and **not** nested inside the `editor` YAML structure. 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 :t3src:`backend/Classes/Controller/AbstractLinkBrowserController.php`, method :php:`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 :t3src:`rte_ckeditor/Classes/Controller/BrowseLinksController.php` in method `getLinkAttributeFieldDefinitions()`. Valid attributes keys are: .. option:: target If set, an input box for link target (for example "_blank") is available. .. option:: title If set, entering the link title is available. .. option:: 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. .. option:: params If set, additional parameters are allowed to be set for a link. .. option:: rel If set, relations (:html:`rel` attribute) for links can be set. To set all of them, you can use: .. code-block:: yaml :caption: MyCKPreset.yaml allowedOptions: 'target,title,class,params,rel' To remove all options you can use an empty string: .. code-block:: yaml :caption: MyCKPreset.yaml allowedOptions: '' 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 .. code-block:: yaml :caption: MyCKPreset.yaml allowedTypes: 'page,url,file,folder,email,customType' To remove all types you can use an empty string: .. code-block:: yaml :caption: MyCKPreset.yaml allowedTypes: '' classesAnchor ~~~~~~~~~~~~~ This is a sub-array of default CSS classes and target attributes, per Link Type: .. code-block:: yaml :caption: 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" } Note that the available CSS class here must also be part of the `buttons.link.properties.class.allowedClasses` definition. buttons.link ~~~~~~~~~~~~ This structure defines both global options as well as Link Type-specific options: buttons.link.options.removeItems ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Can be set to exclude certain Link Types: .. code-block:: yaml :caption: MyCKPreset.yaml buttons: link: options: removeItems: 'telephone' buttons.link.relAttribute.enabled ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ If the `allowedOptions` string list contains `rel` for setting relation attributes, this option must also be enabled: .. code-block:: yaml :caption: MyCKPreset.yaml buttons: link: relAttribute: enabled: true buttons.link.queryParametersSelector.enabled ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ If the `allowedOptions` string list contains `params` for setting URI argument attributes, this option must also be enabled: .. code-block:: yaml :caption: MyCKPreset.yaml buttons: link: queryParametersSelector: enabled: true buttons.link.targetSelector.disabled ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ If the `allowedOptions` string list contains `target`, a dropdown is displayed by default. If you want to hide it, you must set this option to `true`: .. code-block:: yaml :caption: MyCKPreset.yaml buttons: link: targetSelector: disabled: true buttons.link.properties.class.required ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ A CSS class selection can be forced, so that it may not be empty: .. code-block:: yaml :caption: MyCKPreset.yaml buttons: link: properties: class: required: true buttons.link.properties.class.allowedClasses ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ This is the most vital CSS class selection list, based on a comma-separated string naming all CSS classes that are allowed. Default CSS classes per Link Type can only be selected, if they are part of this list. The names of the CSS classes can be adjusted via the `classes` top-level configuration hierarchy (see below) .. code-block:: yaml :caption: MyCKPreset.yaml buttons: link: properties: class: allowedClasses: 'globalCss1,globalCss1,CustomPageCssClass' buttons.link.[linkType].properties.class.default ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ For each Link Type, a default CSS class can be defined, using the name of the Link Type as a key: .. code-block:: yaml :caption: MyCKPreset.yaml buttons: link: telephone: class: default: "customTelephoneCssClass" email: class: default: "customEmailCssClass" Note that the CSS class listed here must also be contained in `buttons.link.properties.class.allowedClasses`. 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): .. code-block:: yaml :caption: MyCKPreset.yaml classes: globalCss1: name: "A Label for globalCss1" value: "color: red" customEmailCssClass: name: "An email-specific class for VIPs" .. _config-ref-tsconfig: Page TSconfig ============= We recommend you to put all configurations for the preset in the :ref:`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 :ref:`Page TSconfig reference, chapter RTE `.