Masalah di Panel Admin setelah instalasi SUPEE Patch 8788

9

Saya memiliki Magento CE 1.9.2.4 diinstal bersama dengan tambalan (5377.1533.478 dll. Hampir semua tambalan).

Pertanyaan ini juga mengungkapkan masalah yang mungkin / pasti terjadi dalam modul khusus apa pun yang melibatkan unggahan Gambar di bagian khusus mereka, bukan hanya masalah inti magento.

  1. Sekarang setelah saya menginstal patch 8788 terbaru melalui command-line, saya tidak dapat membuka halaman "Tambah / Edit" pada modul kustom saya, yang berfungsi dengan baik sebelum instalasi 8788.

Saya mendapatkan kesalahan di bawah ini ketika saya mencoba membuka halaman "Tambahkan Banner Baru" dari modul saya:

Kesalahan fatal: Panggil ke fungsi anggota setUrl () pada non-objek di /home/site_user/public_html/app/code/community/My/Module/Block/Adminhtml/Banner/Add/Tab/Image.php di baris 57

Garis penyebabnya adalah sebagai berikut:

$this->getUploader()->getConfig()->setUrl(Mage::getModel('adminhtml/url')->addSessionParam()->getUrl('*/*/image'))
  1. Juga saya tidak dapat melihat gambar produk yang sudah diunggah di Catalog > Manage Products > Any product > Imagesbagian admin .

Di bawah ini adalah Mage_Adminhtml_Block_Media_Uploaderkelas inti yang dipanggil.

<?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 [email protected] 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 <[email protected]>
 */

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

Siapa pun beri tahu saya cara memperbaikinya dengan perubahan kode sesedikit mungkin.

Vicky Dev
sumber
Bisakah Anda memposting konten getUploadermetode ini?
Raphael di Digital Pianism
Silakan periksa, perbarui pertanyaan saya.
Vicky Dev
3
Kemungkinan duplikat Patch Keamanan SUPEE-8788 - Kemungkinan Masalah?
Teja Bhagavan Kollepara
1
@TejabhagavanKollepara Silakan periksa kedua kasus dalam pertanyaan sebelum dengan cepat menandainya duplikat.
Vicky Dev
1
@VickyDev baru saja menyelesaikannya di sini magento.stackexchange.com/questions/141775/…
Qaisar Satti

Jawaban:

17

Mage_Adminhtml_Block_Media_Uploadertidak digunakan lagi setelah SUPEE-8788 (dan 1.9.3). Dengan demikian ada beberapa perubahan inkompatibilitas mundur yang memecah modul menggunakan pengunggah.

Saya pertama kali berpikir perubahan kecil akan memperbaikinya tetapi sebenarnya ada lebih banyak yang harus dilakukan.

Buat modul menggunakan galeri yang kompatibel dengan 1.9.2 dan 1.9.3

Jadi, jika Anda penyedia modul, Anda tidak ingin memiliki dua versi modul yang berbeda untuk 1.9.2 dan 1.9.3. Berikut cara membuat kode Anda kompatibel dengan keduanya:

Dalam _prepareLayoutmetode blok Anda, Anda perlu melakukan hal berikut:

Menggantikan:

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

Dengan:

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

Seperti yang Anda lihat saya gunakan class_existsuntuk memeriksa apakah SUPEE-8788 atau Magento 1.9.3 diterapkan.

Kemudian di Anda, gallery.phtmlAnda perlu mengganti:

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

Dengan:

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

Kemudian untuk file tata letak, Anda dapat melakukannya seperti ini:

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

Ganti moduledengan pengidentifikasi kelas helper Anda dan di Data.phphelper modul Anda tambahkan berikut ini:

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 di Digital Pianism
sumber
1
juga setUrlberubah dengan setTarget.
Qaisar Satti
Ini berfungsi untuk masalah unggah file csv di Magento 1.9.3.8. Bagus!
Igor Revenko
3

menambahkan jawaban @Raphael Anda perlu menambahkan tiga perbaikan

perbaikan pertama

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

Kedua memperbaiki dalam adminhtml / default / default / modulename / gallery.phtml berkas

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

memperbaiki ketiga tata letak bagian 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>

file untuk memperbaiki loaction

perbaiki aplikasi / kode / inti / Mage / Adminhtml / Blok / Katalog / Produk / Pembantu / Formulir / Galeri / Content.php

aplikasi / desain / adminhtml / default / default / templat / katalog / produk / helper / gallery.phtml perbaikan kedua

Qaisar Satti
sumber
Akan sangat membantu, jika Anda menyebutkan file untuk perbaikan juga.
Vicky Dev
@VickyDev menambahkan nama file juga.
Qaisar Satti
Terima kasih, atas jawaban Anda, tetapi hal ini terjadi pada gambar produk Core Magento, jadi di mana saya harus melakukan dua perubahan pertama? Magento ce 1.9.2.4 dengan patch 8788 diinstal.
Vicky Dev
1
Tapi saya tidak melihat tautan untuk pindah ke tampilan obrolan di sini.
Vicky Dev
1
@QaisarSatti lihat saya telah memperbarui kode saya sehingga kompatibel dengan 1.9.2 dan 1.9.3;)
Raphael di Digital Pianism
2

Memperbaiki - Masalah Pengunggahan Gambar setelah PATCH 8788 menginstal Magento versi CE 1.7.0.2 - 1.9.2.4.

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

Langkah >> 1: Setelah berhasil menginstal patch keamanan 8788, silakan buka panel admin dan siram semua cache Magento . Kemudian Logout Panel Admin Anda dan Relogin ke Panel Admin .

Langkah >> 2: Buka Manajemen Indeks dan pilih semua indeks ulang semua data setelah menghapus semua cache Magento sekali lagi .

Langkah >> 3: Langkah yang sangat Penting ini, Hapus cache browser Anda (Ctrl + shift + Delete) riwayat hapus semua data penelusuran dari browser termasuk cookie.

Langkah >> 4: Buka Katalog >> Manajemen Produk, tambahkan gambar baru dari produk apa pun, sekarang Anda dapat melihat semuanya berfungsi dengan baik.

Randhir Yadav
sumber
0

Saya mengalami kasus Masalah Anda yang sama 2. Dalam kasus saya itu disebabkan oleh file ini ditimpa oleh modul khusus:

app / design / adminhtml / default / default / template / katalog / produk / helper / gallery.phtml

Saya sarankan Anda memeriksa untuk melihat apakah Anda memiliki template yang mirip menimpa template untuk blok itu Mage_Adminhtml_Block_Catalog_Product_Helper_Form_Gallery_Contentdan jika itu masalahnya, terapkan Supee-8788tambalan ke file overwriting.

philipj
sumber