我刚刚将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)');
}
}
如果我评论出这整个块,一切似乎都运行正常。但有更好的解决方案吗?我实际上没有达到此代码块的目的。
答案 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);
}