Chỉ thị hình ảnh Magento 2 WYSIWYG Media bằng url quản trị


14

Tại sao magento 2 tạo chỉ thị cho hình ảnh phương tiện bằng url quản trị viên?

ví dụ khi tôi thêm một hình ảnh trên trang chuyên mục WYSIWYG, nó sẽ thêm vào

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

nhưng sau đó magento phân tích cú pháp cho frontend và giống như thế này

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

bởi vì liên kết của nó với quản trị viên theo cách duy nhất nó sẽ tải trên trình duyệt là nếu bạn đăng nhập vào quản trị viên. Điều này cũng đặt ra một vấn đề bảo mật vì nó đang tiết lộ đường dẫn quản trị viên trên frontend.

Tôi đã xem nhà cung cấp / magento / module-cms / Helper // Wysiwyg / images.php và trông giống như hàm getImageHtmlDeclaration () tạo ra điều này

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

Tôi đã cố gắng sử dụng các url tĩnh cho phương tiện nhưng vẫn không sử dụng được nên công việc duy nhất tôi có thể nghĩ đến là chỉnh sửa chức năng này để sử dụng url frontend thay vì backend / admin

bất kỳ trợ giúp về điều này sẽ được rất nhiều đánh giá cao :)


Hình ảnh trong trình chỉnh sửa wysiwyg dường như sử dụng URL 'admin / cms / wysiwyg / directive' khi bạn nhìn vào các thẻ trong cửa sổ 'Chỉnh sửa nguồn HTML', nhưng trên frontend bạn sẽ thấy một 'pub / static / wysiwyg / 'URL cho những hình ảnh tương tự.
Aaron Allen

quản trị viên / cms / wysiwyg / chỉ thị đang ở phía trước trên bản cài đặt magento 2 của tôi
Steve B

Tôi đang đối mặt với cùng một vấn đề. Magento 2.1.2 WYSIWYG cũng đang tạo URL quản trị cho hình ảnh cho tôi.
Ejaz

Bất kỳ tin tức về điều này?
simonthesorcerer

2
Sau nhiều giờ vào tối qua, khuyến nghị tốt nhất (chắc chắn không phải là giải pháp) cho vấn đề này là nhấp vào nút "Hiển thị / Ẩn Trình chỉnh sửa" trước khi lưu. Khi tắt trình soạn thảo WYSIWYG, Magento sẽ chuyển đổi URL chỉ thị thành {{media url="wysiwyg/some-image.jpg"}}định dạng mà chúng tôi mong đợi ở Magento
Darren Felton

Câu trả lời:


8

Đây là một lỗi đã biết vẫn còn tồn tại trong CE 2.1.5.

Các sửa chữa được biết đến là để thêm 'add_directives' => truevào getConfigchức năng của vendor/magento/module-cms/Model/Wysiwyg/Config.php.

Cách tốt nhất để làm điều đó là viết một máy bay đánh chặn .

  1. Trong etc/di.xmltệp tiện ích mở rộng Magento 2 tùy chỉnh của bạn :

    <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. Cài đặt nó php bin/magento setup:upgrade

  4. Quan trọng: sau khi cài đặt, bạn cần chỉnh sửa lại các mô tả danh mục bị ảnh hưởng và tải lên lại hình ảnh.

Ý tưởng về phần mở rộng sửa lỗi này không phải của tôi mà là anh chàng này . Anh ấy cũng đóng gói tất cả lên github để bạn tải về .

Tôi đã thử nghiệm bản thân trên CE 2.1.4 và nó hoạt động tốt.


3

Giải pháp đơn giản nhất là cập nhật getImageHtmlDeclaration()chức năng trongvendor/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;
}

Đây có thể không phải là cách tiếp cận tốt nhất, nhưng nó hoạt động.


1

Tôi gặp vấn đề tương tự với CE 1.9 Và đây là giải pháp: ý tưởng đang cố gắng thay đổi biến $ html (bạn có thể sử dụng Di, Plugin hoặc Patch packagist.org/packages )

Magento \ Cms \ Helper \ Wysiwyg \ Images.php dòng 180

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

thay thế cho

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

Tham khảo: github.com/PieterCappelle


0

Trong tệp etc / di.xml tùy chỉnh của tiện ích mở rộng Magento 2 của bạn:

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

Nhà cung cấp \ Module \ Plugin \ CatalogCheckIsUsingStaticUrls ALLowedObserver.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();
    }
}

Làm việc cho tôi!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.