Magento2: টেমপ্লেট ফাইলে মিডিয়া URL পান (সরাসরি কলিং অবজেক্ট ম্যানেজার ছাড়াই)


18

Media URLটেমপ্লেট ফাইল পেতে কিভাবে ? আমি যে সমস্ত সমাধান পেয়েছি সেগুলিতে সরাসরি অবজেক্ট ম্যানেজারকে কল করা হচ্ছে। আমার আর উদ্বেগ, আপনি কি কখনও কখনও সেরা অনুশীলন হিসাবে সরাসরি অবজেক্ট ম্যানেজারকে কল করতে পারেন? (কারণ বেশিরভাগ সমাধানে তারা অবজেক্ট ম্যানেজার ব্যবহার করছে)

উত্তর:


26

আপনি নীচের উপায়ে আপনার টেমপ্লেট ফাইলে মিডিয়া ইউআরএল পেতে পারেন তবে অবজেক্টম্যানেজারটি ব্যবহার না করে আপনাকে অবশ্যই বিল্ট __construct()পদ্ধতিতে স্টোরম্যানেজারআইন্টারফেসের সাথে পদ্ধতিতে ব্লক ফাইলটি সংজ্ঞায়িত করতে হবে ।

আপনার পিটিএইচটিএমএল ব্লক ফাইলটিতে __ কনস্ট্রাক্ট ফাংশন তৈরি করুন।

পাবলিক $ _স্টোর ম্যানেজার;

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

মিডিয়াআরএল পেতে আপনার পিটিএইচটিএম ফাইলের কল পদ্ধতিতে,

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

প্রতিধ্বনি $ মিডিয়া ইউআরএল;

এটি ম্যাজেন্টো 2-তে মিডিয়া url পাওয়ার সঠিক উপায় way


4
আমি মনে করি সেই পরিবর্তনশীলটিকে সুরক্ষিত করা এবং পরিবর্তে মিডিয়া ইউআরএল পুনরুদ্ধার করার জন্য একটি গেটর পদ্ধতি তৈরি করা আরও ভাল হবে
রাফেল ডিজিটাল পিয়ানিজমে

যদি আপনার ব্লকটি প্রসারিত হয় তবে আপনার \Magento\Framework\View\Element\Templateইতিমধ্যে StoreManagerInterface( $this->_storeManager) এর উদাহরণ রয়েছে ।
এরফান

আমি মিডিয়া ইউআরএল পেয়েছি। তবে আমাকে সেই url এর সাথে সম্পর্কিত চিত্রটি প্রদর্শন করা দরকার ... আপনি যদি জানেন তবে আমার সমস্যা সমাধানের জন্য আমাকে সহায়তা করুন। দয়া করে নীচের লিঙ্কটি magento.stackexchange.com/questions/201961/…
জয়সা

14

২.১ হিসাবে, মিডিয়া ইউআরএল পাওয়ার কোনও সরাসরি উপায় নেই:

  • অবজেক্ট ম্যানেজারকে সরাসরি কল করা (দয়া করে এটি করবেন না)
  • ব্লকটি ওভাররাইড করুন এবং একটি নতুন পদ্ধতি যুক্ত করুন

রাকেশ এটি করার একটি উপায় উল্লেখ করেছেন।

আর একটি উপায় সুরক্ষিত ভেরিয়েবল ব্যবহার করা $_urlBuilderযা প্রতিটি ব্লকের জন্য অন্তর্ভুক্ত হিসাবে অন্তর্ভুক্ত রয়েছে AbstractBlock: https://github.com # L186

সুতরাং আপনাকে আপনার ব্লকের নির্মাণকারীর সংশোধন করতে হবে না এবং কেবল নীচের পদ্ধতিটি যুক্ত করতে পারেন:

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

তারপরে আপনার টেমপ্লেটে আপনি কল করতে পারেন:

$block->getMediaUrl();

4
আমি মনে করি এটি অযৌক্তিক that
লুস্ক্কু

@ লুক্স্কু এটি অবশ্যই নিরুৎসাহিত হতে পারে sure সম্ভবত কোনও সম্পত্তি যে আপলোড করা হয়েছে এবং কোডবেসের অংশ নয় তা উল্লেখ করার জন্য সেরা ধারণা নয়। এটি করতে কিছুটা খারাপ লাগছে।
এরফান

7

আপনি যদি \ ম্যাজেন্টো \ ফ্রেমওয়ার্ক \ ভিউ \ এলিমেন্ট \ টেমপ্লেটটি প্রসারিত করার সমস্যায় যেতে না চান এবং আপনি আপনার। Phtml ফাইলটি \ ম্যাজেন্টো me ফ্রেমওয়ার্ক \ দেখুন \ উপাদান \ টেমপ্লেটটি ব্যবহার করতে চান, তবে আপনি ব্যবহার করতে পারেন এই শর্টকাট:

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

পিএইচটিএমএল ফাইলগুলিতে $ এটি-> সহায়ক () ব্যবহার করা অবহেলা ও নিরুৎসাহিত করা হয়
বিশ্বাস ভাটনগর

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

আমি আশা করি আপনি (এবং সম্ভাব্য অন্যরা) এটি দুর্দান্ত ব্যবহারের সন্ধান পাবেন!


পিএইচটিএমএল ফাইলগুলিতে $ এটি-> সহায়ক () ব্যবহার করা অবহেলা ও নিরুৎসাহিত করা হয়
বিশ্বাস ভাটনগর

1

কমপক্ষে ২.২..6 এ আপনি ব্যবহার করতে পারেন Magento\Framework\UrlInterface::getDirectUrl()

    protected function buildMediaUrl($path)
    {
        return $this->urlBuilder->getDirectUrl( $path, ['_type' => UrlInterface::URL_TYPE_MEDIA]);
    }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.