Не удается отредактировать продукт после установки исправления SUPEE-8788


После установки исправления SUPEE-8788 в моем Magento 1.7.0.2 у меня возникает ошибка при попытке отредактировать продукт:

Неустранимая ошибка: Вызов функции-члена getUploaderConfig() для не-объекта в/var/www/html/app/code/core/Mage/Adminhtml/Block/Catalog/Product/Helper/Form/Gallery/Content.php в строке 56

Author: Raphael at Digital Pianism, 2016-11-07

3 answers

Исправлена проблема с загрузкой изображений после установки исправления 8788 для Magento версии CE 1.7.0.2 - 1.9.2.4.

I was able to fix it,Please Follow following instruction.

Шаг >> 1: После успешной установки исправления безопасности 8788 перейдите в панель администратора и очистите весь кэш Magento. Затем Выйдите из своей панели администратора и Повторно войдите в панель администратора.

Шаг >> 2: Перейдите к Управлению индексами и выберите все переиндексировать все данные после очистить все Magento кэш еще раз.

Шаг >> 3: Это очень важный шаг, Удалите кэш вашего браузера (Ctrl+shift +Удалить), очистите все данные о просмотре из браузера, включая файлы cookie.

Шаг >> 4: Перейдите в Каталог >>Управление продуктами, добавьте новое изображение любого продукта, теперь вы можете видеть, что все работает нормально.

 2
Author: Randhir Yadav, 2016-11-26 10:49:32

Подробная информация о проблеме

SUPEE-8788 заменяет старый загрузчик flash на новую систему загрузки, которая находится в модуле Mage/Uploader.

По умолчанию 1.7.0.2 имеет следующий код в app/code/core/Mage/Adminhtml/Block/Catalog/Product/Helper/Form/Gallery/Content.php

$this->setChild('uploader',
    $this->getLayout()->createBlock('adminhtml/media_uploader')
);
$this->getUploader()->getConfig()
    ->setUrl(Mage::getModel('adminhtml/url')->addSessionParam()->getUrl('*/catalog_product_gallery/upload'))
    ->setFileField('image')
    ->setFilters(array(
        'images' => array(
            'label' => Mage::helper('adminhtml')->__('Images (.gif, .jpg, .png)'),
            'files' => array('*.gif', '*.jpg','*.jpeg', '*.png')
        )
    ));

SUPEE-8788 заменяет его на:

$this->setChild('uploader',
    $this->getLayout()->createBlock($this->_uploaderType)
);
$this->getUploader()->getUploaderConfig()
    ->setFileParameterName('image')
    ->setTarget(Mage::getModel('adminhtml/url')->addSessionParam()->getUrl('*/catalog_product_gallery/upload'));

$browseConfig = $this->getUploader()->getButtonConfig();
$browseConfig
    ->setAttributes(array(
        'accept' => $browseConfig->getMimeTypesByExtensions('gif, png, jpeg, jpg')
    ));

Устранение неполадки

Согласно ошибке, которую вы получаете, SUPEE-8788 был правильно применен, поскольку ваш код пытается вызвать getUploaderConfig, что является новым методом, введенным исправлением.

Это метод вызывается на getUploader(), который возвращает $this->getChild('uploader');

Этот дочерний элемент соответствует дочернему набору в начале метода _prepareLayout:

$this->setChild('uploader',
    $this->getLayout()->createBlock($this->_uploaderType)
);

В случае этого класса $this->_uploaderType определяется вверху:

protected $_uploaderType = 'uploader/multiple';

Итак, первое, что я хотел бы проверить, это убедиться, что этот файл доступен в вашей системе, он должен находиться под app/code/core/Mage/Uploader/Block/Multiple.php

Два возможных случая:

  • его там нет. Это определенно было бы причиной проблемы, но поскольку SUPEE-8788 был примененный он должен быть там. Может быть, вы используете систему управления версиями, и этот файл не был зафиксирован?
  • он там. В этом случае откройте его и убедитесь, что он не пустой или не выглядит сломанным.

Если этот файл есть и не выглядит сломанным, вы можете сделать несколько вещей:

Сначала попробуйте посмотреть, что возвращает get_class($this->getLayout()->createBlock($this->_uploaderType)). Если он не возвращает Mage_Uploader_Block_Multiple, это означает, что у вас есть другой модуль, который использует имя класса uploader и, следовательно, должен быть переработан, чтобы быть совместимым с SUPEE-8788.

Я знаю, что модуль загрузки без флэш-памяти имеет некоторые проблемы с совместимостью с SUPEE-8788, см. Здесь: https://github.com/openstream/No-Flash-Image-Uploader/issues/18

Затем, если вы все еще не обнаружили никаких проблем, вам придется проверить, что у вас нет какой-либо пользовательской компоновки adminhtml, которая удаляет uploader дочерний элемент , используйте следующую команду в app/design/adminhtml/, чтобы попытаться выяснить:

grep -ri "uploader" . | grep "layout"

В в списке, который вы получите, попробуйте найти что-то вроде <remove name="uploader" />, это было бы причиной.

Наконец, последнее, что приходит мне на ум, это то, что у вас включена компиляция, и вы не перекомпилировали после применения исправления. Для этого перейдите в раздел Система > Инструменты > Компиляция и перекомпилируйте.

 8
Author: Raphael at Digital Pianism, 2016-11-10 09:35:57

Каждый раз, когда вы устанавливаете исправления, проверяйте правильность разрешений для файлов.

example: sudo chown www-data:www-data magento-folder
 0
Author: MalT, 2016-11-16 22:57:44