Проблема в панели администратора после установки SUPEE Patch 8788

9

У меня установлен Magento CE 1.9.2.4 вместе с патчами (5377,1533,4788 и т. Д. Почти все патчи).

Этот вопрос также показывает проблемы, которые могут / обязательно возникать в любом пользовательском модуле, включающем загрузку изображений в их пользовательские разделы, а не только основные проблемы magento.

  1. Теперь, после того как я установил последний патч 8788 через командную строку, я не могу открыть страницу «Добавить / Редактировать» моего пользовательского модуля, которая до установки 8788 работала нормально.

При попытке открыть страницу «Добавить новый баннер» моего модуля появляется сообщение об ошибке ниже:

Неустранимая ошибка: вызов функции-члена setUrl () для необъекта в /home/site_user/public_html/app/code/community/My/Module/Block/Adminhtml/Banner/Add/Tab/Image.php в строке 57

Линии виновника, как показано ниже:

$this->getUploader()->getConfig()->setUrl(Mage::getModel('adminhtml/url')->addSessionParam()->getUrl('*/*/image'))
  1. Также я не вижу уже загруженные изображения продуктов в Catalog > Manage Products > Any product > Imagesразделе администратора .

Ниже приведён базовый Mage_Adminhtml_Block_Media_Uploaderкласс.

<?php
/**
 * Magento
 *
 * NOTICE OF LICENSE
 *
 * This source file is subject to the Open Software License (OSL 3.0)
 * that is bundled with this package in the file LICENSE.txt.
 * It is also available through the world-wide-web at this URL:
 * http://opensource.org/licenses/osl-3.0.php
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@magento.com so we can send you a copy immediately.
 *
 * DISCLAIMER
 *
 * Do not edit or add to this file if you wish to upgrade Magento to newer
 * versions in the future. If you wish to customize Magento for your
 * needs please refer to http://www.magento.com for more information.
 *
 * @category    Mage
 * @package     Mage_Adminhtml
 * @copyright  Copyright (c) 2006-2016 X.commerce, Inc. and affiliates (http://www.magento.com)
 * @license    http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
 */

/**
 * Adminhtml media library uploader
 *
 * @category   Mage
 * @package    Mage_Adminhtml
 * @author      Magento Core Team <core@magentocommerce.com>
 */

/**
 * @deprecated
 * Class Mage_Adminhtml_Block_Media_Uploader
 */
class Mage_Adminhtml_Block_Media_Uploader extends Mage_Uploader_Block_Multiple
{
    /**
     * Constructor for uploader block
     */
    public function __construct()
    {
        parent::__construct();
        $this->getUploaderConfig()->setTarget(Mage::getModel('adminhtml/url')->addSessionParam()->getUrl('*/*/upload'));
        $this->getUploaderConfig()->setFileParameterName('file');
    }
}

Кто-нибудь, дайте мне знать, как это исправить с наименьшим количеством возможных изменений кода.

Вики Дев
источник
Не могли бы вы опубликовать содержание getUploaderметода, пожалуйста?
Рафаэль на цифровом пианизме
Пожалуйста, проверьте, обновил мой вопрос.
Вики Дев
3
Возможный дубликат исправления безопасности SUPEE-8788 - возможные проблемы?
Теджа Бхагаван Коллепара
1
@TejabhagavanKollepara Пожалуйста, проверьте оба случая в вопросе, прежде чем торопливо пометить его как дубликат.
Вики Дев
1
@VickyDev только что решил эту проблему здесь magento.stackexchange.com/questions/141775/…
Кайсар Сатти

Ответы:

17

Mage_Adminhtml_Block_Media_Uploaderустарела после SUPEE-8788 (и 1.9.3). Таким образом, существует несколько изменений обратной несовместимости, которые нарушают работу модуля, использующего загрузчик.

Сначала я подумал, что небольшое изменение исправит это, но на самом деле есть еще много чего сделать.

Сделайте модуль с помощью галереи совместимым с 1.9.2 и 1.9.3

Поэтому, если вы являетесь поставщиком модулей, вы не хотите иметь две разные версии вашего модуля для 1.9.2 и 1.9.3. Вот как сделать ваш код совместимым с обоими:

В вашем блочном _prepareLayoutметоде вам нужно сделать следующее:

Заменить:

 $this->getUploader()->getConfig()
            ->setUrl($url)
            ->setFileField('image')
            ->setFilters(array(
                'images' => array(
                    'label' => Mage::helper('adminhtml')->__('Images (.gif, .jpg, .png)'),
                    'files' => array('*.gif', '*.jpg','*.jpeg', '*.png')
                )
            ));

С:

    if (class_exists("Mage_Uploader_Block_Abstract")) {
        // PATCH SUPEE-8788 or Magento 1.9.3
        $this->getUploader()->getUploaderConfig()
            ->setFileParameterName('image')
            ->setTarget($url);

        $browseConfig = $this->getUploader()->getButtonConfig();
        $browseConfig
            ->setAttributes(
                array("accept"  =>  $browseConfig->getMimeTypesByExtensions('gif, png, jpeg, jpg'))
            );
    } else {
        $this->getUploader()->getConfig()
            ->setUrl($url)
            ->setFileField('image')
            ->setFilters(array(
                'images' => array(
                    'label' => Mage::helper('adminhtml')->__('Images (.gif, .jpg, .png)'),
                    'files' => array('*.gif', '*.jpg','*.jpeg', '*.png')
                )
            ));
    }

Как вы видите, я использую, class_existsчтобы проверить, применяется ли SUPEE-8788 или Magento 1.9.3.

Тогда по вашему gallery.phtmlнужно заменить:

