我在magento2中尝试了很多选项来查找媒体路径URL
如何在模板中找到媒体路径网址。
我试过
$object_manager = Magento\Core\Model\ObjectManager::getInstance();
$dir = $object_manager->get('Magento\App\Dir');
$mediaUrl = $dir->getDir(\Magento\App\Dir::MEDIA);
但它给我错误类没找到。我有搜索并找到了一个在块文件中创建函数的解决方案,但是我想在设计中使用媒体路径的地方很多
提前致谢。
答案 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();