Magento 2 WYSIWYG Direttiva sull'immagine multimediale usando l'URL di amministrazione


15

Perché magento 2 sta creando direttive per le immagini multimediali usando l'URL di amministrazione?

ad esempio quando aggiungo un'immagine nella pagina della categoria WYSIWYG, aggiunge

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

ma poi magento lo analizza per frontend ed è così

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

perché il suo collegamento all'amministratore l'unico modo che caricherà sul browser è se si è effettuato l'accesso all'amministratore. Ciò pone anche un problema di sicurezza perché sta rivelando il percorso dell'amministratore sul frontend.

Ho cercato in vendor / magento / module-cms / Helper // Wysiwyg / images.php e sembra che la funzione getImageHtmlDeclaration () generi questo

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

Ho provato a utilizzare gli URL statici per i media, ma ancora inutile, quindi l'unica soluzione che mi viene in mente è quella di modificare questa funzione per utilizzare l'URL frontend invece di backend / admin

qualsiasi aiuto su questo sarebbe molto apprezzato :)


Le immagini nell'editor wysiwyg sembrano usare gli URL "admin / cms / wysiwyg / direttiva" quando guardi i tag nella finestra "Modifica sorgente HTML", ma sul frontend dovresti vedere un "pub / static / wysiwyg / "URL per quelle stesse immagini.
Aaron Allen il

la direttiva admin / cms / wysiwyg / è in frontend sulla mia installazione di magento 2
Steve B

Sto affrontando lo stesso problema. Magento 2.1.2 WYSIWYG sta creando anche un URL di amministrazione per le immagini.
Ejaz,

Qualche novità al riguardo?
simonthesorcerer,

2
Dopo molte ore nell'ultima notte, la migliore raccomandazione (sicuramente non una soluzione) è quella di fare clic sul pulsante "Mostra / Nascondi editor" prima di salvare. Quando si disattiva l'editor WYSIWYG, Magento converte l'URL della direttiva nel {{media url="wysiwyg/some-image.jpg"}}formato che ci si aspetta da Magento
Darren Felton,

Risposte:


8

Questo è un bug noto che è ancora presente in CE 2.1.5.

La correzione nota è aggiungere 'add_directives' => truealla getConfigfunzione di vendor/magento/module-cms/Model/Wysiwyg/Config.php.

Il modo migliore per farlo è scrivere un intercettore .

  1. Nel etc/di.xmlfile dell'estensione Magento 2 personalizzata :

    <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. Installalo php bin/magento setup:upgrade

  4. Importante: dopo l'installazione è necessario modificare nuovamente le descrizioni delle categorie interessate e ricaricare le immagini.

L'idea di questa estensione di correzione non è la mia ma questo ragazzo . Ha anche impacchettato tutto su Github per il download .

L'ho provato io stesso su CE 2.1.4 e funziona benissimo.


3

La soluzione più semplice è aggiornare la getImageHtmlDeclaration()funzione invendor/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;
}

Questo potrebbe non essere l'approccio migliore, ma funziona.


1

Ho avuto lo stesso problema con CE 1.9 Ed ecco la soluzione: l'idea sta cercando di cambiare la variabile $ html (puoi usare Di, Plugin o Patch packagist.org/packages )

Magento \ Cms \ Helper \ Wysiwyg \ Images.php linea 180

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

sostituire a

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

Consultare: github.com/PieterCappelle


0

Nel file etc / di.xml dell'estensione Magento 2 personalizzato:

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

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

Lavora per me!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.