Magento - 将WYSIWYG编辑器添加到自定义小部件

Rou*_*beh 7 wysiwyg customization module widget magento

我在自定义模块中创建了一个小部件.一切正常,窗口小部件可以嵌入到CMS页面中.但是,我想添加一个WYSIWYG编辑器而不是textarea参数类型.

这是我的widget.xml中的重要部分:

<parameters>            
    <description translate="label">
        <required>0</required>
        <visible>1</visible>
        <label>Description</label>
        <type>textarea</type>
    </description>
</parameters>
Run Code Online (Sandbox Code Playgroud)

我想知道是否有办法扩展Magento的功能,以允许类似于此的所见即所得编辑器:

<parameters>            
    <description translate="label">
        <required>0</required>
        <visible>1</visible>
        <label>Description</label>
        <type>WYSIWYG</type>
    </description>
</parameters>
Run Code Online (Sandbox Code Playgroud)

有没有人遇到过类似的问题?..或者有谁知道如何实现这一目标?也许通过一个自定义渲染器,它调用WYSIWYG编辑器,但是如何...?

Thanx提前.

Rou*_*beh 7

我终于设法自己做了.对于所有遇到同样问题的人,我就是这样做的:

在widget.xml中,我的参数设置如下:

<parameters>            
    <text translate="label">
        <required>1</required>
        <visible>1</visible>
        <label>Specify text</label>
        <description>No double quotes allowed, use single quotes instead!</description>
        <type>cmswidget/widget_wysiwyg</type>
    </text>
</parameters>
Run Code Online (Sandbox Code Playgroud)

为了在小部件的textarea上启用WYSIWYG编辑器,我在自定义模块中创建了一个新的块类,扩展了类Mage_Adminhtml_Block_Widget_Form_Renderer_Fieldset_Element并覆盖了render()函数:

class MyCompany_MyModule_Block_Widget_Wysiwyg extends Mage_Adminhtml_Block_Widget_Form_Renderer_Fieldset_Element
{
    public function render(Varien_Data_Form_Element_Abstract $element)
    {
        $editor = new Varien_Data_Form_Element_Editor($element->getData());
        $editor->setId($element->getId());
        $editor->setForm($element->getForm());
        $editor->setWysiwyg(true);
        $editor->setForceLoad(true);
        return parent::render($editor);
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,我很高兴看到小部件中的编辑器.不幸的是,仍然存在问题.由于编辑器使用双引号创建内联样式和属性,并将其作为窗口小部件attribut放置到CMS页面 - 它本身也是双引号,因此无法正确呈现窗口小部件.为了解决这个问题,我扩展了类Mage_Widget_Model_Widget并用单引号替换了编辑器双引号,如下所示:

class MyCompany_MyModule_Model_Widget extends Mage_Widget_Model_Widget
{
    public function getWidgetDeclaration($type, $params = array(), $asIs = true)
    {

        if( preg_match('~(^mymodule/myblockclass)~', $type) )
        {
            $params['text'] = str_replace('"', "'", $params['text']);

        }
        return parent::getWidgetDeclaration($type, $params, $asIs);
    }
}
Run Code Online (Sandbox Code Playgroud)

在getWidgetDeclaration()函数内部,我检查小部件类型是否是我想要处理的类型.窗口小部件类型在widget.xml中为每个窗口小部件指定,如下所示:

<MyCompany_MyModule_MyWidgetName type="mymodule/myblockclass" translate="name description" module="mymodule">
<!-- ... -->
</MyCompany_MyModule_MyWidgetName>
Run Code Online (Sandbox Code Playgroud)

而现在,我得到的一切都像我想要的一样.编辑器生成的HTML将使用单引号替换双引号,输出将完美运行.之前我逃过这样的双引号 - "一些文字".这似乎最初起作用,但是当通过单击图标(编辑器视图)编辑窗口小部件时,html被切断了.Magento的javascript似乎以自己的方式逃脱了字符串.但是,上面描述的方法将起作用,因为我在插入窗口小部件时只用单引号替换双引号,而Magento在CMS编辑器视图中打开窗口小部件时将单引号转换为双引号.

希望这对某人有用.