Utknąłem w nadrzędnym modelu rdzenia Bloki i kontrolery w Magento2. Czy ktoś może w tym pomóc?
Weźmy na przykład pasek narzędzi listy, w którym muszę dodać nową opcję sortowania o nazwie sortuj według najpopularniejszych . Jak mogę to dodać? Myślę, że do tego musimy dodać opcję na poziomie bloku i warunek na List.php
poziomie kolekcji.
Odpowiedzi:
Magento2 dał bardzo dobrą koncepcję o nazwie Plugin
możemy zrobić to, co kiedykolwiek po i przed funkcją podstawową, a także mamy jeszcze jedną wywoływaną wokół, która zrobi zarówno przed, jak i poniżej, kod, który obejmie wszystkie informacje
Utwórz plik di.xml w Mymodule / etc / di.xml
w tym wziąłem przykład modelu produktu i bloku widoku produktu
Użyłem w bloku widoku produktu, który jest dowolną funkcją, użyj prefiksu wokół, a następnie upewnij się, że 2 parametr powinien być pierwszy, który to obiekt, którego używasz 2. zamknięcie, które zachowuje stare informacje o zwrocie
W modelu i używany przed i po nim jest
w ten sposób możemy zachować stary kod, więc jeśli jutro podstawowy kod Magento zostanie zaktualizowany, będziemy mieli zarówno nowy zaktualizowany kod, jak i naszą niestandardową logikę, jeśli bezpośrednio zastąpimy, stracimy nowy zaktualizowany kod tej funkcji lub pliku :-)
http://devdocs.magento.com/guides/v2.0/extension-dev-guide/plugins.html
źródło
W końcu to dostałam !!!!
Wykonuję poniższe kroki, aby zastąpić blok, kontroler i model. Wziąłem przykład modelu produktu i widoku produktu Blok i podgląd kontrolera / działania
Utwórz plik o nazwie di.xml w swoim /etc/di.xml
Następnie utworzyłem plik modelu w /Model/Product.php
Następnie utworzyłem plik bloku w /Block/Product/View.php
Teraz utwórz kontroler widoku produktu /Controller/Product/View.php
Dla mnie działa dobrze :-)
źródło
Istnieją dwa kroki do zastąpienia pliku bloku, modelu i kontrolera
1) Dodaj preferencje w di.xml
2) Utwórz plik bloku, modelu i kontrolera w swoim module
1) Utwórz plik di.xml w folderze
Prince/Helloworld/etc
2) Utwórz ListProduct.php w folderze
Prince/Helloworld/Block/Rewrite/Product
1) Dodaj preferencje w di.xml w
Prince/Helloworld/etc
2) Utwórz plik modelu Product.php w folderze
Prince/Helloworld/Model/Rewrite/Catalog
1) Dodaj preferencje w di.xml w
Prince/Helloworld/etc
2) Utwórz View.php w folderze
Prince/Helloworld/Controller/Rewrite/Product
Możesz zastąpić inne bloki, modele i kontrolery, stosując to samo podejście.
źródło
Mała korekta, ale duża użyteczność, nie musimy tworzyć n liczby plików dla każdej funkcji w koncepcji wtyczek. Dla jednego modułu wystarczy jeden plik wtyczki, abyś mógł rozszerzyć cały moduł, wszystkie modele i bloki oraz kontroler kompletnego Magento, to sam sprawdzi poniższy kod
oraz we wtyczce pliku php
Magento2 Rocks
źródło
Uncaught Error: Call to undefined method Magento\\Backend\\Model\\View\\Result\\Redirect\\Interceptor::getEntityId()
Tutaj\Clousure $proceed
dostaje obejct zMagento\\Backend\\Model\\View\\Result\\Redirect\\Interceptor
Możesz bezpośrednio rozszerzyć klasę magento bloku lub kontrolera w swoim niestandardowym bloku lub kontrolerze. Na przykład, rozszerzając model faktury PDF w moim module niestandardowym, aby zmienić logo faktury Generowanie pliku PDF w taki sam sposób, jak można zastąpić blok lub kontroler. aby utworzyć plik di.xml i nie trzeba ustawiać preferencji.
}
źródło
di.xml
. Brakuje mi tej dość istotnej części w twojej odpowiedzi ...Deweloper / Helloworld / register.php
Deweloper / Helloworld / etc / module.xml
Deweloper / Helloworld / etc / di.xml
źródło
Klasę akcji można przepisać w taki sam sposób, jak w Magento 1. W Magento 1 mieliśmy
before
atrybut wokół tagów<routers>..<args><modules><... before="Mage_Catalog">Namespace_MyModule ..
W
[module path]/etc/[nothing|adminhtml|frontend]/routes.xml
:A klasa akcji
\Namespace\MyModule\Controller\[same path of action as in core module]\SameActionName.php
gdzieclass SameActionName.php extends \Magento\Catalog\...\SameActionName
To jest moduł Magento_Catalog, plik
Magento\Catalog\etc\adminhtml\routes.xml
rejestrujący nową trasę w adminie :http://devdocs.magento.com/guides/v2.1/extension-dev-guide/routing.html
Nie uważam, aby preferencje lub wtyczki do klas Action były dobrym pomysłem najlepszych praktyk Magento. I może być więcej.
źródło
Aby zastąpić klasę bezpośrednio, musisz użyć preferencji. Zobacz więcej na temat dokumentacji programistów: https://devdocs.magento.com/guides/v2.0/extension-dev-guide/build/di-xml-file.html#abstraction-implementation-mappings
Przez większość czasu używamy przechwytywaczy (wtyczki), ponieważ jest to najlepsza praktyka przepisywania lub dodawania części modyfikacji. Zobacz dokumentacje programistów: https://devdocs.magento.com/guides/v2.0/extension-dev-guide/plugins.html
Zachowując przykład sortowania elementów listy poprzez dodanie nowego porządku sortowania „Najpopularniejsze” Zapewniam cię najlepszy sposób modyfikacji wyniku.
Utwórz niestandardowy moduł i utwórz konfigurację
app/code/Arsal/SortOption/etc/module.xml
:Teraz zarejestruj swój moduł
app/code/Arsal/SortOption/registration.php
:Teraz utwórz di.xml
app/code/Arsal/SortOption/etc/di.xml
:Teraz utwórz klasę bloków
Arsal\SortOption\Block\Product\ProductListToolbar.php
:Spowoduje to dodanie niestandardowej opcji sortowania do listy sortowania. }
źródło