Я застрял в основной модели блоков и контроллеров в Magento2. Может ли кто-нибудь помочь в этом?
Давайте возьмем панель инструментов списка в качестве примера, где мне нужно добавить новую опцию сортировки под названием сортировка по наиболее популярным . Как мне это добавить? Я думаю, для этого нам нужно добавить опцию на уровне блока и условия на List.php
уровне коллекции.
Ответы:
Magento2 дал очень хорошую концепцию под названием плагин
мы можем делать то, что когда-либо после и до основной функции, а также у нас есть еще одна вызванная функция, которая будет делать как до, так и после, это код, который будет охватывать всю информацию
Создайте файл di.xml в Mymodule / etc / di.xml
в этом я взял пример модели продукта и блока просмотра продукта
Я использовал в блоке Product View, который является префиксом любой функции, и затем убедитесь, что 2 параметра должны быть там. Первый - это объект, который вы используете, 2-й. Closure, который сохраняет старую возвращаемую информацию.
В модели я использовал до и после этого
таким образом, мы можем сохранить старый код, поэтому, если завтра основной код Magento будет обновлен, у нас будет и новый обновленный код, и наша пользовательская логика, если мы напрямую переопределим, то мы потеряли новый обновленный код этой функции или файла :-)
http://devdocs.magento.com/guides/v2.0/extension-dev-guide/plugins.html
источник
Наконец то я понял !!!!
Я следую приведенным ниже шагам, чтобы переопределить блок, контроллер и модель. Я взял пример модели продукта и блок просмотра продукта и просмотр контроллера / действия.
Создайте файл с именем di.xml в вашем /etc/di.xml
Затем я создал файл модели в /Model/Product.php
Затем я создал файл блока в /Block/Product/View.php
Теперь создайте контроллер представления продукта /Controller/Product/View.php
Это работает отлично для меня :-)
источник
Есть два шага для переопределения файла блока, модели и контроллера
1) Добавить предпочтение в di.xml
2) Создайте блок, модель и файл контроллера в вашем модуле
1) Создайте файл di.xml в папке
Prince/Helloworld/etc
2) Создать ListProduct.php в папке
Prince/Helloworld/Block/Rewrite/Product
1) Добавить предпочтение в di.xml на
Prince/Helloworld/etc
2) Создать файл модели Product.php в папке
Prince/Helloworld/Model/Rewrite/Catalog
1) Добавить предпочтение в di.xml на
Prince/Helloworld/etc
2) Создать View.php в папке
Prince/Helloworld/Controller/Rewrite/Product
Вы можете переопределить другие блоки, модели и контроллеры, используя тот же подход.
источник
Небольшая коррекция, но большая полезность, нам не нужно создавать n номеров файлов для каждой функции в концепции плагина. Для одного модуля достаточно одного подключаемого файла, так что вы можете расширить весь модуль, все модели и блоки, а также полностью завершить самопроверку Magento по приведенному ниже коду.
и в PHP-файле плагина
Magento2 Скалы
источник
Uncaught Error: Call to undefined method Magento\\Backend\\Model\\View\\Result\\Redirect\\Interceptor::getEntityId()
Здесь\Clousure $proceed
получая объект отMagento\\Backend\\Model\\View\\Result\\Redirect\\Interceptor
Вы можете напрямую расширить класс блоков или контроллеров magento в своем пользовательском блоке или контроллере. Например, при расширении модели счета-фактуры PDF в моем пользовательском модуле, чтобы изменить логотип счета-фактуры PDF, генерируемого таким же образом, как вы можете переопределить блок или контроллер. создать файл di.xml и не нужно устанавливать предпочтения.
}
источник
di.xml
. ЯРазработчик / Helloworld / registration.php
Разработчик / Helloworld / и т.д. / module.xml
Разработчик / Helloworld / и т.д. / di.xml
источник
Класс действия может быть переписан так же, как в Magento 1. В Magento 1 у нас были
before
атрибуты вокруг тегов.<routers>..<args><modules><... before="Mage_Catalog">Namespace_MyModule ..
В
[module path]/etc/[nothing|adminhtml|frontend]/routes.xml
:И класс действий,
\Namespace\MyModule\Controller\[same path of action as in core module]\SameActionName.php
гдеclass SameActionName.php extends \Magento\Catalog\...\SameActionName
Это модуль Magento_Catalog, файл
Magento\Catalog\etc\adminhtml\routes.xml
регистрации нового маршрута в админке:http://devdocs.magento.com/guides/v2.1/extension-dev-guide/routing.html
Я не верю, что предпочтения или плагины для классов Action являются хорошей идеей лучших практик Magento. И может быть что-то еще.
источник
Чтобы переопределить класс напрямую, вам необходимо использовать настройки. Более подробную информацию можно найти в документации разработчика: https://devdocs.magento.com/guides/v2.0/extension-dev-guide/build/di-xml-file.html#abstraction-implementation-mappings.
В большинстве случаев мы используем перехватчики. (плагинов), потому что это лучшая практика, чтобы переписать или добавить часть ваших изменений. См. Документацию разработчиков: https://devdocs.magento.com/guides/v2.0/extension-dev-guide/plugins.html.
Придерживаясь примера сортировки элементов списка, добавив новый порядок сортировки «Самые популярные», я предоставляю вам лучший способ изменить результат.
Создайте пользовательский модуль и создайте конфигурацию
app/code/Arsal/SortOption/etc/module.xml
:Теперь зарегистрируйте свой модуль
app/code/Arsal/SortOption/registration.php
:Теперь создайте di.xml
app/code/Arsal/SortOption/etc/di.xml
:Теперь создайте класс блока
Arsal\SortOption\Block\Product\ProductListToolbar.php
:Это добавит пользовательский параметр порядка сортировки в список порядка сортировки. }
источник