Magento2: टेम्पलेट फ़ाइल में मीडिया URL प्राप्त करें (डायरेक्ट कॉलिंग ऑब्जेक्ट प्रबंधक के बिना)


18

Media URLटेम्पलेट फ़ाइल में कैसे प्राप्त करें ? मैंने पाया सभी समाधान वस्तु प्रबंधक को सीधे बुला रहा है। मेरी एक और चिंता, क्या आप कभी वस्तु प्रबंधक को सीधे सर्वोत्तम अभ्यास कह सकते हैं? (क्योंकि अधिकांश समाधान में वे ऑब्जेक्ट मैनेजर का उपयोग कर रहे हैं)

जवाबों:


26

आप नीचे दिए गए तरीके से अपनी टेम्पलेट फ़ाइल में मीडिया url प्राप्त कर सकते हैं, लेकिन ऑब्जेक्टमैनेजर का उपयोग किए बिना आपको ब्लॉक फ़ाइल को निर्माण विधि में storeManagerInterface के__construct() साथ परिभाषित करना होगा

अपनी phtml ब्लॉक फ़ाइल में __construct फ़ंक्शन बनाएं।

सार्वजनिक $ _storeManager;

public function __construct(\Magento\Store\Model\StoreManagerInterface $storeManager)
{
       $this->_storeManager = $storeManager;
}

मीडियाटेल प्राप्त करने के लिए अपने phtml फ़ाइल कॉल विधि में,

$mediaUrl = $this ->_storeManager-> getStore()->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA );

इको $ मीडियाउल;

यह Magento 2 में मीडिया url प्राप्त करने का उचित तरीका है।


4
मुझे लगता है कि यह बेहतर होगा कि वेरिएबल को संरक्षित किया जाए और इसके बजाय मीडिया यूआरएल को पुनः प्राप्त करने के लिए एक गेटर विधि बनाई जाए
राफेल एट डिजिटल पियानिज्म

यदि आपके ब्लॉक का विस्तार होता है \Magento\Framework\View\Element\Template, तो आपके पास पहले से ही StoreManagerInterface( $this->_storeManager) का एक उदाहरण है ।
इरफान

मुझे मीडिया का यूआरएल मिला। लेकिन मुझे उस यूआरएल के अनुरूप छवि प्रदर्शित करने की आवश्यकता है ... यदि आप जानते हैं कि मुझे मेरी समस्या को सुलझाने में मदद मिलेगी। कृपया नीचे दिए गए लिंक को देखें magento.stackexchange.com/questions/201961/…
Jaisa

14

2.1 के रूप में, मीडिया यूआरएल प्राप्त करने का कोई सीधा तरीका नहीं है:

  • ऑब्जेक्ट प्रबंधक को सीधे कॉल करना (कृपया ऐसा न करें)
  • ब्लॉक को ओवरराइड करें और एक नई विधि जोड़ें

राकेश ने इसे करने का एक तरीका बताया।

एक और तरीका संरक्षित चर का उपयोग करना है $_urlBuilderजो कि हर ब्लॉक के लिए परिभाषित है, जैसे कि AbstractBlock: https://github.com/magento/magento2/blob/f2d309a88298886460351c04973aff95c7a91c0/lib/internal/Magento/Framework/View/Element/Alement.com/ पर जाएं। # L186

इस प्रकार आपको अपने ब्लॉक के कंस्ट्रक्टर को संशोधित करने की आवश्यकता नहीं है और बस निम्नलिखित विधि जोड़ सकते हैं:

public function getMediaUrl() {
    return $this->_urlBuilder->getBaseUrl(['_type' => UrlInterface::URL_TYPE_MEDIA]);
}

फिर अपने टेम्पलेट में आप कॉल कर सकते हैं:

$block->getMediaUrl();

4
मुझे लगता है कि यह बेतुका है कि मैं सीधे .phtml में मीडिया पथ प्राप्त नहीं कर सकता।
लुकस्क्यू

@ LucScu यह निश्चित रूप से हतोत्साहित किया जा सकता है। संभवतः किसी संपत्ति को अपलोड करने के लिए सबसे अच्छा विचार नहीं है जो अपलोड की गई है और कोडबेस का हिस्सा नहीं है। ऐसा करना थोड़ा बुरा लगता है।
इरफान

7

यदि आप \ Magento \ Framework \ View \ Element \ Template को विस्तारित करने की समस्या पर नहीं जाना चाहते हैं, और आप अपनी .phtml फ़ाइल को ब्लॉक \ Magento \ फ्रेमवर्क \ View \ Element \ टेम्पलेट का उपयोग करना चाहते हैं, तो आप उपयोग कर सकते हैं। यह शॉर्टकट:

$this->helper('Magento\Cms\Helper\Wysiwyg\Images')->getBaseUrl()

PHTML फ़ाइलों में $ इस-> हेल्पर () का उपयोग करते हुए पदावनत और हतोत्साहित किया जाता है
विश्वास भटनागर

5

मैं राफेल के उत्तर का उपयोग करने और इसे विस्तारित करने जा रहा हूं - लेकिन ब्लॉक क्लास में विधि जोड़ने के बजाय, एक सहायक क्यों नहीं बनाऊं और इसे वहां जोड़ दूं?

सामान्य तरीके से एक नया मॉड्यूल बनाकर शुरू करें, और रूट के भीतर, "हेल्पर" नामक एक नया फ़ोल्डर बनाएं और उसमें आवश्यक कोड जोड़ें:

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" />

मुझे आशा है कि आप (और संभावित रूप से अन्य) इसे बहुत उपयोग करते हैं!


PHTML फ़ाइलों में $ इस-> हेल्पर () का उपयोग करते हुए पदावनत और हतोत्साहित किया जाता है
विश्वास भटनागर

1

कम से कम 2.2.6 में, आप उपयोग कर सकते हैं Magento\Framework\UrlInterface::getDirectUrl()

    protected function buildMediaUrl($path)
    {
        return $this->urlBuilder->getDirectUrl( $path, ['_type' => UrlInterface::URL_TYPE_MEDIA]);
    }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.