Saya terjebak dalam mengesampingkan Blok model inti dan pengontrol di Magento2. Adakah yang bisa membantu dalam hal ini?
Mari kita ambil toolbar daftar sebagai contoh di mana saya perlu menambahkan opsi urutkan baru yang disebut urutkan berdasarkan yang paling populer . Bagaimana saya menambahkannya? Saya kira untuk ini kita perlu menambahkan opsi di tingkat blok dan kondisi di List.php
tingkat pengumpulan.
Jawaban:
Magento2 memberikan konsep yang sangat bagus yang disebut Plugin
kita dapat melakukan apa yang pernah dan sebelum fungsi inti dan juga kita memiliki satu lagi dipanggil yang akan melakukan keduanya sebelum dan sesudah di bawah ini adalah kode yang akan mencakup semua info
Buat file di.xml di Mymodule / etc / di.xml
dalam hal ini saya mengambil contoh Model produk dan Blok Tampilan Produk
Saya menggunakan sekitar di blok Product View yang merupakan fungsi menggunakan awalan sekitar dan kemudian pastikan 2 parameter harus ada yang pertama adalah objek yang Anda gunakan 2 satu Penutupan yang mempertahankan info pengembalian lama
Dalam model i Digunakan sebelum dan sesudahnya
dengan cara ini kita dapat menyimpan kode lama jadi jika besok kode inti Magento diperbarui, kita akan memiliki kode baru yang diperbarui dan logika kustom kita jika kita langsung mengganti maka kita kehilangan kode baru yang diperbarui dari fungsi atau file itu :-)
http://devdocs.magento.com/guides/v2.0/extension-dev-guide/plugins.html
sumber
Akhirnya saya mendapatkannya !!!!
Saya mengikuti langkah-langkah di bawah ini untuk mengesampingkan Blok, Pengendali dan Model. Saya mengambil Exmaple Model Produk dan Blok Tampilan Produk dan Melihat Pengendali / Tindakan
Buat file bernama di.xml di /etc/di.xml Anda
Kemudian saya membuat File Model di /Model/Product.php
Kemudian saya membuat Block file di /Block/Product/View.php
Sekarang Buat Pengontrol Tampilan Produk / Controll/Product/View.php
Ini berfungsi dengan baik untuk saya :-)
sumber
Ada dua langkah untuk mengganti file Block, Model And Controller
1) Tambahkan preferensi dalam di.xml
2) Buat blok, model, dan file pengontrol di modul Anda
1) Buat file di.xml di Folder
Prince/Helloworld/etc
2) Buat ListProduct.php di Folder
Prince/Helloworld/Block/Rewrite/Product
1) Tambahkan preferensi dalam di.xml di
Prince/Helloworld/etc
2) Buat file Model Product.php di Folder
Prince/Helloworld/Model/Rewrite/Catalog
1) Tambahkan preferensi dalam di.xml di
Prince/Helloworld/etc
2) Buat View.php di Folder
Prince/Helloworld/Controller/Rewrite/Product
Anda bisa mengganti blok, model, dan pengontrol lainnya menggunakan pendekatan yang sama.
sumber
Koreksi kecil tapi bermanfaat besar, kita tidak perlu membuat n jumlah file untuk setiap fungsi dalam konsep plugin. Untuk satu modul satu file plugin sudah cukup karena Anda dapat memperluas semua modul, semua model dan blok dan pengontrol Magento lengkap itu sendiri periksa di bawah kode
dan dalam file plugin php
Magento2 Rocks
sumber
Uncaught Error: Call to undefined method Magento\\Backend\\Model\\View\\Result\\Redirect\\Interceptor::getEntityId()
sini\Clousure $proceed
mendapatkan obejct dariMagento\\Backend\\Model\\View\\Result\\Redirect\\Interceptor
Anda dapat langsung memperluas blok atau kelas pengontrol magento di blok atau pengontrol khusus Anda. Misalnya, dalam memperluas model faktur PDF dalam modul khusus saya untuk mengubah logo pembuatan faktur PDF dengan cara yang sama Anda dapat mengganti blok atau pengontrol. Anda tidak dapat untuk membuat file di.xml dan tidak perlu mengatur preferensi.
}
sumber
di.xml
. Saya kehilangan bagian yang cukup penting ini dalam jawaban Anda ...Pengembang / Helloworld / registrasi.php
Pengembang / Helloworld / etc / module.xml
Pengembang / Helloworld / etc / di.xml
sumber
Kelas tindakan dapat ditulis ulang dengan cara yang sama seperti di Magento 1. Di Magento 1 kami memiliki
before
atribut di sekitar tag<routers>..<args><modules><... before="Mage_Catalog">Namespace_MyModule ..
Di
[module path]/etc/[nothing|adminhtml|frontend]/routes.xml
:Dan kelas aksi di
\Namespace\MyModule\Controller\[same path of action as in core module]\SameActionName.php
manaclass SameActionName.php extends \Magento\Catalog\...\SameActionName
Ini adalah modul Magento_Catalog, file yang
Magento\Catalog\etc\adminhtml\routes.xml
mendaftarkan rute baru di admin:http://devdocs.magento.com/guides/v2.1/extension-dev-guide/routing.html
Saya tidak percaya preferensi atau plugin pada kelas Action adalah ide yang bagus oleh praktik terbaik Magento. Dan mungkin ada lebih dari itu.
sumber
Untuk mengganti kelas secara langsung, Anda harus menggunakan preferensi. Lihat lebih lanjut tentang dev docs: https://devdocs.magento.com/guides/v2.0/extension-dev-guide/build/di-xml-file.html#abstraction-implementation-mappings
Untuk sebagian besar waktu kami menggunakan Interceptor (plugin) karena ini adalah praktik terbaik untuk menulis ulang atau menambahkan bagian dari modifikasi Anda. Lihat dev docs: https://devdocs.magento.com/guides/v2.0/extension-dev-guide/plugins.html
Dengan menjaga contoh pengurutan item daftar Anda dengan menambahkan pesanan sortir baru dengan menambahkan pesanan sortir baru 'Paling Populer' Saya memberikan Anda cara terbaik untuk memodifikasi hasilnya.
Buat modul khusus dan buat konfigurasi
app/code/Arsal/SortOption/etc/module.xml
:Sekarang Daftarkan modul Anda
app/code/Arsal/SortOption/registration.php
:Sekarang buat di.xml
app/code/Arsal/SortOption/etc/di.xml
:Sekarang buat kelas blok
Arsal\SortOption\Block\Product\ProductListToolbar.php
:Ini akan menambahkan opsi urutan pesanan khusus untuk mengurutkan daftar pesanan. }
sumber