Magento 2 получить URL-адрес изображения пользовательского модуля из серверной части
Я использовал
<?php echo $this->getViewFileUrl('Vendor_Module::images/demo.jpg'); ?>
<?php echo $block->getViewFileUrl('Vendor_Module::images/demo.jpg'); ?>
Но он работает только на интерфейсе, я хочу, чтобы он был в файле блока adminhtml.
Я использовал это в столбце визуализации сетки Файл:
namespace Vendor\Module\Block\Adminhtml\Product\Renderer;
use Magento\Framework\DataObject;
class FileIcon extends \Magento\Backend\Block\Widget\Grid\Column\Renderer\AbstractRenderer
{
public function render(DataObject $row)
{
echo $this->getViewFileUrl('Vendor_Module::images/demo.jpg');
echo $block->getViewFileUrl('Vendor_Module::images/demo.jpg');
exit;
//return $file;;
}
}
3 answers
Использовать \Magento\Framework\View\Asset\Repository
класс
protected $_assetRepo;
public function __construct(
...
\Magento\Framework\View\Asset\Repository $assetRepo,
...
) {
...
$this->_assetRepo = $assetRepo;
...
}
Теперь вы можете получить URL-адрес изображения с помощью
echo $this->_assetRepo->getUrl("Vendor_Module::images/demo.jpg");
Взгляните на модуль Magento Marketplace:
Поставщик/magento/модуль-торговая площадка/просмотр/adminhtml/шаблоны/index.phtml
$block->getViewFileUrl('Magento_Marketplace::partners/images/magento-connect.png');
Изображение является vendor/magento/module-marketplace/view/adminhtml/web/partners/images/magento-connect.png
Наш образ должен быть под web
:
view/adminhtml/web/images/demo.jpg
Попробуйте получить префикс модуля в вашем шаблоне:
<?php echo $block->getViewFileUrl('Your_Module::images/demo.jpg'); ?>
Не забудьте очистить кэш Magento и, возможно, потребуется удалить папку view_preprocessed
.
[ РЕДАКТИРОВАТЬ]
В вашем случае вы можете попробовать с
$this->getViewFileUrl('Vendor_Module::images/image-demo.jpg');
Большинство ответов на этот вопрос верны, но могут быть частично неверными или неполными, если вы все еще не можете отобразить изображение на бэкэнде.
Если вы пробовали какое-либо из этих решений и оно не работает, попробуйте следующее:
1) Убедитесь, что у вас есть файлы, которые вы хотите загрузить, в вашем каталоге пользовательских модулей вот так:
Vendor/Module/view/adminhtml/web/images/mage.jpg
или и Vendor/Module/view/adminhtml/web/js/mage.js
2) Затем в вашем block
public function __construct(
\Magento\Backend\Block\Template\Context $context,
\Magento\Framework\View\Asset\Repository $moduleAssetDir,
array $data = []
) {
$this->moduleAssetDir = $moduleAssetDir;
parent::__construct($context, $data);
}
Затем вы можете вызывать файлы, как показано на рисунке ниже:
$MageImage = $this->moduleAssetDir->getUrl("Vendor_Module::images/mage.jpg");
$JsMage = $this->moduleAssetDir->getUrl("Vendor_Module::js/mage.js");
3) Затем запустите эту командную строку
php bin/magento setup:upgrade
Это не причинит никакого вреда, если вы решите вместо этого запустить эту длинную строку
php bin/magento setup:upgrade && php bin/magento indexer:reindex && php bin/magento cache:flush && php bin/magento cache:clean
Из любопытства:
После обновления проверьте свой каталог пабов, предполагая, что одним из locale
является en_GB
, у вас должно быть что-то вроде этого:
/pub/static/adminhtml/Magento/backend/en_GB/Vendor_Module/images/mage.jpg
/pub/static/adminhtml/Magento/backend/en_GB/Vendor_Module/js/mage.js
И визуализировал некоторые из них, как показано ниже:
<script type="text/javascript" src="siteUrl/static/version1234567890/adminhtml/Magento/backend/en_GB/Vendor_Module/js/mage.js"></script>
<img src="siteUrl/static/version1234567890/adminhtml/Magento/backend/en_GB/Vendor_Module/images/mage.jpg" />