Media URL
テンプレートファイルの取得方法 私が見つけた解決策はすべて、Object Managerを直接呼び出すことです。もう1つの懸念は、ベストプラクティスとしてオブジェクトマネージャーを直接呼び出すことはできますか?(ほとんどのソリューションでオブジェクトマネージャーを使用しているため)
Media URL
テンプレートファイルの取得方法 私が見つけた解決策はすべて、Object Managerを直接呼び出すことです。もう1つの懸念は、ベストプラクティスとしてオブジェクトマネージャーを直接呼び出すことはできますか?(ほとんどのソリューションでオブジェクトマネージャーを使用しているため)
回答:
以下の方法を使用してテンプレートファイルでメディアURLを取得できますが、objectmanagerを使用せずに、constructメソッドでstoreManagerInterface__construct()
を定義するメソッドでブロックファイルを定義する必要があります。
phtml Blockファイルに__construct関数を作成します。
public $ _storeManager;
public function __construct(\Magento\Store\Model\StoreManagerInterface $storeManager)
{
$this->_storeManager = $storeManager;
}
あなたのphtmlファイルで以下のメソッドを呼び出してmediaurlを取得し、
$mediaUrl = $this ->_storeManager-> getStore()->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA );
echo $ mediaUrl;
これは、Magento 2でメディアURLを取得する適切な方法です。
\Magento\Framework\View\Element\Template
ている場合、既にStoreManagerInterface
($this->_storeManager
)のインスタンスがあります。
2.1の時点では、次のいずれかがなければメディアURLを直接取得する方法はありません。
ラケシュはそれを行う一つの方法に言及しました。
別の方法は$_urlBuilder
、httpsAbstractBlock
://github.com/magento/magento2/blob/f2d309a88298886460351c04973a4ff95c7a91c0/lib/internal/Magento/Framework/View/Element/AbstractBlock.phpで定義されているすべてのブロックに含まれる保護された変数を使用することです。 #L186
したがって、ブロックのコンストラクタを変更する必要はなく、次のメソッドを追加するだけです。
public function getMediaUrl() {
return $this->_urlBuilder->getBaseUrl(['_type' => UrlInterface::URL_TYPE_MEDIA]);
}
次に、テンプレートで次を呼び出すことができます。
$block->getMediaUrl();
Raphaelの答えを使用して拡張します-しかし、メソッドをブロッククラスに追加する代わりに、ヘルパーを作成してそこに追加してみませんか?
通常の方法で新しいモジュールを作成することから始め、ルート内で「Helper」という名前の新しいフォルダーを作成し、そこに必要なコードを追加します。
namespace YourSite\YourModule\Helper;
use Magento\Framework\UrlInterface;
class Url extends \Magento\Framework\App\Helper\AbstractHelper
{
public function getMediaPath() {
return $this->_urlBuilder->getBaseUrl(['_type' => UrlInterface::URL_TYPE_MEDIA]);
}
}
アクティブ化してコンパイルすると、次の方法を使用してテンプレートファイル内で使用できるようになります。
<?php $url = $this->helper('\YourSite\YourModule\Helper\Url'); ?>
<img src="<?php echo $url->getMediaPath() ?>wysiwyg/image.jpg" />
あなた(そして潜在的には他の人)がこれを大いに役立つことを願っています!