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