在Magento中将产品选择小部件添加到自定义属性

时间:2012-11-02 14:55:28

标签: php magento

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

那我该怎么办呢? 在:

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

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

编辑: 方案如下:

我想创建一个产品属性,在按下按钮后,将打开产品选择小部件。

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

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

1 个答案:

答案 0 :(得分: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部分,但会让你非常接近让其他部分工作。