在 Magento CMS 页面的 WYSIWYG 编辑器上,有一个工具可以将 Magento 小部件添加到编辑器中。我希望这也可用于产品和类别描述的所见即所得。
我现在正在努力寻找编辑器的加载位置。任何人都可以让我知道我可能需要做什么,或者至少为我指明正确的方向吗?
提前致谢。
在 Magento CMS 页面的 WYSIWYG 编辑器上,有一个工具可以将 Magento 小部件添加到编辑器中。我希望这也可用于产品和类别描述的所见即所得。
我现在正在努力寻找编辑器的加载位置。任何人都可以让我知道我可能需要做什么,或者至少为我指明正确的方向吗?
提前致谢。
根据@David Manner的回答启用add_widgets
并add_variables
上课后Mage_Adminhtml_Block_Catalog_Helper_Form_Wysiwyg_Content
,您可能会发现虽然这肯定会在所见即所得编辑器中启用这些功能并正常运行,但它只会在前端呈现原始小部件/变量代码(而不是适当的标记)。
您可以使用以下方法进行修复:-
导航/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);
?>
这将在前端正确呈现。
在 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 应该适用于类别和产品。
阅读所有答案后,我找到了优雅的解决方案。此解决方案仅重写一个 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>
仅将配置数组“add_widgets”和“add_variables”中的两个标志更改为 true
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);
}
}
最后创建观察者,为所见即所得添加处理程序
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
认为更好的方法是创建一个新的观察者来监听同一事件,并使模块依赖于 Mage_Widget。然后我们的观察者将在 Mage_Widget 之后运行