Magento 2 WYSIWYG admin url을 사용하는 미디어 이미지 지시어


15

magento 2가 관리자 URL을 사용하여 미디어 이미지에 대한 지시문을 작성하는 이유는 무엇입니까?

예를 들어 카테고리 페이지 WYSIWYG에 이미지를 추가하면 추가됩니다.

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

그러나 magento는 프론트 엔드를 위해 파싱하고 다음과 같습니다.

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

브라우저에 관리자에게 링크되는 유일한 방법은 관리자에 로그인 한 경우입니다. 또한 프런트 엔드의 관리 경로를 공개하기 때문에 보안 문제가 발생합니다.

나는 vendor / 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을 사용하도록이 기능을 편집하는 것입니다.

이것에 대한 도움은 대단히 감사하겠습니다 :)


wysiwyg 편집기의 이미지는 'HTML 소스 편집'창의 태그를 볼 때 'admin / cms / wysiwyg / directive'URL을 사용하는 것처럼 보이지만 프런트 엔드에는 'pub / static / wysiwyg / 같은 이미지의 'URL입니다.
Aaron Allen

admin / cms / wysiwyg / directive는 magento 2 설치의 프론트 엔드에 있습니다
Steve B

나는 같은 문제에 직면하고있다. Magento 2.1.2 WYSIWYG는 나를 위해 이미지에 대한 관리 URL을 만들고 있습니다.
Ejaz

이것에 대한 뉴스가 있습니까?
simonthesorcerer

2
지난 밤에 여러 시간이 지난 후, 가장 좋은 권장 사항은 솔루션이 아니라 "저장 /보기 전에 편집기 표시 / 숨기기"단추를 클릭하는 것입니다. WYSIWYG 기능 편집기를 끄는 경우, 마 젠토는에 지시 URL을 변환합니다 {{media url="wysiwyg/some-image.jpg"}}우리가 젠토에 기대하는 형식
대런 펠튼

답변:


8

이것은 CE 2.1.5에 여전히 알려진 버그 입니다.

알려진 수정은의 기능에 추가 'add_directives' => true하는 getConfig것입니다 vendor/magento/module-cms/Model/Wysiwyg/Config.php.

가장 좋은 방법은 인터셉터 를 작성하는 입니다.

  1. 사용자 정의 Magento 2 확장 etc/di.xml파일에서 :

    <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 사용할 수 있습니다 )

마 젠토 \ 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

사용자 정의 Magento 2 확장 프로그램의 etc / di.xml 파일에서 :

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

나를 위해 일하고 있습니다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.