Sự cố trong Bảng quản trị sau khi cài đặt SUPEE Patch 8788


9

Tôi đã cài đặt Magento CE 1.9.2.4 cùng với các bản vá (5377,1533,4788, v.v. gần như tất cả các bản vá).

Câu hỏi này cũng cho thấy các vấn đề có thể / chắc chắn xảy ra trong bất kỳ mô-đun tùy chỉnh nào liên quan đến tải lên hình ảnh trong các phần tùy chỉnh của họ, thay vì chỉ các vấn đề magento cốt lõi.

  1. Bây giờ sau khi tôi cài đặt bản vá 8788 mới nhất thông qua dòng lệnh, tôi không thể mở trang "Thêm / Chỉnh sửa" của mô-đun tùy chỉnh của mình, hoạt động tốt trước khi cài đặt 8788.

Tôi gặp lỗi dưới đây khi tôi cố mở trang "Thêm biểu ngữ mới" trong mô-đun của mình:

Lỗi nghiêm trọng: Gọi tới hàm thành viên setUrl () trên một đối tượng không trong /home/site_user/public_html/app/code/community/My/Module/Block/Adminhtml/Banner/Add/Tab/Image.php trên dòng 57

Đường dây thủ phạm như sau:

$this->getUploader()->getConfig()->setUrl(Mage::getModel('adminhtml/url')->addSessionParam()->getUrl('*/*/image'))
  1. Ngoài ra tôi không thể xem hình ảnh sản phẩm đã tải lên trong Catalog > Manage Products > Any product > Imagesphần quản trị .

Dưới đây là Mage_Adminhtml_Block_Media_Uploaderlớp cốt lõi được gọi.

<?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');
    }
}

Bất cứ ai cho tôi biết làm thế nào để sửa lỗi này với ít thay đổi mã nhất có thể.


Bạn có thể gửi nội dung của getUploaderphương pháp xin vui lòng?
Raphael tại Nghệ thuật piano kỹ thuật số

Vui lòng kiểm tra, cập nhật câu hỏi của tôi.
Vicky Dev


1
@TejabhagavanKollepara Vui lòng kiểm tra cả hai trường hợp trong câu hỏi trước khi vội vàng đánh dấu nó trùng lặp.
Vicky Dev

1
@VickyDev chỉ giải quyết nó đây magento.stackexchange.com/questions/141775/...
Qaisar Satti

Câu trả lời:


17

Mage_Adminhtml_Block_Media_Uploaderkhông được chấp nhận sau SUPEE-8788 (và 1.9.3). Do đó, có một số thay đổi không tương thích ngược làm hỏng mô-đun bằng trình tải lên.

Đầu tiên tôi nghĩ rằng một thay đổi nhỏ sẽ khắc phục nó nhưng thực sự có nhiều cách để làm hơn.

Tạo mô-đun bằng thư viện tương thích với 1.9.2 và 1.9.3

Vì vậy, nếu bạn là nhà cung cấp mô-đun, bạn không muốn có hai phiên bản mô-đun khác nhau cho 1.9.2 và 1.9.3. Đây là cách làm cho mã của bạn tương thích với cả hai:

Trong _prepareLayoutphương pháp khối của bạn, bạn cần làm như sau:

Thay thế:

 $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')
                )
            ));

Với:

    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')
                )
            ));
    }

Như bạn có thể thấy tôi đang sử dụng class_existsđể kiểm tra xem SUPEE-8788 hay Magento 1.9.3 có được áp dụng hay không.

Sau đó, trong gallery.phtmlbạn cần phải thay thế:

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() ?>);

Với:

<?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; ?>

Sau đó, đối với tệp bố cục, bạn có thể làm như thế này:

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

Thay thế modulebằng mã định danh lớp người trợ giúp và trong trình Data.phptrợ giúp mô-đun của bạn thêm vào như sau:

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
cũng setUrlthay đổi với setTarget.
Qaisar Satti

Nó hoạt động cho vấn đề tải lên tệp csv trên Magento 1.9.3.8. Tuyệt quá!
Igor Earnko

3

thêm vào câu trả lời @Raphael, bạn cần thêm ba bản sửa lỗi

sửa chữa đầu tiên

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();
    }

Sửa chữa thứ hai trong adminhtml / default / default / môđun / gallery.phtml tập tin

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

thứ ba sửa chữa bố cục phần 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>

tập tin để sửa lỗi

lần đầu tiên sửa ứng dụng / mã / lõi / Pháp sư / adminhtml / Khối / Danh mục / Sản phẩm / Người trợ giúp / Biểu mẫu / Thư viện / Nội dung.php

ứng dụng sửa lỗi thứ hai / thiết kế / adminhtml / default / default / template / catalog / sản phẩm / helper / gallery.phtml


Nó sẽ thực sự hữu ích, nếu bạn đề cập đến các tập tin để sửa lỗi quá.
Vicky Dev

@VickyDev cũng đã thêm tên tệp.
Qaisar Satti

Cảm ơn, vì bạn đã trả lời, nhưng điều này xảy ra trong hình ảnh sản phẩm Core Magento, vậy tôi cần thực hiện hai thay đổi đầu tiên ở đâu? Magento ce 1.9.2.4 với bản vá 8788 được cài đặt.
Vicky Dev

1
Nhưng tôi thấy không có liên kết để chuyển sang hiển thị trò chuyện ở đây.
Vicky Dev

1
@QaisarSatti thấy tôi đã cập nhật mã của mình để nó tương thích với cả 1.9.2 và 1.9.3;)
Raphael tại Digital Pianism

2

Đã sửa lỗi - Sự cố tải lên hình ảnh sau khi cài đặt PATCH 8788 của phiên bản Magento CE 1.7.0.2 - 1.9.2.4.

I was able to fix it,Please Follow following instruction.

Bước >> 1: Sau khi cài đặt bản vá bảo mật 8788 thành công, vui lòng truy cập bảng quản trị và xóa tất cả bộ đệm Magento . Sau đó Đăng xuất Bảng quản trị của bạnRelogin vào Bảng quản trị .

Bước >> 2: Chuyển đến Quản lý chỉ mục và chọn tất cả reindex tất cả dữ liệu sau khi xóa tất cả bộ đệm Magento một lần nữa .

Bước >> 3: Bước rất quan trọng này, Xóa lịch sử bộ đệm của trình duyệt (Ctrl + shift + Xóa) xóa tất cả dữ liệu duyệt web khỏi trình duyệt bao gồm cookie.

Bước >> 4: Chuyển đến Danh mục >> Quản lý sản phẩm, thêm hình ảnh mới của bất kỳ sản phẩm nào, bây giờ bạn có thể thấy mọi thứ hoạt động tốt.


0

Tôi đã gặp trường hợp Vấn đề tương tự của bạn 2. Trong trường hợp của tôi, nguyên nhân là do tệp này bị ghi đè bởi một mô-đun tùy chỉnh:

ứng dụng / thiết kế / adminhtml / default / default / template / catalog / sản phẩm / helper / gallery.phtml

Tôi sẽ đề nghị bạn kiểm tra xem nếu bạn có một mẫu tương tự ghi đè lên mẫu cho khối đó Mage_Adminhtml_Block_Catalog_Product_Helper_Form_Gallery_Contentvà nếu đó là trường hợp, hãy áp dụng Supee-8788bản vá cho tệp ghi đè.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.