メディアパスのURLを見つけるためにmagento2で多くのオプションを試しました
テンプレートでメディアパスのURLを見つけるにはどうすればよいですか。
私は試しました
$object_manager = Magento\Core\Model\ObjectManager::getInstance();
$dir = $object_manager->get('Magento\App\Dir');
$mediaUrl = $dir->getDir(\Magento\App\Dir::MEDIA);
しかし、エラークラスが見つかりません。ブロックファイルで関数を作成するための1つの解決策を検索して見つけましたが、デザインでメディアパスを使用したい場所がたくさんあります
前もって感謝します。
これは、ブロックまたはテンプレート内からメディアパスを取得する方法です。
$this->getUrl('pub/media')
Magentoのコーディング標準に従って、ObjectManagerの使用は推奨されていません。テンプレートファイルでは、次のコードを使用してメディアURLを取得できます。
$this->helper('\Magento\Cms\Helper\Wysiwyg\Images')->getBaseUrl()
Magentoの推奨に従って、Webサイトのドキュメントルートは開発中はpub
ディレクトリの外にあり、本番環境に移動するときはpub
ディレクトリ内にある必要があります。
したがって、テンプレートファイルでメディアURLを取得しているときに、pub
ディレクトリをハードコーディングすることはできません。上記のコードは、ドキュメントのルートの場所に関係なく、正しいメディアURLを提供します。
PHTMLでメディアを取得する正しい方法は次のとおりです。
$block->getViewFileUrl('images/myimage.png');
//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;
}
次に、を使用してメディアURLを取得します
$mediaUrl = $this->storeManager->getStore()->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA);
$baseurl=$block->getUrl();
Phtml内のbaseurlを返します。
以下のコードで試してみてください。
$object_manager = \Magento\Framework\App\ObjectManager::getInstance();
$dir = $object_manager->get('Magento\App\Dir');
$mediaUrl = $dir->getDir(\Magento\App\Dir::MEDIA);
PHTMLファイルでメディアパスを取得するには、次の2つの方法があります。
最初の方法
$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/';
ブロックに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();
まあ、私の場合、これはうまくいきました:
<?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);
?>