首页 文章

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

提问于
浏览
2

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

那我该怎么办呢?在:

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

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

编辑:场景如下:

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

选择后,选定的SKU将以逗号分隔的格式进入 .

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

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部分,但会让你非常接近让其余的工作 .

相关问题