Silverstripe 4 使用额外的自定义 HTMLEditorField

Silverstripe 4 use additional custom HTMLEditorField

在 Silverstripe 4 中,我们如何使用不同的 HTMLEditor 配置?

我想在相同的环境 中有两个不同的 HTMLEditorField。 一个具有所有功能和所有按钮。 另一个功能减少的 (MyCustomHTMLEditorField),例如只有 3 个按钮(下划线、斜体、粗体)。

你如何使用::set_active?

如何扩展 HTMLEditorConfig ?

是的,我已经阅读了文档,但是如何将其存档?

There can be multiple configs, which should always be created / accessed using HtmlEditorConfig::get(). You can then set the currently active config using set_active().

你能举个例子吗?

欢迎任何帮助。

https://docs.silverstripe.org/en/4/developer_guides/forms/field_types/htmleditorfield/ 上的文档详细介绍了如何定义和使用 HTMLEditorConfig 集合。

HTMLEditorConfig::set_active() 确实适用于如果您打算将编辑器设置为在给定表单或管理部分中的多个 HTMLEditorField 中使用,或者覆盖所有管理部分的配置。它 more-or-less 设置 'default' 配置。这对你的情况没有太大用处,因为听起来你想为给定的 HTMLEditorField.

设置配置

设置配置

这在 https://docs.silverstripe.org/en/4/developer_guides/forms/field_types/htmleditorfield/#adding-and-removing-capabilities

的文档中有详细说明

通常这是在您的 _config.php 中完成的(或在一些单独的 class 中完成,然后从 _config.php 中调用 - 除非您只在非常特定的部分中需要它,其中如果您可以设置它或从该管理员的 init() 方法中调用您的特殊 class。

此处文档中的示例修改了默认 ('cms') 配置。如果您想修改默认使用的配置,这将很有用。因此,对您称为具有“所有功能和所有按钮”的配置执行此操作。

设置新的 HTMLEditorConfig

调用 HTMLEditorConfig::get($configName) 将根据您传递给它的名称获取现有配置 - 但如果没有现有配置,它将创建一个新配置。因此,您可以调用 $customConfig = HTMLEditorConfig::get('some-custom-config') - 现在您的 $customConfig 变量包含一个 new 配置,您可以根据自己的选择进行配置(插入按钮、启用插件、定义白名单元素等)。

使用配置

这在此处的文档中进行了讨论:https://docs.silverstripe.org/en/4/developer_guides/forms/field_types/htmleditorfield/#specify-which-configuration-to-use

我已经提到了 set_active() - 例如,如果您要在一个表单中设置多个 HTMLEditorField,您可以在 getCMSFields() 方法中使用它:

public function getCMSFields()
{
    $fields = parent::getCMSFields();
    $fields->addFieldToTab('Root.Main', HMLEditorField::create('Content')); // This will use the default 'cms' config.
    HTMLEditorConfig::set_active('some-custom-config');
    $fields->addFieldToTab('Root.Main', HMLEditorField::create('OtherContent')); // This will use the 'some-custom-config' config that you defined.
    // Don't forget to reset to the default.
    HTMLEditorConfig::set_active('cms');
    return $fields;
}

您也可以,如文档中所述,通过名称为给定的 HTMLEditorField 设置您的配置,如果您对一个字段使用 non-default,这是首选。

public function getCMSFields()
{
    $fields = parent::getCMSFields();
    $fields->addFieldToTab('Root.Main', HMLEditorField::create('Content')); // This will use the default 'cms' config.
    $fields->addFieldToTab('Root.Main', HMLEditorField::create('OtherContent')->setEditorConfig('some-custom-config')); // This will use the 'some-custom-config' config that you defined.
    return $fields;
}

请注意,我在此处使用的语法与文档略有不同 - 这使您可以避免传递您未更改默认值的第二个和第三个构造函数参数。让事情变得更整洁。

免责声明:以上所有代码都是根据记忆编写的,因此可能需要进行一些调整才能正常工作。