Випуск на панелі адміністратора після встановлення 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методу, будь ласка?
Рафаель у цифровому піанізмі

Перевірте, оновило моє запитання.
Вікі Дев


1
@TejabhagavanKollepara Будь ласка, перевірте обидва випадки у питанні, перш ніж поспішно позначити його дублікатом.
Вікі Дев

1
@VickyDev щойно вирішив це тут magento.stackexchange.com/questions/141775/…
Qaisar Satti

Відповіді:


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>

файли для виправлення дії

перше виправлення програми / код / ​​core / Mage / Adminhtml / Блок / Каталог / Продукт / Помічник / Форма / Галерея / Content.php

друга програма виправлення / дизайн / adminhtml / за замовчуванням / за замовчуванням / шаблон / каталог / продукт / помічник / gallery.phtml


Було б дуже корисно, якщо ви також згадуєте файли для виправлень.
Вікі Дев

@VickyDev також додав ім'я файлу.
Qaisar Satti

Дякую, ви відповідаєте, але ця річ відбувається в образах продуктів 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), очистіть усі дані веб-переглядачів із браузера, включаючи файли cookie.

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


0

У мене виник ваш той самий випадок випуску 2. У моєму випадку це було спричинено тим, що цей файл був перезаписаний спеціальним модулем:

app / design / adminhtml / default / default / шаблон / каталог / продукт / helper / gallery.phtml

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.