Magento:如何将小部件按钮添加到所见即所得的产品编辑器中

3

我希望能够在产品描述字段中添加目录产品链接小部件(以便我可以轻松地在描述中链接到其他产品)。我已经通过创建一个类似于以下文件的文件来扩展了Mage_Catalog_Model_Product:

class mymodule_Catalog_Model_Product extends Mage_Catalog_Model_Product
{

    /**
      * Add getDescription function that interprets widget or static blocks
      * within product descriptions
      */
    public function getDescription() {
        $processor = Mage::getModel('widget/template_filter');
        $html = $processor->filter($this->getData('description'));
        return $html;
    }

}

如果我输入类似下面的内容,它可以正常工作:

{{widget type="catalog/product_widget_link" anchor_text="我的文本" template="catalog/product/widget/link/link_inline.phtml" id_path="product/1234"}}

在描述字段中加入上述代码会创建一个指向产品编号为1234的链接。

但是我想在所见即所得编辑器中添加实际的“目录产品链接”小部件按钮以编辑产品。CMS 编辑器已经有了这个按钮,但我不知道需要修改什么才能将此小部件添加到产品编辑的管理界面中。能否有人帮助我?


这是非常糟糕的做法,你最好将其放入块中,或者更好的是模板中。 - witrin
@witrin 为什么这是不好的做法?产品描述是动态的;你如何将这些链接放入模板中? - Yumecosmos
@Yumecosmos 因为你覆盖了目录核心类,而且你只能这样做一次,所以你很有可能会与其他扩展发生冲突,换句话说,这对于维护来说是不好的。只需创建一个带有上述三行代码的帮助程序,并在显示描述的视图的模板中使用它即可。通常情况下,我会尽量避免直接覆盖这样的类。更好的选择是使用观察者,如果没有事件,则使用块或模板,只要您不必更改10个文件。如果没有其他选择,覆盖核心类是最后的选择。 - witrin
@witrin 哦!抱歉,我误解了。我以为你的意思是使用小部件来创建链接是不好的做法。同意覆盖应该是最后的选择,但我会充当魔鬼的代言人……因为视图和块通常是紧密耦合的,是否真的有任何避免维护困难的方法?迟早你会手动合并更改。(我们肯定有供应商告诉我们,“要安装我们的扩展,请将这些行复制到phtml中……”当然,这本身可能是可怕的做法。)或者也许我只是做错了。需要学习如何/何时使用助手。 - Yumecosmos
2个回答

10

如果有人像我一样后来发现这个问题,你可以使用cms_wysiwyg_config_prepare事件将其设置为true。

例如:在config.xml中

<events>
            <cms_wysiwyg_config_prepare>
                <observers>
                    <webtise_widgets>
                        <class>webtise_widgets/observer</class>
                        <method>cmsWysiwygConfigPrepare</method>
                    </webtise_widgets>
                </observers>
            </cms_wysiwyg_config_prepare>
        </events>

在您的观察者中

<?php class Webtise_Widgets_Model_Observer{

    public function cmsWysiwygConfigPrepare(Varien_Event_Observer $observer){
        $observer->getEvent()->getConfig()->setAddWidgets(true);
    }
}

4
这是最佳方案!被接受的答案带来了太多的缺点。 - witrin
'add_variables' => true, 'add_widgets' => true, ));``` 在将```add_variables```设置为true之后,我可以在CMS页面中看到所有按钮。 - Damodar Bashyal

2
我可以通过覆盖核心文件来完成这个操作。
app/code/local/Mage/Adminhtml/Block/Catalog/Helper/Form/Wysiwyg/Content.php

和设置

$config['add_widgets']           = true;

现在小部件按钮已经在管理员界面的所有所见即所得编辑器中显示出来了。

这是否涉及到任何缓存清除,因为我没有得到所期望的结果? - anujeet
你需要重新加载缓存。 - Nick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接