Прикрутить RTE редактор НЕ к ресурсам в админке Решено


Всем привет, сталкивался ли кто-нибудь с такой задачей, когда надо прикрутить html редактор к полю которое не является полем ресурса, в админке?

Есть компонент, у которого 2 поля должны быть с редаткором. Поля редактируются на отдельной странице. Редактор — TinyMCE Rich Text Editor.

Прописал вручную в контроллере update.class.php компонента:

$this->addJavascript('/assets/components/tinymcerte/js/vendor/tinymce/tinymce.min.js');
$this->addJavascript('/assets/components/tinymcerte/js/vendor/autocomplete.js');
$this->addJavascript('/assets/components/tinymcerte/js/mgr/tinymcerte.js');


// Конфиги добавил

TinyMCERTE.editorConfig = {"plugins":"advlist autolink lists modximage charmap print preview anchor visualblocks searchreplace code fullscreen insertdatetime media table contextmenu paste modxlink","toolbar1":"undo redo | styleselect | bold italic | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | link image","toolbar2":"","toolbar3":"","modxlinkSearch":"\/assets\/components\/tinymcerte\/js\/vendor\/tinymce\/plugins\/modxlink\/search.php","language":"ru","directionality":"ltr","menubar":"file edit insert view format table tools","statusbar":true,"image_advtab":true,"paste_as_text":false,"style_formats_merge":false,"object_resizing":true,"link_class_list":"","browser_spellcheck":false,"content_css":[],"image_class_list":"","skin":"modx","style_formats":[{"title":"Headers","items":[{"title":"Header 1","format":"h1"},{"title":"Header 2","format":"h2"},{"title":"Header 3","format":"h3"},{"title":"Header 4","format":"h4"},{"title":"Header 5","format":"h5"},{"title":"Header 6","format":"h6"}]},{"title":"Inline","items":[{"title":"Bold","icon":"bold","format":"bold"},{"title":"Italic","icon":"italic","format":"italic"},{"title":"Underline","icon":"underline","format":"underline"},{"title":"Strikethrough","icon":"strikethrough","format":"strikethrough"},{"title":"Superscript","icon":"superscript","format":"superscript"},{"title":"Subscript","icon":"subscript","format":"subscript"},{"title":"Code","icon":"code","format":"code"}]},{"title":"Blocks","items":[{"title":"Paragraph","format":"p"},{"title":"Blockquote","format":"blockquote"},{"title":"Div","format":"div"},{"title":"Pre","format":"pre"}]},{"title":"Alignment","items":[{"title":"Left","icon":"alignleft","format":"alignleft"},{"title":"Center","icon":"aligncenter","format":"aligncenter"},{"title":"Right","icon":"alignright","format":"alignright"},{"title":"Justify","icon":"alignjustify","format":"alignjustify"}]}]};

Ext.onReady(function() {
      MODx.load({ xtype: "xtype-страницы компонента"});
      MODx.loadRTE("regulations"); // id поля 
      MODx.loadRTE("info"); // id поля 
});
Поля вызываются так
items: [{
    columnWidth: 1,
    border: false,
    defaults: {
        msgTarget: 'under'
    },
    items: [{
        xtype: 'textarea',
        fieldLabel: 'Общая информация',
        name: 'info',
        anchor: '100%',
        allowBlank: true,
        id: 'info'
    },{
        xtype: 'textarea',
        fieldLabel: 'Правила',
        name: 'regulations',
        anchor: '100%',
        allowBlank: true,
        id: 'regulations'
    }]
}]
29 сентября 2016, 17:04    Николай Загумённов   
0    516 0

Комментарии (9)

  1. Здоров Александр 30 сентября 2016, 07:24 # +1
    а tv с текстовым редактор ни как не подходят для решения задачи?
    1. Николай Загумённов 30 сентября 2016, 07:29 # 0
      tv относятся к ресурсу(modResource), а у меня свой объект, своя страница редактирования этого объекта
    2. Павел Гвоздь 30 сентября 2016, 08:34 # 0
      В консоли че?
      1. Николай Загумённов 30 сентября 2016, 08:49 # 0
        Пусто
        1. Павел Гвоздь 30 сентября 2016, 08:52 # 0
          Эти твои поля где располагаются? Неужто в модальном окне?..
          1. Николай Загумённов 30 сентября 2016, 09:23 # 0
            Поля редактируются на отдельной странице.
            Нет)
      2. Сергей Шлоков 30 сентября 2016, 09:01 # +1
        Я думаю, причина в том, что на момент подключения MODx.loadRTE() нет ещё этих полей. Подключать не к чему. Нужно повесить подключение на событие render твоего компонента.
        Для эксперимента попробуй подключить через setTimeout
        Ext.onReady(function() {
        	MODx.load({ xtype: "xtype-страницы компонента"});
        	setTimeout(function(){
        	      MODx.loadRTE("regulations"); // id поля 
        	      MODx.loadRTE("info"); // id поля 
        	},5000); // Сработает через 5 секунд
        });
        
        1. Сергей Шлоков 30 сентября 2016, 09:14 # +1
          Так и есть. MODx.load() просто создает JS компонент. Его нужно отрисовать — show() или render(). Поэтому и не подключается, указанных полей в разметке ещё нет.
          Добавь в свой компонент этот код (после items)
          listeners: {
          	render: function () {
          		MODx.loadRTE("regulations"); // id поля 
          		MODx.loadRTE("info"); // id поля 
          	}
          }
          
          Думаю, всё заведётся.
          1. Николай Загумённов 30 сентября 2016, 15:20 # 0
            Круто! Спасибо за помощь!
            У меня только что-то не получилось в одно место вставить код этот. Сработало вот так:
            items: [{
                xtype: 'textarea',
                fieldLabel: 'Общая информация',
                name: 'info',
                anchor: '100%',
                height: 400,
                allowBlank: true,
                id: 'info',
                listeners: {
                    render: function () {
                        MODx.loadRTE("info"); // id поля
                    }
                }
            },{
                xtype: 'textarea',
                fieldLabel: 'Правила',
                cls: 'modx-richtext',
                name: 'regulations',
                anchor: '100%',
                height: 400,
                allowBlank: true,
                id: 'regulations',
                listeners: {
                    render: function () {
                        MODx.loadRTE("regulations"); // id поля
                    }
                }
            }]
            
        Вы должны авторизоваться, чтобы оставлять комментарии.