2

我正在尝试将新产品属性添加到 Reports->Products Ordered 网格。我复制/app/code/core/Mage/Adminhtml/Block/Report/Product/Sold/Grid.php/app/code/local/Mage/Adminhtml/Block/Report/Product/Sold/Grid.php并添加如下属性:

protected function _prepareColumns()
    {
        $this->addColumn('created_at', array(
            'header'    =>Mage::helper('reports')->__('Create At'),
            'index'     =>'created_at'
        ));
        $this->addColumn('sku', array(
            'header'    =>Mage::helper('reports')->__('sku'),
            'index'     =>'sku'
        ));
        $this->addColumn('name', array(
            'header'    =>Mage::helper('reports')->__('Product Name'),
            'index'     =>'name'
        ));
        $this->addColumn('color', array(
            'header'    =>Mage::helper('reports')->__('Color'),
            'index'     =>'color',
            'type'      => 'options'
        ));
        $this->addColumn('size', array(
            'header'    =>Mage::helper('reports')->__('Size'),
            'index'     =>'size'
        ));
        $this->addColumn('price', array(
            'header'    =>Mage::helper('reports')->__('Price'),
            'width'     =>'120px',
            'type'      =>'currency',
            'currency_code' => $this->getCurrentCurrencyCode(),
            'index'     =>'price'
        ));

        $this->addColumn('ordered_qty', array(
            'header'    =>Mage::helper('reports')->__('Quantity Ordered'),
            'width'     =>'120px',
            'align'     =>'right',
            'index'     =>'ordered_qty',
            'total'     =>'sum',
            'type'      =>'number'
        ));

        $this->addExportType('*/*/exportSoldCsv', Mage::helper('reports')->__('CSV'));
        $this->addExportType('*/*/exportSoldExcel', Mage::helper('reports')->__('Excel'));

        return parent::_prepareColumns();
    }

问题是,“颜色”和“大小”是下拉属性,这就是它们显示选项值而不是选项文本的原因。如何在网格中显示下拉属性的文本值?

编辑 1

谢谢 BOOMER ...我已经按照您的建议更改了 Grid.php,它现在显示空白颜色列。这是我所做的:

    protected function _prepareCollection()
    {
        $collection = Mage::getModel('catalog/product')->getCollection()->addAttributeToSelect('color');

        parent::_prepareCollection();
        $this->getCollection()
            ->initReport('reports/product_sold_collection');
        return $this;
    }

    /**
     * Prepare Grid columns
     *
     * @return Mage_Adminhtml_Block_Report_Product_Sold_Grid
     */
    protected function _prepareColumns()
    {
        $colors = Mage::getResourceModel('eav/entity_attribute_option_collection')
            ->setAttributeFilter(80) // set your attribute ID here
            ->setStoreFilter()
            ->load()
            ->toOptionHash('option_id', 'value');

        $this->addColumn('created_at', array(
            'header'    =>Mage::helper('reports')->__('Create At'),
            'index'     =>'created_at'
        ));
        $this->addColumn('sku', array(
            'header'    =>Mage::helper('reports')->__('sku'),
            'index'     =>'sku'
        ));
        $this->addColumn('name', array(
            'header'    =>Mage::helper('reports')->__('Product Name'),
            'index'     =>'name'
        ));
        $this->addColumn('color', array(
            'header'    =>Mage::helper('reports')->__('Color'),
            'index'     =>'color',
            'type'      => 'options',
            'options' => $colors
        ));
}
4

2 回答 2

3

首先确保您在_prepareCollection()方法中添加要选择的属性,例如:

$collection = Mage::getModel('catalog/product')->getCollection()->addAttributeToSelect('color');

在您的内部,您_prepareColumns()需要定义要使用的选项集合:

$colors = Mage::getResourceModel('eav/entity_attribute_option_collection')
            ->setAttributeFilter(15) // set your attribute ID here
            ->setStoreFilter()
            ->load()
            ->toOptionHash('option_id', 'value');

请务必相应地设置属性 ID。然后在您的 addColumns 中使用此集合列表,如下所示:

$this->addColumn('color', array(
            'header'    =>Mage::helper('reports')->__('Color'),
            'index'     =>'color',
            'type'      => 'options',
            'options' => $colors
        ));

希望这可以帮助!

于 2012-04-30T16:00:36.747 回答
0

我建议您使用不同的方法,至少对于自定义属性。尝试用$colors =以下内容替换您的操作

$attribute = Mage::getModel('eav/config')->getAttribute('catalog_product', 'color');
$colors = array();
foreach( $attribute->getSource()->getAllOptions(true, true) as $option ) {
   $colors[$option['value']] = $option['label'];
}

我通常用 if 条件替换 foreach 中的语句以避免重复的空白选项,即:

if ($option['label'])
    $sets[$option['value']] = $option['label'];
于 2014-02-18T10:42:08.957 回答