Directiva de imagen de medios WYSIWYG de Magento 2 utilizando la URL de administrador


15

¿Por qué está magento 2 creando directivas para imágenes de medios usando la URL del administrador?

por ejemplo, cuando agrego una imagen en la página de categoría WYSIWYG, agrega

<img src="{{media url="wysiwyg/image.jpg"}}" alt="" />

pero luego magento lo analiza para frontend y es así

<img src="https://domain.co.uk/admin/cms/wysiwyg/directive/___directive/e3ttZWRpYSB1cmw9Ind5c2l3eWcvQ29udmV5b3JfYmVsdHNfZmFzdF9kZWxpdmVyeS5qcGcifX0,/key/b67d0a8069ef28a8443e0bad6d912512704213d60e1d9021b1ec2b9dd34bf390/" alt="">

porque se vincula al administrador, la única forma en que se cargará en el navegador es si ha iniciado sesión en el administrador. Esto también plantea un problema de seguridad porque está revelando la ruta del administrador en la interfaz.

Miré en vendor / magento / module-cms / Helper // Wysiwyg / images.php y parece que la función getImageHtmlDeclaration () genera esto

   public function getImageHtmlDeclaration($filename, $renderAsTag = false)
    {
        $fileurl = $this->getCurrentUrl() . $filename;
        $mediaUrl = $this->_storeManager->getStore()->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA);
        $mediaPath = str_replace($mediaUrl, '', $fileurl);
        $directive = sprintf('{{media url="%s"}}', $mediaPath);
        if ($renderAsTag) {
            $html = sprintf('<img src="%s" alt="" />', $this->isUsingStaticUrlsAllowed() ? $fileurl : $directive);
        } else {
            if ($this->isUsingStaticUrlsAllowed()) {
                $html = $fileurl; // $mediaPath;
            } else {
                $directive = $this->urlEncoder->encode($directive);
                $html = $this->_backendData->getUrl('cms/wysiwyg/directive', ['___directive' => $directive]);
            }
        }
        return $html;
    }

Traté de usar URL estáticas para los medios, pero todavía no lo uso, así que lo único que puedo pensar es editar esta función para usar la URL de frontend en lugar de backend / admin

cualquier ayuda en esto sería muy apreciada :)


Las imágenes en el editor wysiwyg parecen usar las URL 'admin / cms / wysiwyg / directive' cuando mira las etiquetas en la ventana 'Editar fuente HTML', pero en la interfaz debería ver un 'pub / static / wysiwyg / 'URL para esas mismas imágenes.
Aaron Allen

la directiva admin / cms / wysiwyg / está en la interfaz de mi instalación de magento 2
Steve B

Estoy enfrentando el mismo problema. Magento 2.1.2 WYSIWYG también está creando URL de administrador para imágenes para mí.
Ejaz

¿Alguna noticia sobre esto?
simonthesorcerer

2
Después de muchas horas en esta última noche, la mejor recomendación (ciertamente no es una solución) es hacer clic en el botón "Mostrar / Ocultar editor" antes de guardar. Al desactivar el editor WYSIWYG, Magento convertirá la dirección URL de la directiva al {{media url="wysiwyg/some-image.jpg"}}formato que esperamos en Magento
Darren Felton

Respuestas:


8

Este es un error conocido que todavía está presente en CE 2.1.5.

La solución conocida es agregar 'add_directives' => truea la getConfigfunción de vendor/magento/module-cms/Model/Wysiwyg/Config.php.

La mejor manera de hacerlo es escribir un interceptor .

  1. En el etc/di.xmlarchivo de la extensión Magento 2 personalizada :

    <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
      <type name="Magento\Cms\Model\Wysiwyg\Config">
       <plugin name="add_wysiwyg_data" type="Vendor\Module\Plugin\WysiwygConfig" sortOrder="30" />
      </type>
    </config>
  2. Vendor\Module\Plugin\WysiwygConfig.php:

    namespace Vendor\Module\Plugin;
    
    class WysiwygConfig
    {
     public function afterGetConfig($subject, \Magento\Framework\DataObject $config)
     {
       $config->addData([
        'add_directives' => true,
       ]);
    
       return $config;
     }
    }
  3. Instalarlo php bin/magento setup:upgrade

  4. Importante: después de la instalación, debe volver a editar las descripciones de las categorías afectadas y volver a cargar las imágenes.

La idea de esta extensión de reparación no es mía sino de este tipo . También lo empaquetó todo en github para que lo descargues .

Lo probé yo mismo en CE 2.1.4 y funciona bien.


3

La solución más simple es actualizar la getImageHtmlDeclaration()función envendor/magento/module-cms/Helper//Wysiwyg/images.php

public function getImageHtmlDeclaration($filename, $renderAsTag = false)
{
    $fileurl = $this->getCurrentUrl() . $filename;
    $mediaUrl = $this->_storeManager->getStore()->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA);
    $mediaPath = str_replace($mediaUrl, '', $fileurl);
    $directive = sprintf('{{media url="%s"}}', $mediaPath);
    if ($renderAsTag) {
        $html = sprintf('<img src="%s" alt="" />', $this->isUsingStaticUrlsAllowed() ? $fileurl : $directive);
    } else {
         $html = $fileurl;
        //if ($this->isUsingStaticUrlsAllowed()) {
        //    $html = $fileurl; // $mediaPath;
        //} else {
        //    $directive = $this->urlEncoder->encode($directive);
        //    $html = $this->_backendData->getUrl('cms/wysiwyg/directive', ['___directive' => $directive]);
        //}
    }
    return $html;
}

Puede que este no sea el mejor enfoque, pero funciona.


1

Tengo el mismo problema con CE 1.9 Y aquí está la solución: la idea es tratar de cambiar la variable $ html (puede usar Di, Plugin o Patch packagist.org/packages )

Magento \ Cms \ Helper \ Wysiwyg \ Images.php línea 180

$html = $this->_backendData->getUrl('cms/wysiwyg/directive', ['___directive' => $directive]);

reemplazar a

$html = $this->_backendData->getUrl(
                'cms/wysiwyg/directive',
                [
                    '___directive' => $directive,
                    '_escape_params' => false,
                ]
            );

Consulte: github.com/PieterCappelle


0

En el archivo etc / di.xml de la extensión Magento 2 personalizada:

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <type name="Magento\Catalog\Observer\CatalogCheckIsUsingStaticUrlsAllowedObserver">
        <plugin name="cms_wysiwyg_images_static_urls_allowed_plugin" type="Vendor\Module\Plugin\CatalogCheckIsUsingStaticUrlsAllowedObserver" sortOrder="10" disabled="false"  />
    </type>
</config>

Vendor \ Module \ Plugin \ CatalogCheckIsUsingStaticUrlsAllowedObserver.php

namespace Vendor\Module\Plugin;

class CatalogCheckIsUsingStaticUrlsAllowedObserver
{
    public function aroundExecute(
        \Magento\Catalog\Observer\CatalogCheckIsUsingStaticUrlsAllowedObserver $subject, 
        \Closure $proceed, 
        $observer)
    {
        $objectManager =  \Magento\Framework\App\ObjectManager::getInstance();        
        $storeManager  = $objectManager->get('\Magento\Store\Model\StoreManagerInterface');
        $catalogData  = $objectManager->get('\Magento\Catalog\Helper\Data');
        $storeID = $storeManager->getStore()->getStoreId(); 
        $result = $observer->getEvent()->getData('result');
        $result->isAllowed = $catalogData->setStoreId($storeID)->isUsingStaticUrlsAllowed();
    }
}

Trabajando para mi!

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.