Magento2中.phtml文件中的媒体路径

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

但是它给我报错说找不到类。我已经搜索并找到了一个解决方案,在块文件中创建函数,但我想在我的设计中使用媒体路径的地方太多了。
提前致谢。

最佳答案在这里:https://magento.stackexchange.com/a/235561/39707 - Wasiq Shahrukh
10个回答

9
这是如何在块或模板内获取媒体路径的方法。
$this->getUrl('pub/media')

它给了我商店名称...是否可以直接获取媒体文件名,例如www.website.com/media/file.jpg - Alam Zaib

4
在PHTML中获取媒体文件的正确方式是:
$block->getViewFileUrl('images/myimage.png');

3
这会返回 pub/static 而不是 pub/media。 - Ben Crook
这是大多数人实际想要的,就是你的模块/主题中 pub/static/ 中的 images 文件夹。 - Claudiu Creanga
如果图像在自定义模块中,请使用模块名称。例如:$block->getViewFileUrl('Magento_Checkout::cvv.png') - Chen Hanhan

4
Magento的编码标准不鼓励使用对象管理器。在模板文件中,我们可以使用以下代码获取媒体URL:
$this->helper('\Magento\Cms\Helper\Wysiwyg\Images')->getBaseUrl()

根据Magento的建议,在开发期间,网站的文档根应该位于pub目录之外;而在转移到生产环境时,它应该位于pub目录内。
因此,在模板文件中获取媒体URL时,我们不能硬编码pub目录。无论您的文档根位置在哪里,上述代码都会给出正确的媒体URL。

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

对我来说这个很好用。


3
尝试使用StoreManagerInterface获取它。
use Magento\Store\Model\StoreManagerInterface;

protected $storeManager;

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

现在可以使用以下方法获取媒体URL:

$mediaUrl = $this->storeManager->getStore()->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA);

0

尝试使用以下代码:

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

$mediaUrl = $dir->getDir(\Magento\App\Dir::MEDIA);

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

第二种方法

index.php

包含:

define('MAGENTO_ROOT', getcwd());

可以这样做:

$mediaPath = MAGENTO_ROOT.'/pub/media/';

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

0

$baseurl=$block->getUrl();

在 phtml 中返回您的 baseurl。


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接