Dlaczego Magento 2 tworzy dyrektywy dla obrazów multimedialnych przy użyciu adresu URL administratora?
na przykład kiedy dodam obraz na stronie kategorii WYSIWYG, dodaje
<img src="{{media url="wysiwyg/image.jpg"}}" alt="" />
ale potem magento analizuje go pod kątem interfejsu i wygląda tak
<img src="https://domain.co.uk/admin/cms/wysiwyg/directive/___directive/e3ttZWRpYSB1cmw9Ind5c2l3eWcvQ29udmV5b3JfYmVsdHNfZmFzdF9kZWxpdmVyeS5qcGcifX0,/key/b67d0a8069ef28a8443e0bad6d912512704213d60e1d9021b1ec2b9dd34bf390/" alt="">
ponieważ jego łączenie z administratorem to jedyny sposób, w jaki będzie się ładować w przeglądarce, jeśli jesteś zalogowany do administratora. Stanowi to również problem bezpieczeństwa, ponieważ ujawnia ścieżkę administratora na interfejsie użytkownika.
Szukałem w vendor / magento / module-cms / Helper // Wysiwyg / images.php i wygląda na to, że funkcja getImageHtmlDeclaration () generuje to
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;
}
Próbowałem użyć statycznych adresów URL dla mediów, ale nadal nie ma sensu, więc jedyne, co mogę wymyślić, to edycja tej funkcji w celu użycia adresu URL frontonu zamiast backend / admin
każda pomoc w tym zakresie byłaby bardzo mile widziana :)
źródło
{{media url="wysiwyg/some-image.jpg"}}
format, którego oczekiwaliśmy w MagentoOdpowiedzi:
To znany błąd który jest nadal obecny w CE 2.1.5.
Znaną poprawką jest dodanie
'add_directives' => true
dogetConfig
funkcjivendor/magento/module-cms/Model/Wysiwyg/Config.php
.Najlepszym sposobem na to jest napisanie przechwytywacza .
W niestandardowym
etc/di.xml
pliku rozszerzenia Magento 2 :Vendor\Module\Plugin\WysiwygConfig.php
:Zainstaluj to
php bin/magento setup:upgrade
Ważne: po instalacji musisz ponownie edytować opisy kategorii, których dotyczy problem, i ponownie załadować obrazy.
Pomysł na to rozszerzenie poprawki nie jest mój, ale ten facet . Spakował to wszystko na github, abyś mógł go pobrać .
Testowałem to sam na CE 2.1.4 i działa dobrze.
źródło
Najprostszym rozwiązaniem jest aktualizacja
getImageHtmlDeclaration()
funkcji wvendor/magento/module-cms/Helper//Wysiwyg/images.php
To może nie być najlepsze podejście, ale działa.
źródło
Mam ten sam problem z CE 1.9 I oto rozwiązanie: pomysł próbuje zmienić zmienną $ html (możesz użyć Di, wtyczki lub łatki packagist.org/packages )
Magento \ Cms \ Helper \ Wysiwyg \ Images.php linia 180
$html = $this->_backendData->getUrl('cms/wysiwyg/directive', ['___directive' => $directive]);
zamień na
Patrz: github.com/PieterCappelle
źródło
W niestandardowym pliku etc / di.xml rozszerzenia Magento 2:
Vendor \ Module \ Plugin \ CatalogCheckIsUsingStaticUrlsAllowedObserver.php
Pracuje dla mnie!
źródło