Magento 2 WYSIWYG Media Image Direktive mit Admin URL


14

Warum erstellt Magento 2 Direktiven für Medienbilder mithilfe der Admin-URL?

Zum Beispiel, wenn ich ein Bild auf der Kategorieseite WYSIWYG hinzufüge

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

aber dann analysiert Magento es für Frontend und ist so

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

Da die Verknüpfung mit dem Administrator erfolgt, wird der Browser nur geladen, wenn Sie beim Administrator angemeldet sind. Dies stellt auch ein Sicherheitsproblem dar, da der Administrationspfad im Frontend angegeben wird.

Ich habe in vendor / magento / module-cms / Helper // Wysiwyg / images.php gesucht und es sieht so aus, als ob die Funktion getImageHtmlDeclaration () dies erzeugt

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

Ich habe versucht, statische URLs für Medien zu verwenden, aber immer noch keine Verwendung. Daher kann ich nur daran denken, diese Funktion so zu bearbeiten, dass Frontend-URLs anstelle von Backend / admin verwendet werden

Jede Hilfe hierzu wäre sehr dankbar :)


Bilder im Wysiwyg-Editor scheinen die URLs "admin / cms / wysiwyg / Directive" zu verwenden, wenn Sie sich die Tags im Fenster "Edit HTML Source" ansehen. Am Frontend sollte jedoch "pub / static / wysiwyg /" angezeigt werden. 'URL für dieselben Bilder.
Aaron Allen

Die admin / cms / wysiwyg / Direktive ist im Frontend meiner Magento 2 Installation
Steve B

Ich stehe vor dem gleichen Problem. Magento 2.1.2 WYSIWYG erstellt auch für mich eine Admin-URL für Bilder.
Ejaz

Gibt es Neuigkeiten zu diesem Thema?
Simonthesorcerer

2
Nach vielen Stunden in dieser letzten Nacht ist die beste Empfehlung (sicherlich keine Lösung), vor dem Speichern auf die Schaltfläche "Editor anzeigen / verbergen" zu klicken. Beim Ausschalten des WYSIWYG-Editors konvertiert Magento die Direktiven-URL um {{media url="wysiwyg/some-image.jpg"}}
Darren Felton

Antworten:


8

Dies ist ein bekannter Fehler, der in CE 2.1.5 noch vorhanden ist.

Das bekannte Update ist, um 'add_directives' => truedie getConfigFunktion von hinzuzufügen vendor/magento/module-cms/Model/Wysiwyg/Config.php.

Der beste Weg, dies zu tun, besteht darin, einen Abfangjäger zu schreiben .

  1. In der etc/di.xmlDatei Ihrer benutzerdefinierten Magento 2-Erweiterung :

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

  4. Wichtig: Nach der Installation müssen Sie Re-Editierung die betroffenen Kategoriebeschreibungen und erneuten Upload Bilder.

Die Idee zu dieser Fix-Erweiterung ist nicht meine, sondern dieser Typ . Er hat auch alles auf Github gepackt, damit Sie es herunterladen können .

Ich habe es selbst auf CE 2.1.4 getestet und es funktioniert einwandfrei.


3

Die einfachste Lösung besteht darin, die getImageHtmlDeclaration()Funktion in zu aktualisierenvendor/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;
}

Dies ist möglicherweise nicht der beste Ansatz, aber er funktioniert.


1

Ich habe das gleiche Problem mit CE 1.9. Und hier ist die Lösung: Die Idee ist, die Variable $ html zu ändern (Sie können Di, Plugin oder Patch packagist.org/packages verwenden ).

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

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

ersetzen

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

Siehe: github.com/PieterCappelle


0

In der etc / di.xml-Datei Ihrer benutzerdefinierten Magento 2-Erweiterung:

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

Für mich arbeiten!

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.