Как попасть Media URL
в файл шаблона? Все, что я нашел, - это непосредственный вызов диспетчера объектов. Еще одна моя проблема. Можете ли вы когда-либо напрямую вызывать диспетчер объектов в качестве наилучшей практики? (потому что в большинстве решений они используют диспетчер объектов)
magento2
template
magento-2.1
media
object-manager
Вишвас Бхатнагар
источник
источник
\Magento\Framework\View\Element\Template
, у вас уже есть экземплярStoreManagerInterface
($this->_storeManager
).Начиная с версии 2.1, нет прямого способа получить медиа-URL без:
Ракеш упомянул один из способов сделать это.
Другой способ - использовать защищенную переменную,
$_urlBuilder
которая включена для каждого блока, как определено вAbstractBlock
: https://github.com/magento/magento2/blob/f2d309a88298886460351c04973a4ff95c7a91c0/lib/internal/Magento/Framework/View/Element/AbstractBlock. # L186Таким образом, вам не нужно изменять конструктор вашего блока, и вы можете просто добавить следующий метод:
Тогда в вашем шаблоне вы можете позвонить:
источник
Если вы не хотите заниматься расширением \ Magento \ Framework \ View \ Element \ Template и хотите, чтобы ваш файл .phtml использовал блок \ Magento \ Framework \ View \ Element \ Template, тогда вы можете использовать этот ярлык:
источник
Я собираюсь использовать ответ Рафаэля и расширить его - но вместо добавления метода в класс блока, почему бы не создать помощника и добавить его туда?
Начните с создания нового модуля обычным способом, а в корне создайте новую папку с именем «Помощник» и добавьте туда необходимый код:
После активации и компиляции вы сможете использовать его в файле шаблона следующим способом:
Я надеюсь, что вы (и, возможно, другие) найдете это полезным!
источник
По крайней мере, в 2.2.6 вы можете использовать
Magento\Framework\UrlInterface::getDirectUrl()
источник