07
Создавая модуль для cms движка интернет магазина под названием Magento, с первого раза не получилось подключить wysiwyg tinyMCE к контентному полю формы в админке. Пробовал многие рекомендации в интернете на форумах и блогах. Но все оно было либо не рабочим совсем, либо какой-то маленькой детали всегда не хватало. Поэтому совместив все рекомендации по данному вопросу, вывел окончательную рабочую формулу для себя. Может и вам она будет полезна. И так начнем.
Первым делом договоримся, что namespace для модуля к примеру будет MyCompany, название самого модуля будет MyModule.
Если вы создавали скелет модуля через утилиту module creator, то у вас должен быть такой файл app/code/local/MyCompany/MyModule/Block/Adminhtml/MyModule/Edit.php
если вы вручную все делали, то у вас должен быть такой класс возможно не по такому пути, но его название такое примерно
class MyCompany_MyModule_Block_Adminhtml_MyModule_Edit extends Mage_Adminhtml_Block_Widget_Form_Container
В в этом классе нужно добавить такой метод
protected function _prepareLayout() { parent::_prepareLayout(); if (Mage::getSingleton('cms/wysiwyg_config')->isEnabled()) { $this->getLayout()->getBlock('head')->setCanLoadTinyMce(true); } } |
А если у вас есть такой или подобный код в конструкторе __construct
$this->_formScripts[] = " function toggleEditor() { if (tinyMCE.getInstanceById('myModule_description') == null) { tinyMCE.execCommand('mceAddControl', false, 'myModule_description'); } else { tinyMCE.execCommand('mceRemoveControl', false, 'myModule_description'); } } function saveAndContinueEdit(){ editForm.submit($('edit_form').action+'back/edit/'); } "; |
то лично я удалил вот эту его часть
function toggleEditor() { if (tinyMCE.getInstanceById('myModule_description') == null) { tinyMCE.execCommand('mceAddControl', false, 'myModule_description'); } else { tinyMCE.execCommand('mceRemoveControl', false, 'myModule_description'); } } |
, за ненадобностью. Его создала утилита module creator. И когда я его удалил у меня ничего не нарушилось.
В файле app/code/local/MyCompany/MyModule/Block/Adminhtml/MyModule/Edit/Tab/Form.php
Нужно добавить такие настройки
$wysiwygConfig = Mage::getSingleton('cms/wysiwyg_config')->getConfig(array( 'add_variables' => false, 'add_widgets' => false, 'files_browser_window_url' => $this->getBaseUrl() . 'admin/cms_wysiwyg_images/index/' )); |
Также изменить или добавить, если еще нет такового, поле на которое навесим wysiwyg редактор.
$fieldset->addField('description', 'editor', array( 'name' => 'description', 'label' => Mage::helper('gallery')->__('Description'), 'title' => Mage::helper('gallery')->__('Description'), 'style' => 'width:700px; height:500px;', 'config' => $wysiwygConfig, 'wysiwyg' => true, 'required' => false, )); |
Хочу отметить одну особенность без учета которой редактор tinyMCE работать не будет. Вот собственно и она:
как видите в данной части
$fieldset->addField('description', 'editor', array( 'name' => 'description', |
у меня поле имеет имя поля тега и имя поля в таблице “description”, но если вы создавали модуль с помощью утилиты module creator, то эта утилита дала этому полю, скорее всего, название “content”. А с названием “content” tinyMCE в magento работать не будет. Он будет совсем неадекватно отображаться на странице. Все поля формы будут объектами редактирования.
И последний пункт который нужно выполнить для правильной работы wysiwyg редактора.
Необходимо в layout файле модуля app/design/adminhtml/default/default/layout/mymodule.xml добавить такой кодик
<mymodule_adminhtml_mymodule_edit> <update handle="editor"/> </mymodule_adminhtml_mymodule_edit> |
Надеюсь вам подошло это решение.
Дон скорых встреч.
This is the only solution for adding wysiwiyg that worked for me.
I think the last part of updating the xml layout did the trick.
Thank you!
How you found this article if you do not speak Russian? In Google?