Magento 1.7.0.2致命错误:在非对象上调用成员函数getAttributeCode()

时间:2013-03-20 10:25:08

标签: magento upgrade categories fatal-error

我刚刚将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)');
        }
    }

如果我评论出这整个块,一切似乎都运行正常。但有更好的解决方案吗?我实际上没有达到此代码块的目的。

2 个答案:

答案 0 :(得分:3)

这意味着

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

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

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

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

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

答案 1 :(得分:1)

if ($element = $form->getElement($attribute->getAttributeCode())) {
    $element->setDisabled(true);    
}

替换为

if ($element = $form->getElement($attribute)) {
    $element->setDisabled(true);                           
}