需要Magento基本建议:在管理部分修改特定的产品网格?

时间:2012-09-30 01:28:35

标签: php magento

我有一些关于修改Magento管理部分的一般性问题,非常感谢让他们回答。我是Magento的新手所以请耐心等待。

我的目标是在Catalog -> Manage Cateories部分的“类别产品”表中添加一个带有产品属性(例如“尺寸”)的新列(请参见下面的屏幕截图)。

Magento开发经验很少,我不太清楚从哪里开始。我查看了Grid.php目录下的一些adminhtml文件,虽然我看到了一些像addColumn(...)这样的语句,但我不知道我在哪里插入新属性列。

另外,我假设不是直接修改任何核心文件,而是将它们复制到local文件夹下的同一路径并编辑或以某种方式扩展它们?我是否必须编辑任何配置文件或执行其他操作才能反映更改?我 - 通过这样做 - 实际上是创建我自己的模块吗?

我还读到我应该在进行任何更改之前禁用“编译”。为什么是这样?还有什么需要考虑的吗?

我再次非常感谢任何帮助,并感谢我的问题必须是基本的。您可以指出我的任何补充资源将不胜感激。感谢。

enter image description here

3 个答案:

答案 0 :(得分:5)

确实,您应该首先了解要编辑的文件以及如何编辑它。在这种情况下,您要修改app/code/core/Mage/Adminhtml/Block/Catalog/Category/Tab/Product.php但是,就像您说的那样,您应该修改其当前位置的文件。有两种方法可以“正确”的方式修改文件。

  1. (更难但更具可扩展性)在local中创建一个新模块并在etc/config.xml中告诉Magento你正在覆盖这个Block(这只是一个php类),在这个新块中有一个不同的块模块并将新类extend作为核心Block类。然后你只需要覆盖一个函数(_prepareColumns)。
  2. (更简单)将文件从app/code/core/Mage/Adminhtml/Block/Catalog/Category/Tab/Product.php复制到app/code/local/Mage/Adminhtml/Block/Catalog/Category/Tab/Product.php并修改所需的功能(_prepareColumns
  3. 如果您是Magento的新手,我建议使用第二个选项,因为它更容易。 Magento将始终在local加载core之前加载该文件,因此core中的文件将不再使用,您的local版本将被使用。要了解更多信息,请阅读这篇文章from Alan Storm

    现在,为了添加您想要的列,请执行类似于SKU字段的操作

    $this->addColumn('size', array(
        'header'    => Mage::helper('catalog')->__('Size'),
        'index'     => 'size'
    ));
    

    按您想要的顺序(在产品名称和SKU之间)。我假设您的商品有一个名为size的字段,您可以使用$product->getSize()

    进行审核

答案 1 :(得分:2)

最大的解决方案很有意义,但缺少一些重要的步骤,我将详细说明他的原始方法

  1. 通过将app / code / core / Mage / Adminhtml / Block / Catalog / Category / Tab / Product.php复制到app / code / local / Mage / Adminhtml / Block,创建“产品”选项卡的新本地覆盖/Catalog/Category/Tab/Product.php

  2. 修改网格视图涉及2个功能。 _prepareCollection和_prepareColumns

  3. _prepareColumns通过添加对addColumn函数的调用,如下所示:

    $this->addColumn('size', array(
        'header'    => Mage::helper('catalog')->__('Size'),
        'width'     => '80',
        'index'     => 'size'
    ));
    
  4. _prepareCollection,默认情况下,网格中加载的产品集合只有一些属性(名称,sku,价格),您现在需要通过 - > addAttributeToSelect('size')添加我们的now属性您只使用textfield属性,这是您必须进行的修改的扩展,但是如果您的属性是例如下拉列表,则需要对prepare集合进行进一步更改:

  5. (可选)下拉列表属性仅存储选择的选项的值,因此我们需要为addColumns调用提供options数组,以便Magento可以正确显示值,我们可以通过以下方式执行此操作:

  6. 在本地产品副本上

    ,将以下内容添加到_prepareColumns函数

        $attribute = Mage::getModel('eav/config')->getAttribute('catalog_product', 'colour');
        $options = array();
        foreach( $attribute->getSource()->getAllOptions(true, true) as $option ) {
           $options[$option['value']] = $option['label'];
        }
        $this->addColumn('colour', array(
            'header'    => Mage::helper('catalog')->__('Colour'),
            'width'     => '80',
            'index'     => 'colour',
            'type'      => 'options',
            'options'   =>  $options
        ));
    

答案 2 :(得分:1)

虽然这些是一些非常彻底的问题,我相信你会学到很多东西,但是有一个现成的解决方案; Enhanced Admin Product Grid能够将任意属性添加为列。