4

我在 magento2 中尝试了很多选项来查找媒体路径 URL

如何在模板中找到媒体路径 URL。

我试过

$object_manager = Magento\Core\Model\ObjectManager::getInstance();
$dir = $object_manager->get('Magento\App\Dir');
$mediaUrl = $dir->getDir(\Magento\App\Dir::MEDIA);

但它给了我找不到错误类。我已经搜索并找到了在块文件中创建函数的一种解决方案,但是有很多地方我想在我的设计中使用媒体路径

提前致谢。

4

10 回答 10

7

这是您从块或模板内部获取媒体路径的方式。

$this->getUrl('pub/media')
于 2016-09-01T08:40:51.210 回答
4

在 PHTML 中获取媒体的正确方法是:

$block->getViewFileUrl('images/myimage.png');
于 2016-06-09T05:57:47.227 回答
4

根据 Magento 的编码标准,不鼓励使用对象管理器。在模板文件中,我们可以使用以下代码获取媒体 URL:

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

根据 Magento 的建议,您网站的文档根pub目录在开发期间应位于目录外,而pub在移至生产时应位于目录内。

pub因此,在模板文件中获取媒体 URL 时,我们不能对目录进行硬编码。无论您的文档根位置如何,上面的代码都会为您提供正确的媒体 URL。

于 2018-07-23T13:21:46.557 回答
3
//Case 1: $objectManager outside magento
use Magento\Framework\App\Bootstrap;    
include('your-path-to-/app/bootstrap.php');
$bootstrap = Bootstrap::create(BP, $_SERVER);
$objectManager = $bootstrap->getObjectManager();


//Case 2: $objectManager inside magento
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();

$mediaDir = $objectManager->get('Magento\Framework\App\Filesystem\DirectoryList')->getPath('media');
$mediaUrl = $objectManager->get('Magento\Store\Model\StoreManagerInterface')->getStore()->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA);


// Case 3: Inside model
public function __construct(
\Magento\Framework\View\Element\Template\Context $context, 
\Magento\Framework\App\Filesystem\DirectoryList $directory_list, 
\Magento\Store\Model\StoreManagerInterface $url, 
array $data = []) {
    parent::__construct($context, $data);
    $this->directory_list = $directory_list;  
    $this->url = $url;  
}
$this->directory_list->getRoot();//root folder path
$this->directory_list->getPath('media');//media folder path
$this->url->getStore()->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA);

它对我来说很好。

于 2016-08-08T12:28:49.187 回答
2

尝试使用 StoreManagerInterface 获取它

use Magento\Store\Model\StoreManagerInterface;

protected $storeManager;

public function __construct(
    StoreManagerInterface $storeManager,
)
{
    $this->storeManager = $storeManager;
}

现在使用获取媒体网址

$mediaUrl = $this->storeManager->getStore()->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA);
于 2018-04-17T06:38:03.920 回答
0

有两种方法可以获取 PHTML 文件中的媒体路径:

第一种方式

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

第二种方式

索引.php

包含:

define('MAGENTO_ROOT', getcwd());

可以执行以下操作:

$mediaPath = MAGENTO_ROOT.'/pub/media/';
于 2016-09-01T12:53:41.010 回答
0

$baseurl=$block->getUrl();

在 phtml 中返回你的 baseurl。

于 2017-03-02T12:00:27.523 回答
0

好吧,就我而言,这行得通:

<?php
    $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
    $storeManager = $objectManager->get('Magento\Store\Model\StoreManagerInterface');
    $store = $storeManager->getStore();
    $mediaUrl = $store->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA);
?>
于 2017-02-07T08:34:59.140 回答
0

在你的块中注入 StoreManagerInterface

namespace Altravista\Carousel\Block;
use Magento\Catalog\Block\Product\ImageBuilder;

class Product extends \Magento\Framework\View\Element\Template
{    
    public $_storeManager;

    public function __construct(
        \Magento\Backend\Block\Template\Context $context,
        \Magento\Store\Model\StoreManagerInterface $storeManager,
        array $data = []
    )
    {    
        $this->_storeManager = $storeManager;
        parent::__construct($context, $data);
    }


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

}

在你的 phtml 中调用块

$productBlock = $block->getLayout()->createBlock('Altravista\Carousel\Block\Product');

和方法

$imageUrl = $media_url. 'catalog/product' . $product->getImage();
于 2018-05-27T05:18:14.223 回答
0

试试下面的代码:

$object_manager = \Magento\Framework\App\ObjectManager::getInstance();
$dir = $object_manager->get('Magento\App\Dir');

$mediaUrl = $dir->getDir(\Magento\App\Dir::MEDIA);
于 2016-02-29T13:17:35.767 回答