Magento:将Widget工具添加到产品和类别WYSIWYG上

时间:2013-01-15 10:31:03

标签: magento content-management-system widget wysiwyg

在Magento的CMS页面的WYSIWYG编辑器中,有一个工具可以将Magento小部件添加到编辑器中。我也希望在产品和类别说明中可以使用WYSIWYG。

我很难找到编辑器当前加载的位置。谁能让我知道我可能要做什么,或者至少指出我正确的方向?

提前致谢。

enter image description here

4 个答案:

答案 0 :(得分:6)

根据@David Manner的回答在课程add_widgets中启用add_variablesMage_Adminhtml_Block_Catalog_Helper_Form_Wysiwyg_Content之后,您可能会发现虽然这肯定会在WYSIWYG编辑器中实现这些功能功能正常,它只会在前端渲染原始的widget / variable代码(而不是相应的标记)。

您可以使用以下方法进行修复: -

导航至/app/design/frontend/package/theme/template/catalog/category/view.phtml

查找<?php if($_description=$this->getCurrentCategory()->getDescription()): ?>

在此行下方添加以下内容: -

<?php 
    $helper = Mage::helper('cms'); 
    $processor = $helper->getPageTemplateProcessor(); 
    $_description = $processor->filter($_description); 
?>

这将正确地在前端渲染。

答案 1 :(得分:4)

在类Mage_Adminhtml_Block_Catalog_Helper_Form_Wysiwyg_Content下,配置数组'add_widgets'和'add_variables'中有两个标志。默认情况下,这两个都设置为false。

将这些设置为true将在事件cms_wysiwyg_config_prepare上的Mage_Widget_Model_Observer类函数prepareWidgetsPluginConfig中捕获。

我建议重写Mage_Adminhtml_Block_Catalog_Helper_Form_Wysiwyg_Content以满足您的需求,但将add_widgets和add_variables设置为true应该适用于类别和产品。

答案 2 :(得分:1)

阅读完所有答案后,我找到了优雅的解决方案。此解决方案仅重写一个Block类,并且不会更改任何模板文件。

  1. 重写Mage_Adminhtml_Block_Catalog_Helper_Form_Wysiwyg_Content

    <config> ... <global> <blocks> ... <adminhtml> <rewrite> <catalog_helper_form_wysiwyg_content>Agere_Wysiwyg_Block_Widget_Anywhere</catalog_helper_form_wysiwyg_content> </rewrite> </adminhtml> </blocks> ... </global> </config>

  2. 只更改配置数组中的两个标记&#39; add_widgets&#39;和&#39; add_variables&#39;真的

    class Agere_Wysiwyg_Block_Widget_Anywhere extends Mage_Adminhtml_Block_Catalog_Helper_Form_Wysiwyg_Content {
        protected function _prepareForm() {
            //return parent::_prepareForm();
            $form = new Varien_Data_Form(array('id' => 'wysiwyg_edit_form', 'action' => $this->getData('action'), 'method' => 'post'));
    
            $config['document_base_url']     = $this->getData('store_media_url');
            $config['store_id']              = $this->getData('store_id');
            $config['add_variables']         = true;
            $config['add_widgets']           = true;
            $config['add_directives']        = true;
            $config['use_container']         = true;
            $config['container_class']       = 'hor-scroll';
    
            $form->addField($this->getData('editor_element_id'), 'editor', array(
                'name'      => 'content',
                'style'     => 'width:725px;height:460px',
                'required'  => true,
                'force_load' => true,
                'config'    => Mage::getSingleton('cms/wysiwyg_config')->getConfig($config)
            ));
            $this->setForm($form);
    
            return $this;
        }
    }
    
  3. 创建处理来自类别或产品

    的内容的处理程序
    class Agere_Wysiwyg_Helper_Filter extends Mage_Core_Helper_Abstract {
        public function categoryAttribute($mainHelper, $result, $params) {
            return $this->process($result);
        }
    
        public function productAttribute($mainHelper, $result, $params) {
            return $this->process($result);
        }
    
        public function process($result) {
            /** @var Mage_Cms_Helper_Data $helperCms */
            $helperCms = Mage::helper('cms');
            $processor = $helperCms->getPageTemplateProcessor();
    
            return $processor->filter($result);
        }
    }
    
  4. 最后创建Observer,为wysiwyg添加处理程序

    class Agere_Wysiwyg_Model_Observer extends Varien_Event_Observer {
        public function addWysiwygHandler(Varien_Event_Observer $observer) {
            /** @var Mage_Catalog_Helper_Output $_helperOutput */
            /** @var Agere_Wysiwyg_Helper_Filter $_helperFilter */
            $_helperOutput = Mage::helper('catalog/output');
            $_helperFilter = Mage::helper('agere_wysiwyg/filter');
            $_helperOutput->addHandler('categoryAttribute', $_helperFilter);
            $_helperOutput->addHandler('productAttribute', $_helperFilter);
        }
    }
    
  5. 完整的代码段落,请参阅链接https://github.com/popovsergiy/magento-wysiwyg

答案 3 :(得分:0)

想一个更好的方法是创建一个监听同一事件的新观察者,并使模块依赖于Mage_Widget。然后我们的观察者将在Mage_Widget

之后运行