Я пытаюсь реализовать фиксированные заполнители для ckeditor, используя плагины placeholder и strinsert, как описано здесь.

К сожалению, я не могу динамически изменять массив strings плагина strinsert.

Эти строки в config.js должны работать, но это не так:

CKEDITOR.editorConfig = function( config ) {
    config.strinsert_strings = [
        ['[[foo]]']
    ];
};

Может быть, этот плагин не поддерживает изменение массива строк после инициализации?

Как я могу представить пользователям разные заполнители в разных экземплярах ckeditor без клонирования плагина strinsert x раз?

NB: Я использую их все новейшие версии.

1
toshniba 11 Фев 2015 в 19:50

3 ответа

Лучший ответ

Вы можете установить настраиваемые заполнители динамически, используя событие dialogDefinition. Я сделал это так (атрибут html data-placeholders указывает допустимые заполнители в виде "placeholder1,different text to show=placeholder2,another text=placeholder3"

  CKEDITOR.on ('dialogDefinition', function (e) {

    // Check if the definition is from the dialog window you are interested in (the "Link" dialog window).
    if (e.data.name == 'placeholder') {
      var $textarea = $(e.editor.element.$),
        placeholders = $textarea.attr("data-placeholders"),
        tab, ff, i, a;

      //placeholders = [['placeholder1'],['Text to show', 'placholdervalue']];
      if (placeholders && placeholders.length) {
        // convert placeholders from desc1=val1,desc2=val2,val3,... format to array(array(desc,val))
        placeholders = placeholders.split(",");
        // ensure placeholders is array of arrays with exact 2 members
        for (i = 0; i < placeholders.length; i++) {
          a = placeholders[i].split("=");
          if (a.length < 1) a[1] = a[0];
          placeholders[i] = a;
        }
        tab = e.data.definition.getContents ('info');

        // Set the default value for the URL field.
        ff = tab.get ('name');
        ff['type'] = 'select';
        ff['items'] = placeholders;
      }
    }
  });
0
toshniba 17 Мар 2015 в 12:40

Для strinsert я заставил его работать, отредактировав его plugin.js, избавившись от объявления строк и заменив его на:

var strings = editor.config.strinsert_strings;

Затем в вашем html перед созданием CKEDITOR:

CKEDITOR.config.strinsert_strings =  [];
CKEDITOR.config.strinsert_strings.push(['myvalue1', 'myname1', 'mylabel1']);
CKEDITOR.config.strinsert_strings.push(['myvalue2', 'myname2', 'mylabel2']);
CKEDITOR.replace('mytextarea');
0
Tony Truong 9 Дек 2015 в 00:20

Как и предполагалось, вместо этого используйте rplugin. Просто отредактируйте файл ckedit/plugins/placeholder/dialogs/placeholder.js. Измените тип элемента на select и добавьте необходимое значение в items, как в следующем примере:

contents: [
            {
                id: 'info',
                label: generalLabel,
                title: generalLabel,
                elements: [
                    // Dialog window UI elements.
                    {
                        id: 'name',
                        type: 'select',
                        style: 'width: 100%;',
                        label: lang.name,
                        items:[
                            ['ONE'],
                            ['TWO'],
                            ['THREE']
                        ],
                        // SNIP...
1
aggsol 16 Мар 2015 в 09:32