SUPEE Patch 8788 설치 후 관리자 패널에서 문제 추가”페이지를 열려고하면 아래와 같은 오류가

나는이 젠토 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');
    }
}

누구나 가능한 한 최소한의 코드 변경 으로이 문제를 해결하는 방법을 알려주십시오 .



답변

Mage_Adminhtml_Block_Media_UploaderSUPEE-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_existsSUPEE-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;
}

답변

@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 part 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>

로션 수정을위한 파일

첫 번째 수정
앱 / 코드 / 코어 / 마법사 / Adminhtml / 블록 / 카탈로그 / 제품 / 도우미 / 양식 / 갤러리 /Content.php

두 번째 수정
앱 /design/adminhtml/default/default/template/catalog/product/helper/gallery.phtml


답변

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 단계 : 2 : 색인 관리로 이동하여 모든 Magento 캐시를 다시 한 번 플러시 한 후 모든 데이터 재 색인을 선택 하십시오 .

단계 >> 3 : 이 매우 중요한 단계는, 브라우저 캐시를 삭제합니다 (Ctrl + 이동 + 삭제) 역사는 쿠키를 포함한 브라우저에서 모든 인터넷 사용 기록을 취소합니다.

4 단계 : 4 : 카탈로그 >> 제품 관리로 이동하여 제품의 새 이미지를 추가하면 모든 것이 제대로 작동하는 것을 볼 수 있습니다.


답변

동일한 문제 사례 2가 발생했습니다. 제 경우에는이 파일이 사용자 지정 모듈로 덮어 써서 발생했습니다.

app / design / adminhtml / default / default / template / catalog / product / helper / gallery.phtml

해당 블록의 템플릿을 덮어 쓰는 유사한 템플릿이 있는지 확인하고이 Mage_Adminhtml_Block_Catalog_Product_Helper_Form_Gallery_Content경우 Supee-8788패치를 덮어 쓰기 파일에 적용 하십시오.