.phtml文件中的Magento2 Media路径

时间:2016-02-29 12:51:26

标签: php magento2 magento-2.0

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

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

我试过

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

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

提前致谢。

10 个答案:

答案 0 :(得分:5)

这是从块或模板中获取媒体路径的方法。

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

答案 1 :(得分:3)

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

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

答案 2 :(得分:2)

//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 :(得分:2)

根据Magento的编码标准,不鼓励使用Object Manager。在模板文件中,我们可以使用以下代码获取媒体网址:

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

根据Magento的建议,网站的文档根目录在开发过程中应位于pub目录之外,而在生产环境中应位于pub目录中。

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

答案 4 :(得分:0)

尝试使用以下代码:

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

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

答案 5 :(得分: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/';

答案 6 :(得分: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);
?>

答案 7 :(得分:0)

from bs4 import BeautifulSoup raw_xml = open(source_file, 'r') soup = BeautifulSoup(raw_xml) soup.find_all('tags')

在phtml中返回你的baseurl。

答案 8 :(得分:0)

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

答案 9 :(得分: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();