【问题标题】:SilverStripe TInyMCE configuration requires a refresh to take effectSilverStripe TInyMCE 配置需要刷新才能生效
【发布时间】:2015-08-23 16:57:10
【问题描述】:

我们在 SilverStripe 中构建了自己的 tinyMCE 编辑器版本。唯一的问题是您需要点击刷新才能加载我们的自定义配置。刷新一次后,它会在会话的剩余时间内保持不变。

我们的设置如下:

BolierplateWYSIWYG.php

class BolierplateWYSIWYG extends Extension {

    protected function defaults() {
        $defaultEditorConfig = HtmlEditorConfig::get('cms');
        $defaultEditorConfig->setOptions(
            array(
                'theme'                        => 'advanced',
                'priority'                     => 1,
                // More config options
            )
        );

        return HtmlEditorConfig::get('cms');
    }

    public function getConfig() {
        return $this->defaults();
    }
}

然后,在 Page.php 内部我们有以下内容:

... page functions ...

public function getCMSFields() {

    $fields = parent::getCMSFields();

    // Update WYSIWYG
    $digital360Wysiwyg = new Digital360WYSIWYG;
    $digital360Wysiwyg->getConfig();

    ... Page CMS configuration ...

在我们的boilplate.yml里面我们有:

HtmlEditorField:
  extensions:
    - BolierplateWYSIWYG

如何在不刷新页面的情况下加载此新配置?

【问题讨论】:

  • > "唯一的问题是您需要点击刷新才能加载我们的自定义配置。"

标签: php tinymce silverstripe


【解决方案1】:

【讨论】:

  • 看起来很有希望,它会解决仅在页面刷新时应用的配置问题吗?我不希望页面上有多个配置,我只想让标准编辑器的配置选项无需刷新页面即可工作。
  • 在页面加载时将配置注入 JavaScript。您是在尝试动态更改配置,还是仅使用自定义配置?
  • 不是动态的,只是尝试自定义“开箱即用”的所见即所得。
【解决方案2】:

您可以通过在 _mysite/config.php 中调用 setOptions 来自定义您的 HtmlEditorField

HtmlEditorConfig::get('cms')->setOptions(
    array(
        'theme'                        => 'advanced',
        'priority'                     => 1,
        // More config options
    )
);

无需刷新 CMS 页面即可使用。

【讨论】:

  • 虽然这不是您在问题中提出的扩展,但我希望这仍能满足您的需求。
  • 感谢您的帖子。我过去使用过这种方法,我的问题是我们创建了一个样板模块,我们在所有构建中都使用它。因此,我需要它作为模块/扩展的一部分。
  • 您应该可以将其放在样板模块文件夹中的_config.php 中。这样就够了吗?
【解决方案3】:

就像@assertchris 提到的那样,我的 PR https://github.com/silverstripe/silverstripe-framework/pull/4259/files 现在已被合并,因此您可以轻松拥有多个 TinyMCE 配置,这应该可以帮助您进行扩展。

_config.php 中设置您的HTMLEditorConfig 喜欢

HtmlEditorConfig::get('default')->setOptions....
HtmlEditorConfig::get('fancy')->setOptions....

既然你必须有一个扩展,你可以有这样的:

class BolierplateWYSIWYG extends Extension {
  public function setEditorConfig($name = 'default')
  {
    HtmlEditorConfig::set_active($name);
  }
}

您可以在设置 CMS 字段时像这样​​使用它

$digital360Wysiwyg = new Digital360WYSIWYG;
$digital360Wysiwyg->setEditorConfig();

$digital360Wysiwyg = new Digital360WYSIWYG;
$digital360Wysiwyg->setEditorConfig('fancy');

这应该可以正常工作。尽管在更改某些编辑器选项(如 mode)时要小心,因为这可能会导致刷新问题。你不应该改变themepriority吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-06
    • 2011-09-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多