Problem im Admin-Bereich nach der Installation von SUPEE Patch 8788

9

Ich habe Magento CE 1.9.2.4 zusammen mit Patches installiert (5377,1533,4788 usw. fast alle Patches).

Diese Frage enthüllt auch Probleme, die in jedem benutzerdefinierten Modul auftreten können, bei dem Bild-Uploads in ihren benutzerdefinierten Abschnitten durchgeführt werden, und nicht nur Kernprobleme mit Magento.

  1. Nachdem ich den neuesten Patch 8788 über die Befehlszeile installiert habe, kann ich die Seite "Hinzufügen / Bearbeiten" meines benutzerdefinierten Moduls nicht öffnen, was vor der Installation von 8788 einwandfrei funktioniert hat.

Beim Versuch, die Seite "Neues Banner hinzufügen" meines Moduls zu öffnen, wird folgende Fehlermeldung angezeigt:

Schwerwiegender Fehler: Aufruf einer Mitgliedsfunktion setUrl () für ein Nichtobjekt in /home/site_user/public_html/app/code/community/My/Module/Block/Adminhtml/Banner/Add/Tab/Image.php in Zeile 57

Die Täterlinie ist wie folgt:

$this->getUploader()->getConfig()->setUrl(Mage::getModel('adminhtml/url')->addSessionParam()->getUrl('*/*/image'))
  1. Außerdem kann ich bereits hochgeladene Produktbilder im Admin- Catalog > Manage Products > Any product > ImagesBereich nicht sehen .

Unten ist die Kernklasse Mage_Adminhtml_Block_Media_Uploader, die aufgerufen wird.

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

Jeder ließ mich wissen, wie dies mit möglichst geringen Codeänderungen behoben werden kann.

Vicky Dev
quelle
Könnten Sie getUploaderbitte den Inhalt der Methode posten ?
Raphael bei Digital Pianism
Bitte überprüfen Sie, aktualisiert meine Frage.
Vicky Dev
3
Mögliches Duplikat des Sicherheitspatches SUPEE-8788 - Mögliche Probleme?
Teja Bhagavan Kollepara
1
@TejabhagavanKollepara Bitte überprüfen Sie beide Fälle in der Frage, bevor Sie sie hastig als Duplikat markieren.
Vicky Dev
1
@ VickyDev hat es gerade hier gelöst magento.stackexchange.com/questions/141775/…
Qaisar Satti

Antworten:

17

Mage_Adminhtml_Block_Media_Uploaderist nach SUPEE-8788 (und 1.9.3) veraltet. Daher gibt es mehrere Änderungen der Abwärtsinkompatibilität, die das Modul mithilfe des Uploaders beschädigen.

Ich dachte zuerst, eine kleine Änderung würde das Problem beheben, aber es gibt tatsächlich noch viel mehr zu tun.

Machen Sie ein Modul mit der Galerie kompatibel mit 1.9.2 und 1.9.3

Wenn Sie also ein Modulanbieter sind, möchten Sie nicht zwei verschiedene Versionen Ihres Moduls für 1.9.2 und 1.9.3 haben. So machen Sie Ihren Code mit beiden kompatibel:

In Ihrer Blockmethode _prepareLayoutmüssen Sie Folgendes tun:

Ersetzen:

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

Mit:

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

Wie Sie sehen class_exists, überprüfe ich mit , ob SUPEE-8788 oder Magento 1.9.3 angewendet wird.

Dann müssen Sie in Ihrem gallery.phtmlersetzen:

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

Mit:

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

Dann können Sie für die Layoutdatei Folgendes tun:

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

Ersetzen Sie moduledurch Ihre Helferklassen-ID und Data.phpfügen Sie in Ihrem Modulhelfer Folgendes hinzu:

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 beim digitalen Pianismus
quelle
1
auch setUrländern mit setTarget.
Qaisar Satti
Es funktioniert bei Problemen mit dem Hochladen von CSV-Dateien unter Magento 1.9.3.8. Toll!
Igor Revenko
3

Wenn Sie die @ Raphael-Antwort hinzufügen, müssen Sie drei Korrekturen hinzufügen

erste Lösung

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

Zweites Update in adminhtml / default / default / Modulname / gallery.phtml Datei

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

drittens das js part layout / module.xml reparieren

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

Dateien, um Loaction zu beheben

Fix zuerst app / code / core / Mage / Adminhtml / Block / Katalog / Produkt / Helfer / Formular / Galerie / Content.php

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

Qaisar Satti
quelle
Es wäre sehr hilfreich, wenn Sie auch die Dateien für Korrekturen erwähnen würden.
Vicky Dev
@ VickyDev hat auch den Dateinamen hinzugefügt.
Qaisar Satti
Vielen Dank für Ihre Antwort, aber dieses Problem tritt in Core Magento-Produktabbildern auf. Wo muss ich also die ersten beiden Änderungen vornehmen? Magento ce 1.9.2.4 mit installiertem Patch 8788.
Vicky Dev
1
Ich sehe hier jedoch keinen Link zum Wechseln zu Chat-Anzeigen.
Vicky Dev
1
@ QaisarSatti siehe, ich habe meinen Code aktualisiert, so dass er sowohl mit 1.9.2 als auch mit 1.9.3 kompatibel ist;)
Raphael bei Digital Pianism
2

Behoben - Image Upload Problem nach PATCH 8788 Installation von Magento Version CE 1.7.0.2 - 1.9.2.4.

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

Schritt >> 1: Nachdem der Sicherheitspatch 8788 erfolgreich installiert wurde, gehen Sie zum Admin-Bereich und leeren Sie den gesamten Magento-Cache . Melden Sie sich dann von Ihrem Admin-Bereich ab und melden Sie sich erneut beim Admin-Bereich an .

Schritt >> 2: Gehen Sie zur Indexverwaltung und wählen Sie alle Daten neu aus, nachdem Sie den gesamten Magento-Cache erneut geleert haben .

Schritt >> 3: Dieser sehr wichtige Schritt: Löschen Sie den Verlauf Ihres Browser-Cache (Strg + Umschalt + Löschen). Löschen Sie alle Browserdaten aus dem Browser, einschließlich Cookies.

Schritt >> 4: Gehen Sie zu Katalog >> Produktmanagement und fügen Sie ein neues Image eines Produkts hinzu. Jetzt können Sie sehen, dass alles einwandfrei funktioniert.

Randhir Yadav
quelle
0

Ich hatte denselben Problemfall 2. In meinem Fall wurde dies dadurch verursacht, dass diese Datei von einem benutzerdefinierten Modul überschrieben wurde:

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

Ich würde vorschlagen, dass Sie überprüfen, ob eine ähnliche Vorlage die Vorlage für diesen Block überschreibt. Mage_Adminhtml_Block_Catalog_Product_Helper_Form_Gallery_ContentWenn dies der Fall ist, wenden Sie den Supee-8788Patch auf die Überschreibungsdatei an.

philipj
quelle