Не удается отредактировать продукт после установки исправления 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
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: Перейдите в Каталог >>Управление продуктами, добавьте новое изображение любого продукта, теперь вы можете видеть, что все работает нормально.
Подробная информация о проблеме
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" />
, это было бы причиной.
Наконец, последнее, что приходит мне на ум, это то, что у вас включена компиляция, и вы не перекомпилировали после применения исправления. Для этого перейдите в раздел Система > Инструменты > Компиляция и перекомпилируйте.
Каждый раз, когда вы устанавливаете исправления, проверяйте правильность разрешений для файлов.
example: sudo chown www-data:www-data magento-folder