ale tutaj jest haczyk.
musisz utworzyć chroniony element członkowski w modelu o nazwie _blockFactoryi wstrzyknąć wystąpienie \Magento\Framework\View\Element\BlockFactoryw konstruktorze i przypisać go do tego elementu var.
@Marius $ toplink = $ this-> getLayout () -> getBlock ('top.links') -> toHtml (); użyj w magento 1 dla magento 2 $ this -> _ view-> getLayout () -> getBlock (Full \ Block \ Class \ Name \ Here ') -> toHtml (); to daje błąd taki jak ten Błąd krytyczny: Wywołanie funkcji członkowskiej toHtml () na obiekcie niebędącym obiektem, jak mogę dostać się doHtml ()?
ND17
jeśli jesteś kontrolerem, nie musisz niczego zastrzykiwać _view. Powinien być domyślnie dostępny, choć myślę, że teraz jest przestarzały. Napisałem tę odpowiedź 1,5 roku temu
Marius
1
@SachinS. Nie powinieneś już tego używać. _viewjest teraz przestarzałe w kontrolerach i wkrótce zniknie,
Marius
1
Czy mogę wywoływać za pomocą takiego obiektu pagefactory? $ viewPanelPageFactory = $ this-> resultPageFactory-> create (); $ viewPanel = $ viewPanelPageFactory-> getLayout () -> getBlock ('catalog.leftnav') -> toHtml ();
Sushivam
13
Aby utworzyć instancję bloku, musisz użyć
\Magento\Framework\View\LayoutInterfaceklasy i jej createBlock()metody.
Z klasą pomocnika możesz to zrobić za pomocą tego kodu:
Odpowiedzi:
NIEAKTUALIZOWANE: ODPOWIEDŹ ODNOSI SIĘ DO MAGENTO 2 ALPHA
Chciałbym, żeby to było takie proste.
To zależy od tego, skąd chcesz go utworzyć.
Jeśli chcesz utworzyć instancję z innego bloku, zrób to tak:
Z poziomu kontrolera wykonaj następujące czynności:
Z wnętrza modelu:
ale tutaj jest haczyk.
musisz utworzyć chroniony element członkowski w modelu o nazwie
_blockFactory
i wstrzyknąć wystąpienie\Magento\Framework\View\Element\BlockFactory
w konstruktorze i przypisać go do tego elementu var.Coś takiego:
W przypadku tworzenia bloku z poziomu pomocnika działa tak samo, jak w przypadku modelu
źródło
_view
. Powinien być domyślnie dostępny, choć myślę, że teraz jest przestarzały. Napisałem tę odpowiedź 1,5 roku temu_view
jest teraz przestarzałe w kontrolerach i wkrótce zniknie,Aby utworzyć instancję bloku, musisz użyć
\Magento\Framework\View\LayoutInterface
klasy i jejcreateBlock()
metody.Z klasą pomocnika możesz to zrobić za pomocą tego kodu:
Następnie zadzwoń
$helper->getBlock()
z miejsca, w którym potrzebujesz.źródło