Media URL
Şablon dosyasında nasıl edinilir? Bulduğum tüm çözüm doğrudan Object Manager'ı çağırıyor. Başka bir endişem, Nesne yöneticisini doğrudan en iyi uygulama olarak adlandırabilir misiniz? (çünkü çözümün çoğunda nesne yöneticisi kullanıyorlar)
Media URL
Şablon dosyasında nasıl edinilir? Bulduğum tüm çözüm doğrudan Object Manager'ı çağırıyor. Başka bir endişem, Nesne yöneticisini doğrudan en iyi uygulama olarak adlandırabilir misiniz? (çünkü çözümün çoğunda nesne yöneticisi kullanıyorlar)
Yanıtlar:
Medya URL'sini şablon dosyanızda aşağıdaki yolu kullanarak alabilirsiniz, ancak objectmanager kullanmadan Yapıcı __construct()
yönteminde storeManagerInterface komutunu içeren bir yöntemle Block dosyasını tanımlamanız gerekir .
Phtml Block dosyanızda __construct işlevi oluşturun.
public $ _storeManager;
public function __construct(\Magento\Store\Model\StoreManagerInterface $storeManager)
{
$this->_storeManager = $storeManager;
}
Phtml dosyasında mediaurl almak için aşağıdaki yöntemi arayın,
$mediaUrl = $this ->_storeManager-> getStore()->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA );
echo $ mediaUrl;
Magento 2'de medya URL'sini almanın doğru yolu budur.
\Magento\Framework\View\Element\Template
, zaten StoreManagerInterface
( $this->_storeManager
) örneğine sahipsiniz .
2.1 itibariyle, medya URL'sini şunlardan biri olmadan almanın doğrudan bir yolu yoktur:
Rakesh bunu yapmanın bir yolundan bahsetti.
Başka bir yol, $_urlBuilder
her blok için içerilen korumalı değişkeni şu şekilde tanımlandığı şekilde kullanmaktır AbstractBlock
: https://github.com/magento/magento2/blob/f2d309a88298886460351c04973a4ff95c7a91c0/lib/internal/Magento/Framework/View/Element/AbstractBlock.php # L186
Böylece bloğunuzun yapıcısını değiştirmeniz gerekmez ve sadece aşağıdaki yöntemi ekleyebilirsiniz:
public function getMediaUrl() {
return $this->_urlBuilder->getBaseUrl(['_type' => UrlInterface::URL_TYPE_MEDIA]);
}
Ardından şablonunuzda şunları arayabilirsiniz:
$block->getMediaUrl();
\ Magento \ Framework \ View \ Element \ Template genişletme sorununa gitmek istemiyorsanız ve .phtml dosyanızın \ Magento \ Framework \ View \ Element \ Template bloğunu kullanmasını istiyorsanız, bu kısayol:
$this->helper('Magento\Cms\Helper\Wysiwyg\Images')->getBaseUrl()
Raphael'in cevabını kullanacağım ve uzatacağım - ama yöntemi blok sınıfına eklemek yerine, neden bir yardımcı oluşturup buraya eklemeyesiniz?
Her zamanki gibi yeni bir modül oluşturarak başlayın ve kök içinde "Yardımcı" adlı yeni bir klasör oluşturun ve gerekli kodu buraya ekleyin:
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]);
}
}
Etkinleştirildikten ve derlendikten sonra, aşağıdaki yöntemi kullanarak şablon dosyanızda kullanabilirsiniz:
<?php $url = $this->helper('\YourSite\YourModule\Helper\Url'); ?>
<img src="<?php echo $url->getMediaPath() ?>wysiwyg/image.jpg" />
Umarım siz (ve potansiyel olarak başkaları) bunu çok faydalı bulursunuz!
En azından 2.2.6'da, Magento\Framework\UrlInterface::getDirectUrl()
protected function buildMediaUrl($path)
{
return $this->urlBuilder->getDirectUrl( $path, ['_type' => UrlInterface::URL_TYPE_MEDIA]);
}