Magento 1.7.0.2 Неустранимая ошибка: вызов функции-члена getAttributeCode () для не-объекта в

Я только что обновил установку 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)');
        }
    }

Если я закомментирую весь этот блок, все будет работать нормально. Но есть ли лучшее решение? На самом деле я не понимаю цели этого блока кода.


person Akif    schedule 20.03.2013    source источник


Ответы (2)


Это означает

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

В старой базе данных есть атрибут, назначенный категориям, и вы не перенесли это

Найдите старый атрибут, назначенный объекту catalog_category (предполагается, что это идентификатор 3 в установке 1.7), а также из новой базы данных после миграции.

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

Затем сравните результат старой и новой базы данных.

person Meabed    schedule 20.03.2013
comment
Спасибо, теперь проблема у меня. Но что вы имеете в виду, что вы не перенесли это, я просто обновил свою установку Magento. Он должен применять все такие изменения БД, верно? Я нашел attribute_code, который существует в старом, но не в новом db. Это custom_design_apply. Должен ли я тогда добавить это вручную? - person Akif; 20.03.2013
comment
Добавление полной строки custom_design_apply устранило проблему. Спасибо! - person Akif; 20.03.2013
comment
Атрибуты должны быть обновлены также при обновлении версии, но что происходит, так это то, что она не обновлялась. так что вам нужно сделать это вручную :) хорошо, что вы это исправили. - person Meabed; 20.03.2013
comment
Эти проблемы обычно возникают из-за того, что вы не обновили ‹1.4.2.0 версии Magento до 1.4.2.0 перед тем, как продолжить работу. Там много изменений в базе данных. 1.6.2.0 - это следующий слой изжоги. - person Fiasco Labs; 14.07.2013

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

заменить на

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