Jak dostać się do Media URL
pliku szablonu? Wszystko, co znalazłem, to bezpośrednie wywoływanie Object Managera. Moja kolejna obawa: czy kiedykolwiek możesz nazwać menedżera obiektów bezpośrednio najlepszą praktyką? (ponieważ w większości rozwiązań używają menedżera obiektów)
magento2
template
magento-2.1
media
object-manager
Vishwas Bhatnagar
źródło
źródło
\Magento\Framework\View\Element\Template
, masz już instancjęStoreManagerInterface
($this->_storeManager
).Od wersji 2.1 nie ma bezpośredniego sposobu na uzyskanie adresu URL multimediów bez:
Rakesh wspomniał o jednym ze sposobów.
Innym sposobem jest użycie chronionej zmiennej,
$_urlBuilder
która jest dołączana do każdego bloku, zgodnie z definicją wAbstractBlock
: https://github.com/magento/magento2/blob/f2d309a88298886460351c04973a4ff95c7a91c0/lib/internal/Magento/Framework/View/Element/pstractBlock.ph # L186Dzięki temu nie musisz modyfikować konstruktora swojego bloku i możesz po prostu dodać następującą metodę:
Następnie w swoim szablonie możesz zadzwonić:
źródło
Jeśli nie chcesz zająć się rozszerzaniem \ Magento \ Framework \ View \ Element \ Template, a chcesz, aby plik .phtml używał bloku \ Magento \ Framework \ View \ Element \ Template, możesz użyć ten skrót:
źródło
Wykorzystam odpowiedź Raphaela i rozszerzę ją - ale zamiast dodawać metodę do klasy bloków, dlaczego nie stworzyć pomocnika i tam dodać?
Zacznij od utworzenia nowego modułu w zwykły sposób, aw katalogu głównym utwórz nowy folder o nazwie „Pomocnik” i dodaj tam wymagany kod:
Po aktywacji i kompilacji będziesz mógł używać go w pliku szablonu, używając następującej metody:
Mam nadzieję, że ty (i potencjalnie inni) znajdziesz to bardzo przydatne!
źródło
Możesz użyć przynajmniej w wersji 2.2.6
Magento\Framework\UrlInterface::getDirectUrl()
źródło