Problème dans le panneau d'administration après l'installation de SUPEE Patch 8788

9

J'ai Magento CE 1.9.2.4 installé avec les correctifs (5377, 1533, 4788, etc. presque tous les correctifs).

Cette question révèle également des problèmes qui peuvent / sûrement se produire dans n'importe quel module personnalisé impliquant des téléchargements d'images dans leurs sections personnalisées, plutôt que des problèmes de base avec Magento.

  1. Maintenant, après avoir installé le dernier correctif 8788 via la ligne de commande, je ne suis pas en mesure d'ouvrir la page "Ajouter / Modifier" de mon module personnalisé, qui fonctionnait bien avant l'installation 8788.

Je reçois une erreur ci-dessous lorsque j'essaie d'ouvrir la page "Ajouter une nouvelle bannière" de mon module:

Erreur fatale: appel à une fonction membre setUrl () sur un non-objet dans /home/site_user/public_html/app/code/community/My/Module/Block/Adminhtml/Banner/Add/Tab/Image.php sur la ligne 57

La ligne coupable est la suivante:

$this->getUploader()->getConfig()->setUrl(Mage::getModel('adminhtml/url')->addSessionParam()->getUrl('*/*/image'))
  1. De plus, je ne peux pas voir les images de produits déjà téléchargées dans la Catalog > Manage Products > Any product > Imagessection admin .

Vous trouverez ci-dessous la Mage_Adminhtml_Block_Media_Uploaderclasse principale appelée.

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

N'importe qui m'a fait savoir comment résoudre ce problème avec le moins de modifications de code possible.

Vicky Dev
la source
Pourriez-vous publier le contenu de la getUploaderméthode s'il vous plaît?
Raphael au Digital Pianism
Veuillez vérifier, mis à jour ma question.
Vicky Dev
3
Copie
Teja Bhagavan Kollepara
1
@TejabhagavanKollepara Veuillez vérifier les deux cas dans la question avant de la marquer hâtivement en double.
Vicky Dev
1
@VickyDev vient de le résoudre ici magento.stackexchange.com/questions/141775/…
Qaisar Satti

Réponses:

17

Mage_Adminhtml_Block_Media_Uploaderest déconseillé après SUPEE-8788 (et 1.9.3). Ainsi, il y a plusieurs changements d'incompatibilité en arrière qui cassent le module en utilisant l'uploader.

J'ai d'abord pensé qu'un petit changement le corrigerait mais il y a en fait beaucoup plus à faire.

Rendre un module utilisant la galerie compatible avec 1.9.2 et 1.9.3

Donc, si vous êtes un fournisseur de modules, vous ne voulez pas avoir deux versions différentes de votre module pour 1.9.2 et 1.9.3. Voici comment rendre votre code compatible avec les deux:

Dans votre _prepareLayoutméthode de blocage , vous devez effectuer les opérations suivantes:

Remplacer:

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

Avec:

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

Comme vous pouvez le voir, j'utilise class_existspour vérifier si SUPEE-8788 ou Magento 1.9.3 est appliqué.

Ensuite, dans votre, gallery.phtmlvous devez remplacer:

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

Avec:

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

Ensuite, pour le fichier de mise en page, vous pouvez le faire comme ceci:

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

Remplacez modulepar votre identifiant de classe d'assistance et dans votre Data.phpaide de module, ajoutez ce qui suit:

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 chez Digital Pianism
la source
1
setUrlchanger aussi avec setTarget.
Qaisar Satti,
Cela fonctionne pour le problème de téléchargement de fichiers csv sur Magento 1.9.3.8. Génial!
Igor Revenko
3

en ajoutant la réponse @Raphael, vous devez ajouter trois correctifs

premier correctif

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

Deuxième solution dans adminhtml / default / default / modulename / gallery.phtml fichier

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

troisième correction de la mise en page de la partie 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>

fichiers pour corriger la loaction

premier correctif app / code / core / Mage / Adminhtml / Block / Catalog / Product / Helper / Form / Gallery / Content.php

deuxième correctif app / design / adminhtml / default / default / template / catalogue / product / helper / gallery.phtml

Qaisar Satti
la source
Il serait très utile que vous mentionniez également les fichiers pour les correctifs.
Vicky Dev
@VickyDev a également ajouté le nom de fichier.
Qaisar Satti
Merci, pour votre réponse, mais cette chose se produit dans les images des produits Core Magento, alors où dois-je effectuer les deux premières modifications? Magento ce 1.9.2.4 avec le patch 8788 installé.
Vicky Dev
1
Mais je ne vois aucun lien pour passer aux affichages de discussion ici.
Vicky Dev
1
@QaisarSatti voyez que j'ai mis à jour mon code afin qu'il soit compatible avec 1.9.2 et 1.9.3;)
Raphael au Digital Pianism
2

Corrigé - Problème de téléchargement d'image après l'installation de PATCH 8788 de la version Magento CE 1.7.0.2 - 1.9.2.4.

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

Étape >> 1: Une fois le correctif de sécurité 8788 installé, accédez au panneau d'administration et videz tout le cache Magento . Déconnectez-vous ensuite de votre panneau d'administration et reconnectez-vous au panneau d'administration .

Étape >> 2: Accédez à la gestion des index et sélectionnez toutes les réindexations de toutes les données après avoir vidé à nouveau tout le cache Magento .

Étape >> 3: Cette étape très importante, Supprimer l'historique du cache de votre navigateur (Ctrl + Maj + Supprimer) efface toutes les données de navigation du navigateur, y compris les cookies.

Étape >> 4: Accédez au catalogue >> Gestion des produits, ajoutez une nouvelle image de n'importe quel produit, vous pouvez maintenant voir tout fonctionne correctement.

Randhir Yadav
la source
0

Je rencontrais le même cas de problème 2. Dans mon cas, il était dû au fait que ce fichier était écrasé par un module personnalisé:

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

Je vous suggère de vérifier si vous avez un modèle similaire remplaçant le modèle de ce bloc Mage_Adminhtml_Block_Catalog_Product_Helper_Form_Gallery_Contentet si c'est le cas, appliquez le Supee-8788correctif au fichier de remplacement.

philipj
la source