나는이 젠토 CE 1.9.2.4가 함께 설치 (5377,1533,4788 등 거의 모든 패치) 패치.
이 질문은 또한 핵심 magento 문제가 아닌 사용자 정의 섹션에 이미지 업로드와 관련된 모든 사용자 정의 모듈에서 발생할 수있는 문제를 보여줍니다.
- 이제 명령 줄을 통해 최신 패치 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'))
- 또한 관리자
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_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;
}
답변
@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
패치를 덮어 쓰기 파일에 적용 하십시오.