วิธีรับMedia URL
ไฟล์เทมเพลต วิธีแก้ปัญหาทั้งหมดที่ฉันพบคือการเรียก Object Manager โดยตรง ข้อกังวลอีกข้อของฉันคุณสามารถโทรหาผู้จัดการวัตถุโดยตรงเพื่อเป็นการปฏิบัติที่ดีที่สุดได้ไหม (เพราะในโซลูชันส่วนใหญ่พวกเขาใช้ตัวจัดการวัตถุ)
วิธีรับMedia URL
ไฟล์เทมเพลต วิธีแก้ปัญหาทั้งหมดที่ฉันพบคือการเรียก Object Manager โดยตรง ข้อกังวลอีกข้อของฉันคุณสามารถโทรหาผู้จัดการวัตถุโดยตรงเพื่อเป็นการปฏิบัติที่ดีที่สุดได้ไหม (เพราะในโซลูชันส่วนใหญ่พวกเขาใช้ตัวจัดการวัตถุ)
คำตอบ:
คุณสามารถรับ url สื่อในไฟล์เทมเพลตของคุณโดยใช้วิธีด้านล่าง แต่โดยไม่ต้องใช้ objectmanager คุณต้องกำหนด Block ไฟล์ด้วย__construct()
เมธอดที่มี define storeManagerInterfaceในวิธีการสร้าง
ในไฟล์บล็อกของคุณสร้างฟังก์ชั่น __ สร้าง
ประชาชน $ _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;
นี่เป็นวิธีที่เหมาะสมในการรับ URL สื่อใน Magento 2
\Magento\Framework\View\Element\Template
ว่าคุณมีอินสแตนซ์ของStoreManagerInterface
( $this->_storeManager
) อยู่แล้ว
ตั้งแต่ 2.1 ไม่มีวิธีรับ URL สื่อโดยตรงโดยไม่มี:
Rakesh พูดถึงวิธีหนึ่งในการทำมัน
อีกวิธีหนึ่งคือการใช้ตัวแปรที่มีการป้องกัน$_urlBuilder
ที่มีอยู่สำหรับทุกบล็อกที่กำหนดไว้ในAbstractBlock
: https://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();
หากคุณไม่ต้องการไปที่ปัญหาการขยาย \ Magento \ Framework \ View \ Element \ Template และคุณต้องการให้ไฟล์. html ของคุณใช้ block \ Magento \ Framework \ View \ Element \ Template คุณสามารถใช้ ทางลัดนี้:
$this->helper('Magento\Cms\Helper\Wysiwyg\Images')->getBaseUrl()
ฉันจะใช้คำตอบของ 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" />
ฉันหวังว่าคุณ (และคนอื่น ๆ อาจพบ) ใช้งานได้ดี!
อย่างน้อยใน 2.2.6 คุณสามารถใช้ Magento\Framework\UrlInterface::getDirectUrl()
protected function buildMediaUrl($path)
{
return $this->urlBuilder->getDirectUrl( $path, ['_type' => UrlInterface::URL_TYPE_MEDIA]);
}