Joomla 3.7.x - если не работает плагин TinyMCE
Если не работает TinyMCE плагин и в консоле разработчика выдает вот такие ошибки:
TypeError: Joomla.optionsStorage is undefined - tinymce-builder.js:278:1
TypeError: Joomla.optionsStorage is undefined - tinymce.min.js:1:361
, это значит что плагин не может вытащить параметры передаваемые Joomla в json формате
Не стал долго и упорно выяснять причину и ковыряться во всей джумловской каше, а попросту написал свой парсер в обход core.js. Не стоит забывать, что это временное решение и с обновлением скорей всего слетит, а может это мой косяк в движке. В общем не удивлюсь, что вскоре косяк исправят.
И так приступим:
находим кусок кода в файле /media/editors/tinymce/js/tinymce-builder.js (стр. 277-278):
var options = Joomla.getOptions ? Joomla.getOptions('plg_editors_tinymce_builder', {}) : (Joomla.optionsStorage.plg_editors_tinymce_builder || {});
заменяем на:
if (!Joomla.optionsStorage && !Joomla.getOptions) { var elements = document.querySelectorAll(".joomla-script-options.new"),options,option=0; for (var i=0,l=elements.length;i<l;i++) { option = JSON.parse(elements[i].text || elements[i].textContent); if(option) { options = option; } } options = options['plg_editors_tinymce_builder']; } else { var options = Joomla.getOptions ? Joomla.getOptions('plg_editors_tinymce_builder', {}) : (Joomla.optionsStorage.plg_editors_tinymce_builder || {}); }
Чтобы лишний раз не искать и править подгрузку min версии, скопируем содржимое /media/editors/tinymce/js/tinymce.js в /media/editors/tinymce/js/tinymce.min.js и правим его (стр. 28-30):
var pluginOptions = Joomla.getOptions ? Joomla.getOptions('plg_editor_tinymce', {}) : (Joomla.optionsStorage.plg_editor_tinymce || {}), editors = target.querySelectorAll('.js-editor-tinymce');
заменяем на:
if (!Joomla.optionsStorage && !Joomla.getOptions) { var elements = document.querySelectorAll(".joomla-script-options.new"),options,option=0; for (var i=0,l=elements.length;i<l;i++) { option = JSON.parse(elements[i].text || elements[i].textContent); if(option) { options = option; } } pluginOptions = options['plg_editor_tinymce']; } else { var pluginOptions = Joomla.getOptions ? Joomla.getOptions('plg_editor_tinymce', {}) : (Joomla.optionsStorage.plg_editor_tinymce || {}); } var editors = target.querySelectorAll('.js-editor-tinymce');
Собственно вот и все.
более предпочтительный вариант - TypeError: Joomla.optionsStorage is undefined - быстрый fix