Magento 2 WYSIWYG Directive image image โดยใช้ url ของผู้ดูแลระบบ


15

เหตุใด magento 2 จึงสร้างคำสั่งสำหรับรูปภาพสื่อโดยใช้ URL ของผู้ดูแลระบบ

ตัวอย่างเช่นเมื่อฉันเพิ่มภาพในหน้าหมวดหมู่ WYSIWYG มันจะเพิ่ม

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

แต่วีโอไอพีจะแยกวิเคราะห์สำหรับส่วนหน้าและเป็นเช่นนี้

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

เนื่องจากการเชื่อมโยงไปยังผู้ดูแลระบบวิธีเดียวที่จะโหลดบนเบราว์เซอร์คือหากคุณลงชื่อเข้าใช้ในการดูแลระบบ นอกจากนี้ยังก่อให้เกิดปัญหาด้านความปลอดภัยเนื่องจากมีการเปิดเผยเส้นทางของผู้ดูแลระบบที่ส่วนหน้า

ฉันดูในผู้ขาย / magento / module-cms / Helper // Wysiwyg / images.php และดูเหมือนว่าฟังก์ชั่นgetImageHtmlDeclaration ()สร้างสิ่งนี้

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

ฉันพยายามใช้ URL คงที่สำหรับสื่อ แต่ก็ยังไม่มีประโยชน์ดังนั้นสิ่งเดียวที่ฉันคิดได้คือแก้ไขฟังก์ชั่นนี้เพื่อใช้ url ส่วนหน้าแทน backend / admin

ความช่วยเหลือเกี่ยวกับเรื่องนี้จะได้รับการชื่นชมอย่างมาก :)


รูปภาพในเครื่องมือแก้ไข wysiwyg ดูเหมือนจะใช้ URL 'admin / cms / wysiwyg / directive' เมื่อคุณดูแท็กในหน้าต่าง 'แก้ไขแหล่งที่มา HTML' แต่ในส่วนหน้าคุณควรเห็น 'pub / static / wysiwyg / 'URL สำหรับภาพเดียวกันเหล่านั้น
แอรอนอัลเลน

ผู้ดูแลระบบ / cms / wysiwyg / คำสั่งอยู่ในส่วนหน้าของวีโอไอพีของฉัน 2 ติดตั้ง
Steve B

ฉันกำลังเผชิญกับปัญหาเดียวกัน Magento 2.1.2 WYSIWYG กำลังสร้าง URL ผู้ดูแลระบบสำหรับรูปภาพสำหรับฉันเช่นกัน
Ejaz

มีข่าวเกี่ยวกับเรื่องนี้ไหม?
simonthesorcerer

2
หลังจากผ่านไปหลายชั่วโมงในคืนที่ผ่านมาคำแนะนำที่ดีที่สุด (ไม่ใช่วิธีแก้ปัญหา) คือคลิกปุ่ม "แสดง / ซ่อนตัวแก้ไข" ก่อนบันทึก เมื่อปิดตัวแก้ไข WYSIWYG Magento จะแปลง directive URL เป็น{{media url="wysiwyg/some-image.jpg"}}รูปแบบที่เราคาดหวังใน Magento
Darren Felton

คำตอบ:


8

นี่เป็นข้อผิดพลาดที่รู้จักซึ่งยังคงอยู่ใน CE 2.1.5

การแก้ไขที่รู้จักกันคือการเพิ่ม'add_directives' => trueการทำงานของgetConfigvendor/magento/module-cms/Model/Wysiwyg/Config.php

วิธีที่ดีที่สุดที่จะทำคือการเขียนinterceptor

  1. ในetc/di.xmlไฟล์ส่วนขยาย Magento 2 ที่คุณกำหนดเอง:

    <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. ติดตั้ง php bin/magento setup:upgrade

  4. สำคัญ:หลังการติดตั้งคุณจะต้องแก้ไขคำอธิบายหมวดหมู่ที่ได้รับผลกระทบและอัปโหลดภาพอีกครั้ง

แนวคิดของส่วนขยายการแก้ไขนี้ไม่ใช่ของฉัน แต่เป็นผู้ชายคนนี้ นอกจากนี้เขายังเต็มไปมันขึ้นทั้งหมดบน GitHub สำหรับคุณที่จะดาวน์โหลด

ฉันทดสอบด้วยตัวเองใน CE 2.1.4 และใช้งานได้ดี


3

ทางออกที่ง่ายที่สุดคือการอัพเดตgetImageHtmlDeclaration()ฟังก์ชั่นvendor/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;
}

นี่อาจไม่ใช่วิธีที่ดีที่สุด แต่ใช้งานได้


1

ฉันได้รับปัญหาเดียวกันกับ CE 1.9 และนี่คือวิธีแก้ไข: แนวคิดกำลังพยายามเปลี่ยนตัวแปร $ html (คุณสามารถใช้ Di, Plugin หรือ Patch packagist.org/packages )

Magento \ Cms \ Helper \ Wysiwyg \ Images.phpบรรทัด 180

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

แทนที่เป็น

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

อ้างอิง: github.com/PieterCappelle


0

ในไฟล์ etc / di.xml ของ Magento 2 ที่กำหนดเอง:

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

ผู้ขาย \ โมดูล \ ปลั๊กอิน \ 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();
    }
}

ทำงานให้ฉัน!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.