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

    }
}
Author: ShapCyber, 2017-03-28

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");
 12
Author: Prince Patel, 2017-12-07 13:30:22

Взгляните на модуль 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');
 9
Author: Khoa TruongDinh, 2017-03-29 08:28:04

Большинство ответов на этот вопрос верны, но могут быть частично неверными или неполными, если вы все еще не можете отобразить изображение на бэкэнде.

Если вы пробовали какое-либо из этих решений и оно не работает, попробуйте следующее:

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" />
 0
Author: ShapCyber, 2019-07-02 17:21:16