2

我刚刚将 Magento 安装从 1.4.1.0 升级到 1.7.0.2。现在尝试编辑类别时出现错误。

错误说:

Fatal error: Call to a member function getAttributeCode() on a non-object in /home/.../domains/.../public_html/app/code/core/Mage/Adminhtml/Block/Catalog/Category/Tab/Attributes.php on line 137

我在论坛上发现了一些关于同一问题的主题,但没有一个有解决方案。在这里也找不到解决方案。

当我将旧版本的 Attributes.php 与新版本进行比较时,唯一的区别是这个代码块(第 132 到 145 行):

    if ($this->getCategory()->getLevel() == 1) {
        $fieldset->removeField('custom_use_parent_settings');
    } else {
        if ($this->getCategory()->getCustomUseParentSettings()) {
            foreach ($this->getCategory()->getDesignAttributes() as $attribute) {
                if ($element = $form->getElement($attribute->getAttributeCode())) {
                    $element->setDisabled(true);
                }
            }
        }
        if ($element = $form->getElement('custom_use_parent_settings')) {
            $element->setData('onchange', 'onCustomUseParentChanged(this)');
        }
    }

如果我注释掉这整个块,一切似乎都很好。但是有更好的解决方法吗?我实际上不明白这个代码块的目的。

4

2 回答 2

3

这表示

 $attribute->getAttributeCode(); // referring to invalid attribute ( object )

有一个属性分配给旧数据库中的类别,您没有迁移它

查找分配给 catalog_category 实体的旧属性(假定在 1.7 安装中为 id 3),并在迁移后从新数据库中查找

SELECT *
FROM `eav_attribute`
WHERE `entity_type_id` = '3'

然后比较新旧数据库的结果

于 2013-03-20T11:03:16.690 回答
1
if ($element = $form->getElement($attribute->getAttributeCode())) {
    $element->setDisabled(true);    
}

替换为

if ($element = $form->getElement($attribute)) {
    $element->setDisabled(true);                           
}
于 2014-02-18T23:24:20.143 回答