2

有谁知道如何使用小部件渲染器添加自定义产品属性?如果您选择 SKU,您可以在促销规则中看到这一点,您将看到一个带有产品选择的 Ajax 弹出窗口。

那么我该怎么做呢?在 :

$installer->addAttribute(Mage_Catalog_Model_Product::ENTITY...

换句话说,我如何使用小部件来选择自定义属性值?

编辑:场景如下:

我想创建一个产品属性,单击按钮即可打开产品选择小部件。

选择后,所选 SKU 将以逗号分隔的格式输入。

这种行为可以在目录和购物车价格规则中看到。如果您按 SKU 过滤规则(必须启用 SKU 属性以“应用于规则”),您将获得一个字段和一个用于打开产品选择小部件的按钮。

4

1 回答 1

1

以下是一些可以让您走上正轨的想法:

首先,在设置脚本中,创建您的实体:

$installer->addAttribute('catalog_product', 'frontend_display', array(
    'label' => 'Display Test',
    'type'  => 'varchar',
    'frontend_model' => 'Test_Module/Entity_Attribute_Frontend_CsvExport',
    'input' => 'select',
    'required' => 0,
    'user_defined' => false,
    'group' => 'General'
));

确保将 frontend_model 设置为您要使用的模型。前端模型影响属性的显示(在前端和 adminhtml 部分中)。

接下来,创建自己的类,并覆盖以下一个或两个函数:

public function getInputType()
{
    return parent::getInputType();
}

public function getInputRendererClass()
{
    return "Test_Module_Block_Adminhtml_Entity_Renderer_CsvExport";
}

第一个 ( getInputType()) 用于将输入类型更改为烘焙输入类型(请参阅Varien_Data_Form_Element_*选项)。但是,要设置您自己的渲染器类,请使用后一个函数 - getInputRendererClass()。这就是我将在下面演示的内容:

public function getElementHtml()
{
    return Mage::app()->getLayout()->createBlock('Test_Module/Adminhtml_ExportCsv', 'export')->toHtml();
}

在这里,为了清理,我正在实例化另一个块,因为元素本身没有显示按钮等的额外功能。

最后,创建这个文件:

class Test_Module_Block_Adminhtml_ExportCsv extends Mage_Adminhtml_Block_Widget
{
    protected function _prepareLayout()
    {
        $button = $this->getLayout()->createBlock('adminhtml/widget_button')
            ->setData(array(
            'label' => $this->__('Generate CSV'),
            'onclick' => '',
            'class' => 'ajax',
        ));

        $this->setChild('generate', $button);
    }

    protected function _toHtml()
    {
        return $this->getChildHtml();
    }
}

这不包括 AJAX 部分,但会让您非常接近让其余部分工作。

于 2012-11-16T17:31:06.057 回答