Magento2: Medya URL'sini Şablon Dosyasına Getir (Doğrudan Arama Nesnesi Yöneticisi Olmadan)


18

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:


26

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.


4
Bu değişkeni korumanın ve bunun yerine medya URL'sini almak için bir alıcı yöntemi oluşturmanın daha iyi olacağını düşünüyorum
Raphael Dijital Piyanizm'de

Bloğunuz genişlerse \Magento\Framework\View\Element\Template, zaten StoreManagerInterface( $this->_storeManager) örneğine sahipsiniz .
Erfan

Medya URL'im var. Ama ben bu url karşılık gelen görüntü görüntülemek gerekir ... Eğer biliyorsun benim sorunu çözmek için bana yardım et. Lütfen aşağıdaki bağlantıya bakın magento.stackexchange.com/questions/201961/…
Jaisa

14

2.1 itibariyle, medya URL'sini şunlardan biri olmadan almanın doğrudan bir yolu yoktur:

  • doğrudan nesne yöneticisini çağırmak (lütfen bunu yapmayın)
  • bloğu geçersiz kıl ve yeni bir yöntem ekle

Rakesh bunu yapmanın bir yolundan bahsetti.

Başka bir yol, $_urlBuilderher 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();

4
Ben sadece doğrudan .phtml medya yolunu alamıyorum saçma olduğunu düşünüyorum.
LucScu

@LucScu kesinlikle tavsiye edilmeyebilir. Yüklenen ve kod tabanının bir parçası olmayan bir öğeye referansta bulunmak muhtemelen en iyi fikir değildir. Bunu yapmak biraz kötü hissettiriyor.
Erfan

7

\ 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()

PHTML dosyalarında $ this-> helper () kullanımı kullanımdan kaldırıldı ve önerilmez
Vishwas Bhatnagar

5

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!


PHTML dosyalarında $ this-> helper () kullanımı kullanımdan kaldırıldı ve önerilmez
Vishwas Bhatnagar

1

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]);
    }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.