var <?php echo $_block->getJsObjectName(); ?> = new Product.Gallery('<?php echo $_block->getHtmlId() ?>', <?php if ($_block->getElement()->getReadonly()):?>null<?php else:?><?php echo $_block->getUploader()->getJsObjectName() ?><?php endif;?>, <?php echo $_block->getImageTypesJson() ?>);

С:

<?php if (class_exists("Mage_Uploader_Block_Abstract")): ?>
    var <?php echo $_block->getJsObjectName(); ?> = new Product.Gallery('<?php echo $_block->getHtmlId() ?>', <?php echo $_block->getImageTypesJson() ?>);
<?php else: ?>
    var <?php echo $_block->getJsObjectName(); ?> = new Product.Gallery('<?php echo $_block->getHtmlId() ?>', <?php if ($_block->getElement()->getReadonly()):?>null<?php else:?><?php echo $_block->getUploader()->getJsObjectName() ?><?php endif;?>, <?php echo $_block->getImageTypesJson() ?>);
<?php endif; ?>

Затем для файла макета вы можете сделать это так:

<reference name="head">
    <action method="addJs"><file helper="module/getFlowMin" /></action>
    <action method="addJs"><file helper="module/getFustyFlow" /></action>
    <action method="addJs"><file helper="module/getFustyFlowFactory" /></action>
    <action method="addJs"><file helper="module/getAdminhtmlUploaderInstance" /></action>
</reference>

Замените его moduleидентификатором вспомогательного класса, а в Data.phpвспомогательном модуле добавьте следующее:

protected function _isNoFlashUploader()
{
    return class_exists("Mage_Uploader_Block_Abstract");
}

public function getFlowMin()
{
    return $this->_isNoFlashUploader() ? "lib/uploader/flow.min.js" : null;
}

public function getFustyFlow()
{
    return $this->_isNoFlashUploader() ? "lib/uploader/fusty-flow.js" : null;
}

public function getFustyFlowFactory()
{
    return $this->_isNoFlashUploader() ? "lib/uploader/fusty-flow-factory.js" : null;
}

public function getAdminhtmlUploaderInstance()
{
    return $this->_isNoFlashUploader() ? "mage/adminhtml/uploader/instance.js" : null;
}
Рафаэль в цифровом пианизме
источник
1
также setUrlизменить с setTarget.
Qaisar Satti
Это работает для проблемы загрузки файла CSV на Magento 1.9.3.8. Большой!
Игорь Ревенко
3

добавив в ответ @Raphael вам нужно добавить три исправления

первое исправление

Spacename_Moduelname_Block_Adminhtml_Modulename_Edit_Tab_Images.php

protected $_uploaderType = 'uploader/multiple';
public function __construct()
{
    parent::__construct();
    $this->setTemplate('moduelname/gallery.phtml');
    ....
}
protected function _prepareLayout()
    {
 $this->setChild('uploader',
            $this->getLayout()->createBlock($this->_uploaderType)
        );

        $this->getUploader()->getUploaderConfig()
            ->setFileParameterName('image')
            ->setTarget(Mage::getModel('adminhtml/url')->addSessionParam()->getUrl('*/*/image'));

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

Второе исправление в adminhtml / по умолчанию / по умолчанию / имя_модуль / gallery.phtml файла

 <script type="text/javascript">
//<![CDATA[
var <?php echo $_block->getJsObjectName(); ?> = new Product.Gallery('<?php echo $_block->getHtmlId() ?>', <?php echo $_block->getImageTypesJson() ?>);
//]]>
</script>

третье исправление компоновки части js / module.xml

<reference name="head">
            <action method="addJs"><file>lib/uploader/flow.min.js</file></action>
            <action method="addJs"><file>lib/uploader/fusty-flow.js</file></action>
            <action method="addJs"><file>lib/uploader/fusty-flow-factory.js</file></action>
            <action method="addJs"><file>mage/adminhtml/uploader/instance.js</file></action>
</reference>

файлы для исправления ошибок

приложение первого исправления / код / ​​ядро ​​/ Mage / Adminhtml / блок / каталог / продукт / помощник / форма / галерея / Content.php

второе исправление app / design / adminhtml / default / default / template / catalog / product / helper / gallery.phtml

Кайсар Сатти
источник
Было бы очень полезно, если вы упомянете файлы для исправлений тоже.
Вики Дев
@VickyDev также добавил имя файла.
Кайсар Сатти
Спасибо за ответ, но это происходит в изображениях продуктов Core Magento, так где же мне нужно сделать первые два изменения? Magento ce 1.9.2.4 с установленным патчем 8788.
Вики Дев
1
Но я не вижу ссылки для перехода к дисплеям чата здесь.
Вики Дев
1
@QaisarSatti: я обновил свой код, чтобы он был совместим с 1.9.2 и 1.9.3;)
Рафаэль на Digital Pianism
2

Исправлено - проблема с загрузкой изображений после установки PATCH 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 + Delete) история очистить все данные просмотра из браузера, включая куки.

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

Рандхир Ядав
источник
0

Я сталкивался с той же проблемой 2. В моем случае это было вызвано перезаписью этого файла пользовательским модулем:

приложение / дизайн / adminhtml / по умолчанию / по умолчанию / шаблон / Каталог / продукта / помощник / gallery.phtml

Я бы посоветовал вам проверить, есть ли у вас аналогичный шаблон, перезаписывающий шаблон для этого блока, Mage_Adminhtml_Block_Catalog_Product_Helper_Form_Gallery_Contentи если это так, примените Supee-8788патч к файлу перезаписи.

philipj
источник