在Magento的CMS页面的WYSIWYG编辑器中,有一个工具可以将Magento小部件添加到编辑器中。我也希望在产品和类别说明中可以使用WYSIWYG。
我很难找到编辑器当前加载的位置。谁能让我知道我可能要做什么,或者至少指出我正确的方向?
提前致谢。
答案 0 :(得分:6)
根据@David Manner的回答在课程add_widgets
中启用add_variables
和Mage_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类,并且不会更改任何模板文件。
重写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>
只更改配置数组中的两个标记&#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;
}
}
创建处理来自类别或产品
的内容的处理程序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);
}
}
最后创建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);
}
}
完整的代码段落,请参阅链接https://github.com/popovsergiy/magento-wysiwyg
答案 3 :(得分:0)
想一个更好的方法是创建一个监听同一事件的新观察者,并使模块依赖于Mage_Widget。然后我们的观察者将在Mage_Widget
之后运行