安装SUPEE补丁8788后在管理面板中出现问题


9

我已经安装了Magento CE 1.9.2.4补丁程序(5377、1533、4788等几乎所有补丁程序)。

该问题还揭示了在自定义部分中涉及图像上传的任何自定义模块中可能/肯定发生的问题,而不仅仅是核心的magento问题。

  1. 现在,我通过命令行安装了最新的补丁8788之后,无法打开自定义模块的“添加/编辑”页面,该页面在8788安装之前运行良好。

当我尝试打开模块的“添加新横幅”页面时,出现以下错误:

致命错误:在第57行的/home/site_user/public_html/app/code/community/My/Module/Block/Adminhtml/Banner/Add/Tab/Image.php中的非对象上,调用成员函数setUrl()

罪魁祸首如下:

$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方法的内容吗?
拉斐尔(Raphael)在

请检查,更新了我的问题。
Vicky Dev


1
@TejabhagavanKollepara在匆匆将其标记为重复之前,请检查问题中的两种情况。
Vicky Dev

Answers:


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

它适用于Magento 1.9.3.8上的csv文件上传问题。大!
伊戈尔·雷文科

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 / default / default / modulename / 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部分layout / 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>

修复位置文件

首先修复 app / code / core / Mage / Adminhtml / Block / Catalog / Product / Helper / Form / Gallery / Content.php

第二个修复 程序app / design / adminhtml / default / default / template / catalog / product / helper / gallery.phtml


如果您也提及修复文件,那将非常有帮助。
Vicky Dev

@VickyDev也添加了文件名。
卡萨尔·萨蒂

谢谢您的回答,但是Core Magento产品图片中会出现这种情况,那么我需要在哪里进行前两个更改?安装了补丁8788的Magento ce 1.9.2.4。
Vicky Dev

1
但我在此处看不到任何链接以转到聊天显示。
Vicky Dev

1
@QaisarSatti,我已经更新了代码,使其与1.9.2和1.9.3兼容;)
Raphael在Digital Pianism

2

已修复-在安装Magento CE 1.7.0.2-1.9.2.4的PATCH 8788后出现图像上传问题。

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 / template / catalog / product / helper / gallery.phtml

我建议您检查一下是否有类似的模板覆盖该块的模板Mage_Adminhtml_Block_Catalog_Product_Helper_Form_Gallery_Content,如果是这种情况,请将Supee-8788补丁应用于覆盖文件。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.