Magento2 .phtml 文件中的媒体路径


Magento2 Media path in .phtml file

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

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

我试过了

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

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

提前谢谢。

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

$this->getUrl('pub/media')

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

$block->getViewFileUrl('images/myimage.png');

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

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

根据Magento的建议,在开发过程中,网站的文档根目录应该在目录pub外部,并且在移动到生产环境时应该pub目录中。

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

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

它对我来说效果很好。

尝试使用 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);

尝试使用以下代码:

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

有两种方法可以在 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/';

好吧,就我而言,这奏效了:

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

$baseurl=$block->getUrl();

在 phtml 中返回您的基本网址。

在你的

块中注入商店管理器接口

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