Magento 2.1 Путь к медиа в файле .phtml

9

Как получить медиа-путь в Magento 2.1. Я перепробовал много вариантов, но он не работает?

Я хочу отобразить изображение в front-end файле .phtml.

Вишал Танна
источник
Можете ли вы показать нам, что вы пробовали до сих пор и каковы были связанные результаты?
Жюльен Лахаль

Ответы:

11

вы можете получить путь к медиа с помощью $ объектного метода

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
echo $objectManager->get('Magento\Store\Model\StoreManagerInterface')
                    ->getStore()
                    ->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA);

метод фабрики

<?php
    namespace Namespace\Modulename\Block;
    use Magento\Framework\ObjectManagerInterface;

    class Banners extends Template
    {

        protected $objectManager;
        public function __construct( 
            ....... 
            ObjectManagerInterface $objectManager
                       ...) {

                    ...........
                    $this->objectManager = $objectManager;

                    ...............
        }
        public function getMediaUrl(){

            $media_dir = $this->objectManager->get('Magento\Store\Model\StoreManagerInterface')
                ->getStore()
                ->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA);

            return $media_dir;
        }
    }
    ........
?>

в файле phtml

<?php echo $block->getMediaUrl(); ?>
Кайсар Сатти
источник
11

Использование Object Manager не рекомендуется в соответствии со стандартами кодирования Magento. В файле шаблона мы можем получить медиа-URL, используя следующий код:

$this->helper('\Magento\Cms\Helper\Wysiwyg\Images')->getBaseUrl()

В соответствии с рекомендациями Magento, корень документа на вашем веб-сайте должен находиться вне pubкаталога во время разработки, и он должен находиться внутри pubкаталога при перемещении в производство.

Следовательно, мы не можем жестко закодировать pubкаталог при получении медиа-URL в файлах шаблонов. Приведенный выше код даст вам правильный медиа-URL независимо от корневого расположения вашего документа.

Н. Картич Каннан
источник
1
+1 Думать о добавлении 20 строк кода для Object Manager звучит просто ужасно.
Мохаммед Джорайд
7

Получить медиа-путь с помощью objectManager

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
echo $objectManager->get('Magento\Store\Model\StoreManagerInterface')
                    ->getStore()
                    ->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA);

Получить путь к медиа с помощью внедрения зависимостей

protected $_storeManager;

public function __construct( 
    ...
    \Magento\Store\Model\StoreManagerInterface $storeManager,
    ...
) {
    ...
    $this->_storeManager = $storeManager;
    ...
}

public function getMediaUrl()
{
    $mediaUrl = $this->_storeManager
                     ->getStore()
                     ->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA);
    return $mediaUrl;
}

Теперь вызовите функцию getMediaUrl()в phtml

<?php echo $block->getMediaUrl(); ?>
Принц Патель
источник
0

$ Это -> _ storeManager-> getStore () -> getBaseUrl (\ Magento \ Framework \ UrlInterface :: URL_TYPE_MEDIA);

Пожалуйста, проверьте этот код. Это даст вам медиа-путь.

Mayur
источник
2
Это не работает в файле .phtml, потому что свойство _storeManager защищено
simonthesorcerer