我有一些关于修改Magento管理部分的一般性问题,非常感谢让他们回答。我是Magento的新手所以请耐心等待。
我的目标是在Catalog -> Manage Cateories
部分的“类别产品”表中添加一个带有产品属性(例如“尺寸”)的新列(请参见下面的屏幕截图)。
Magento开发经验很少,我不太清楚从哪里开始。我查看了Grid.php
目录下的一些adminhtml
文件,虽然我看到了一些像addColumn(...)
这样的语句,但我不知道我在哪里插入新属性列。
另外,我假设不是直接修改任何核心文件,而是将它们复制到local
文件夹下的同一路径并编辑或以某种方式扩展它们?我是否必须编辑任何配置文件或执行其他操作才能反映更改?我 - 通过这样做 - 实际上是创建我自己的模块吗?
我还读到我应该在进行任何更改之前禁用“编译”。为什么是这样?还有什么需要考虑的吗?
我再次非常感谢任何帮助,并感谢我的问题必须是基本的。您可以指出我的任何补充资源将不胜感激。感谢。
答案 0 :(得分:5)
确实,您应该首先了解要编辑的文件以及如何编辑它。在这种情况下,您要修改app/code/core/Mage/Adminhtml/Block/Catalog/Category/Tab/Product.php
但是,就像您说的那样,您应该不修改其当前位置的文件。有两种方法可以“正确”的方式修改文件。
local
中创建一个新模块并在etc/config.xml
中告诉Magento你正在覆盖这个Block(这只是一个php类),在这个新块中有一个不同的块模块并将新类extend
作为核心Block类。然后你只需要覆盖一个函数(_prepareColumns
)。app/code/core/Mage/Adminhtml/Block/Catalog/Category/Tab/Product.php
复制到app/code/local/Mage/Adminhtml/Block/Catalog/Category/Tab/Product.php
并修改所需的功能(_prepareColumns
)如果您是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)
最大的解决方案很有意义,但缺少一些重要的步骤,我将详细说明他的原始方法
通过将app / code / core / Mage / Adminhtml / Block / Catalog / Category / Tab / Product.php复制到app / code / local / Mage / Adminhtml / Block,创建“产品”选项卡的新本地覆盖/Catalog/Category/Tab/Product.php
修改网格视图涉及2个功能。 _prepareCollection和_prepareColumns
_prepareColumns通过添加对addColumn函数的调用,如下所示:
$this->addColumn('size', array(
'header' => Mage::helper('catalog')->__('Size'),
'width' => '80',
'index' => 'size'
));
_prepareCollection,默认情况下,网格中加载的产品集合只有一些属性(名称,sku,价格),您现在需要通过 - > addAttributeToSelect('size')添加我们的now属性您只使用textfield属性,这是您必须进行的修改的扩展,但是如果您的属性是例如下拉列表,则需要对prepare集合进行进一步更改:
(可选)下拉列表属性仅存储选择的选项的值,因此我们需要为addColumns调用提供options数组,以便Magento可以正确显示值,我们可以通过以下方式执行此操作:
,将以下内容添加到_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能够将任意属性添加为列。