ปัญหาในแผงการดูแลระบบหลังจากการติดตั้ง SUPEE Patch 8788


9

ฉันมีMagento CE 1.9.2.4ติดตั้งพร้อมกับแพทช์ (5377,1533,4788 ฯลฯ แพทช์เกือบทั้งหมด)

คำถามนี้ยังแสดงให้เห็นถึงปัญหาที่อาจเกิดขึ้น / แน่นอนในโมดูลที่กำหนดเองใด ๆ ที่เกี่ยวข้องกับการอัปโหลดภาพในส่วนที่กำหนดเองของพวกเขามากกว่าปัญหาวีโอไอพีหลัก

  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วิธีการได้ไหม?
Raphael ที่ Digital Pianism

โปรดตรวจสอบอัปเดตคำถามของฉัน
Vicky Dev


1
@TejabhagavanKollepara โปรดตรวจสอบทั้งสองกรณีในคำถามก่อนที่จะทำเครื่องหมายอย่างเร่งด่วนซ้ำ
Vicky Dev

1
@VickyDev เพิ่งแก้ไขได้ที่นี่magento.stackexchange.com/questions/141775/…
Qaisar

คำตอบ:


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 ที่ดี!
Igor Revenko

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 ส่วนเค้าโครง / 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>

ไฟล์เพื่อแก้ไข loaction

แอปแก้ไขแรก / รหัส / core / ผู้วิเศษ / ผู้ดูแลระบบ / บล็อก / แคตตาล็อก / สินค้า / ผู้ช่วย / แบบฟอร์ม / แกลลอรี่ / Content.php

แอปแก้ไขที่สอง / การออกแบบ / ผู้ดูแลระบบ / ค่าเริ่มต้น / ค่าเริ่มต้น / แม่แบบ / แคตตาล็อก / ผลิตภัณฑ์ / ผู้ช่วย / gallery.phtml


มันจะมีประโยชน์จริง ๆ ถ้าคุณพูดถึงไฟล์สำหรับการแก้ไขด้วย
Vicky Dev

@VickyDev เพิ่มชื่อไฟล์ด้วย
Qaisar Satti

ขอบคุณสำหรับคำตอบของคุณ แต่สิ่งนี้เกิดขึ้นในอิมเมจของผลิตภัณฑ์ Core Magento ฉันจะต้องทำการเปลี่ยนแปลงสองอย่างแรกที่ไหน Magento ce 1.9.2.4 พร้อมโปรแกรมติดตั้ง 8788
Vicky Dev

1
แต่ฉันไม่เห็นลิงก์สำหรับการย้ายไปยังการแชทเลย
Vicky Dev

1
@QaisarSatti ดูว่าฉันได้อัปเดตโค้ดของฉันแล้วมันเข้ากันได้กับทั้ง 1.9.2 และ 1.9.3;)
Raphael ที่ 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 เสร็จเรียบร้อยแล้วกรุณาไปที่แผง admin และล้างทั้งหมดแคชวีโอไอพี จากนั้นออกจากระบบแผงผู้ดูแลระบบของคุณและเชื่อมต่อกับแผงผู้ดูแลระบบอีกครั้ง

ขั้นตอนที่ >> 2: ไปที่การจัดการดัชนีและเลือกทั้งหมดReindex ข้อมูลทั้งหมดหลังจากล้างทั้งหมดแคชวีโอไอพีอีกครั้ง

ขั้นตอน >> 3: ขั้นตอนสำคัญมากนี้ ลบประวัติเบราว์เซอร์ของคุณ (Ctrl + shift + Delete) ล้างข้อมูลการท่องเว็บทั้งหมดจากเบราว์เซอร์รวมถึงคุกกี้

ขั้นตอน >> 4: ไปที่แคตตาล็อก >> การจัดการผลิตภัณฑ์เพิ่มภาพใหม่ของผลิตภัณฑ์ใด ๆ ตอนนี้คุณสามารถเห็นทุกอย่างทำงานได้ดี


0

ฉันกำลังประสบปัญหาฉบับเดียวกันของคุณ 2 ในกรณีของฉันมันเกิดจากไฟล์นี้ถูกเขียนทับโดยโมดูลที่กำหนดเอง:

app / ออกแบบ / adminhtml / default / default / แม่แบบ / แคตตาล็อกสินค้า / / ผู้ช่วย / gallery.phtml

ฉันขอแนะนำให้คุณตรวจสอบเพื่อดูว่าคุณมีเทมเพลตที่คล้ายกันเขียนทับเทมเพลตสำหรับบล็อกนั้นหรือไม่Mage_Adminhtml_Block_Catalog_Product_Helper_Form_Gallery_Contentและถ้าเป็นเช่นนั้นให้ใช้ตัวSupee-8788ปะแก้กับไฟล์เขียนทับ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.