Problema en el Panel de administración después de la instalación del SUPEE Patch 8788

9

Tengo instalado Magento CE 1.9.2.4 junto con parches (5377,1533,4788, etc., casi todos los parches).

Esta pregunta también revela problemas que pueden ocurrir / seguramente en cualquier módulo personalizado que involucre cargas de imágenes en sus secciones personalizadas, en lugar de solo problemas centrales de magento.

  1. Ahora, después de instalar el último parche 8788 a través de la línea de comandos, no puedo abrir la página "Agregar / Editar" de mi módulo personalizado, que funcionaba bien antes de la instalación de 8788.

Recibo el siguiente error cuando intento abrir la página "Agregar nuevo banner" de mi módulo:

Error fatal: Llamar a una función miembro setUrl () en un no objeto en /home/site_user/public_html/app/code/community/My/Module/Block/Adminhtml/Banner/Add/Tab/Image.php en la línea 57

La línea del culpable es la siguiente:

$this->getUploader()->getConfig()->setUrl(Mage::getModel('adminhtml/url')->addSessionParam()->getUrl('*/*/image'))
  1. Además, no puedo ver imágenes de productos ya cargadas en la Catalog > Manage Products > Any product > Imagessección de administración .

A continuación se muestra la Mage_Adminhtml_Block_Media_Uploaderclase principal que se llama.

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

Alguien me dejó saber cómo solucionar esto con el menor cambio de código posible.

Vicky Dev
fuente
¿Podría publicar el contenido del getUploadermétodo por favor?
Raphael en Digital Pianism
Por favor verifique, actualizó mi pregunta.
Vicky Dev
3
Posible duplicado del parche
Teja Bhagavan Kollepara
1
@TejabhagavanKollepara Verifique ambos casos en la pregunta antes de marcarla rápidamente como duplicada.
Vicky Dev
1
@VickyDev acaba de resolverlo aquí magento.stackexchange.com/questions/141775/…
Qaisar Satti el

Respuestas:

17

Mage_Adminhtml_Block_Media_Uploaderestá en desuso después de SUPEE-8788 (y 1.9.3). Por lo tanto, hay varios cambios de incompatibilidad hacia atrás que rompen el módulo utilizando el cargador.

Primero pensé que un pequeño cambio lo arreglaría, pero en realidad hay mucho más por hacer.

Hacer un módulo usando la galería compatible con 1.9.2 y 1.9.3

Entonces, si es un proveedor de módulos, no desea tener dos versiones diferentes de su módulo para 1.9.2 y 1.9.3. Aquí le mostramos cómo hacer que su código sea compatible con ambos:

En su _prepareLayoutmétodo de bloqueo , debe hacer lo siguiente:

Reemplazar:

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

Con:

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

Como puede ver, estoy usando class_existspara verificar si se aplica SUPEE-8788 o Magento 1.9.3.

Luego, en su gallery.phtmlnecesita reemplazar:

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

Con:

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

Luego, para el archivo de diseño, puede hacerlo así:

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

Reemplace modulecon su identificador de clase auxiliar y en su Data.phpauxiliar de módulo agregue lo siguiente:

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 en Digital Pianism
fuente
1
también setUrlcambia con setTarget.
Qaisar Satti
Funciona para el problema de carga de archivos CSV en Magento 1.9.3.8. ¡Excelente!
Igor Revenko
3

agregando @Raphael answer necesita agregar tres correcciones

primer arreglo

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

En segundo lugar fijo en adminhtml / default / default / modulename / gallery.phtml archivo

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

tercero arregle el diseño de la parte 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>

archivos para arreglar loaction

primer arreglo / code / core / Mage / Adminhtml / Block / Catalog / Product / Helper / Form / Gallery / Content.php

aplicación de segundo arreglo / design / adminhtml / default / default / template / catalog / product / helper / gallery.phtml

Qaisar Satti
fuente
Sería realmente útil, si menciona los archivos para las correcciones también.
Vicky Dev
@VickyDev también agregó el nombre del archivo.
Qaisar Satti
Gracias por su respuesta, pero esto ocurre en las imágenes del producto Core Magento, entonces, ¿dónde necesito hacer los primeros dos cambios? Magento ce 1.9.2.4 con el parche 8788 instalado.
Vicky Dev
1
Pero no veo ningún enlace para pasar a las pantallas de chat aquí.
Vicky Dev
1
@QaisarSatti veo que he actualizado mi código para que sea compatible con 1.9.2 y 1.9.3;)
Raphael en Digital Pianism
2

Solucionado - Problema de carga de imagen después de la instalación de PATCH 8788 de Magento versión CE 1.7.0.2 - 1.9.2.4.

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

Paso >> 1: Después de instalar el parche de seguridad 8788 con éxito, vaya al panel de administración y vacíe todo el caché de Magento . Luego, cierre sesión en su Panel de administración y vuelva a iniciar sesión en el Panel de administración .

Paso >> 2: Vaya a Administración de índices y seleccione reindexar todos los datos después de vaciar todo el caché de Magento una vez más .

Paso >> 3: Este paso muy importante, Eliminar el historial de caché del navegador (Ctrl + shift + Eliminar) borra todos los datos de navegación del navegador, incluidas las cookies.

Paso >> 4: Vaya al Catálogo >> Gestión de productos, agregue una nueva imagen de cualquier producto, ahora puede ver que todo funciona bien.

Randhir Yadav
fuente
0

Estaba experimentando el mismo Caso de problema 2. En mi caso, fue causado por la sobrescritura de este archivo por un módulo personalizado:

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

Le sugiero que verifique si tiene una plantilla similar que sobrescribe la plantilla para ese bloque Mage_Adminhtml_Block_Catalog_Product_Helper_Form_Gallery_Contenty, si ese es el caso, aplique el Supee-8788parche al archivo de sobrescritura.

philipj
fuente