Bagaimana hal-hal berikut dapat diselesaikan di Magento?
Tampilkan pesan "Hello World" menggunakan pendekatan controller / view / model. Jadi, jika saya pergi ke
http://example.com/myController
sana akan menampilkan string 'Hello World'. Mampu menunjukkan string ini di dalam templat situs web saya (misalnya, tajuk, catatan kaki, dll.) Akan menjadi bonus.Bagaimana cara menambahkan metode ke pengontrol ini (atau pengontrol baru jika perlu), yang berinteraksi dengan model, dan melakukan kueri
Select * FROM articles where id='10'
dan mengembalikan baris (berisi kolomid, title, content
) ke pengontrol? Dan kemudian gunakan controller untuk menyertakan tampilan, yang akan menampilkan baris ini. Jadi akanhttp://example.com/myController/show_row
(atau yang serupa) akan menampilkan baris dalam tampilan. (Tidak perlu mewah, hanyaecho $row->id;
atau sesuatu yang serupa akan bekerja.)
Informasi lain tentang struktur kode Magento juga akan sangat membantu.
sumber
Jawaban:
Pertama dan terutama, saya sangat menyarankan Anda membeli PDF / E-Book dari Arsitek PHP . Ini US $ 20, tetapi satu-satunya sumber daya "Begini cara Magento bekerja" yang dapat saya temukan. Saya juga mulai menulis tutorial Magento di situs web saya sendiri .
Kedua, jika Anda memiliki pilihan, dan bukan programmer yang berpengalaman atau tidak memiliki akses ke programmer yang berpengalaman (idealnya dalam PHP dan Java), pilih keranjang lain . Magento direkayasa dengan baik, tetapi direkayasa untuk menjadi solusi keranjang belanja yang dapat dibuat oleh programmer lain. Itu tidak direkayasa agar mudah dipahami oleh orang-orang yang pintar, tetapi bukan programmer.
Ketiga, Magento MVC sangat berbeda dari Ruby on Rails , Django , CodeIgniter , CakePHP , dll. Model MVC yang populer di kalangan pengembang PHP dewasa ini. Saya pikir ini didasarkan pada model Zend , dan semuanya sangat mirip Java OOP. Ada dua pengendali yang perlu Anda perhatikan. Modul / pengontrol frontName, dan kemudian pengontrol MVC.
Keempat, aplikasi Magento sendiri dibangun menggunakan sistem modul yang sama dengan yang akan Anda gunakan, jadi mencari-cari kode inti adalah taktik belajar yang berguna. Selain itu, banyak hal yang akan Anda lakukan dengan Magento adalah mengesampingkan kelas yang ada. Yang saya bahas di sini adalah menciptakan fungsionalitas baru, bukan mengesampingkan. Ingatlah ini ketika Anda melihat contoh kode di luar sana.
Saya akan mulai dengan pertanyaan pertama Anda, menunjukkan kepada Anda cara mengatur controller / router untuk menanggapi URL tertentu. Ini akan menjadi novel kecil. Saya mungkin punya waktu nanti untuk topik terkait model / template, tetapi untuk saat ini, saya tidak. Namun, saya akan berbicara singkat dengan pertanyaan SQL Anda.
Magento menggunakan arsitektur basis data EAV . Kapan pun memungkinkan, cobalah untuk menggunakan objek model yang disediakan sistem untuk mendapatkan informasi yang Anda butuhkan. Saya tahu itu semua ada di tabel SQL, tapi yang terbaik adalah tidak memikirkan mengambil data menggunakan query SQL mentah, atau Anda akan menjadi gila.
Penafian akhir. Saya telah menggunakan Magento selama sekitar dua atau tiga minggu, jadi emptor peringatan. Ini adalah latihan untuk meluruskan ini di kepala saya sebanyak itu untuk membantu Stack Overflow.
Buat modul
Semua penambahan dan penyesuaian pada Magento dilakukan melalui modul. Jadi, hal pertama yang perlu Anda lakukan adalah membuat modul baru. Buat file XML dengan
app/modules
nama sebagai berikutMyCompanyName adalah namespace unik untuk modifikasi Anda, tidak harus nama perusahaan Anda, tetapi konvensi yang direkomendasikan magento saya.
HelloWorld
adalah nama modul Anda.Bersihkan cache aplikasi
Sekarang file modul sudah ada, kita perlu memberi tahu Magento tentang hal itu (dan memeriksa pekerjaan kita). Dalam aplikasi admin
Sekarang, kami memastikan bahwa Magento tahu tentang modul
Jika Anda dapat hidup dengan kinerja melambat, Anda mungkin ingin mematikan cache aplikasi saat mengembangkan / belajar. Tidak ada yang lebih membuat frustrasi daripada melupakan membersihkan cache dan bertanya-tanya mengapa perubahan Anda tidak muncul.
Atur struktur direktori
Selanjutnya, kita perlu mengatur struktur direktori untuk modul. Anda tidak akan memerlukan semua direktori ini, tetapi tidak ada salahnya mengatur semuanya sekarang.
Dan tambahkan file konfigurasi
dan di dalam file konfigurasi, tambahkan berikut ini, yang pada dasarnya merupakan konfigurasi "kosong".
Menyederhanakan masalah, file konfigurasi ini memungkinkan Anda memberi tahu Magento kode apa yang ingin Anda jalankan.
Menyiapkan router
Selanjutnya, kita perlu mengatur router modul. Ini akan membuat sistem tahu bahwa kami menangani URL apa pun dalam bentuk
Jadi, di file konfigurasi Anda, tambahkan bagian berikut.
Apa yang Anda katakan di sini adalah "URL apa pun dengan nama depan helloworld ...
harus menggunakan pengontrol frontName MyCompanyName_HelloWorld ".
Jadi, dengan konfigurasi di atas, ketika Anda memuat halaman helloworld di atas, Anda akan mendapatkan 404 halaman. Itu karena kami belum membuat file untuk controller kami. Ayo lakukan sekarang.
Sekarang coba muat halaman. Kemajuan! Alih-alih 404, Anda akan mendapatkan pengecualian PHP / Magento
Jadi, buka file yang baru saja kita buat, dan rekatkan dalam kode berikut. Nama kelas harus didasarkan pada nama yang Anda berikan di router Anda.
Yang baru saja kita siapkan adalah module / frontName controller. Ini adalah pengontrol default dan aksi default modul. Jika Anda ingin menambahkan pengontrol atau tindakan, Anda harus ingat bahwa pohon bagian pertama dari URL Magento tidak dapat diubah mereka akan selalu berjalan seperti ini
http://example.com/magento/index.php/frontName/controllerName/actionName
Jadi jika Anda ingin mencocokkan url ini
Anda harus memiliki FooController, yang dapat Anda lakukan dengan cara ini:
Harap dicatat bahwa pengontrol IndexController default dan indexAction tindakan default dapat secara implisit tetapi harus eksplisit jika sesuatu datang setelahnya. Jadi
http://example.com/magento/index.php/helloworld/foo
akan cocok dengan kontroler FooController dan action indexAction dan BUKAN action fooAction dari IndexController. Jika Anda ingin memiliki fooAction, di controller IndexController Anda kemudian harus memanggil controller ini secara eksplisit seperti ini:http://example.com/magento/index.php/helloworld/index/foo
karena bagian kedua dari url adalah dan akan selalu menjadi controllerName. Perilaku ini merupakan warisan Zend Framework yang dibundel dalam Magento.Anda sekarang harus dapat menekan URL berikut dan melihat hasil pernyataan gema Anda
Jadi, itu seharusnya memberi Anda ide dasar tentang bagaimana Magento dikirim ke controller. Dari sini saya merekomendasikan untuk melihat-lihat di kelas kontroler Magento yang ada untuk melihat bagaimana model dan sistem template / layout harus digunakan.
sumber
Saya telah bergulat dengan Magento selama sebulan terakhir ini dan saya masih berusaha mencari tahu. Jadi ini adalah kasus orang buta menuntun orang buta. Ada sedikit cara dokumentasi dan forum / wiki kacau di terbaik. Bukan hanya itu, tetapi ada beberapa solusi yang sudah usang atau jauh dari optimal. Saya tidak yakin apakah Anda memiliki proyek atau hanya berusaha mencari tahu, tetapi mungkin lebih mudah jika Anda mulai dengan memodifikasi fungsionalitas yang ada sebagai lawan menciptakan sesuatu yang sama sekali baru. Untuk itu saya pasti akan pergi dengan "Artikel yang disarankan untuk pengembang" di wiki. Metode pembayaran baru adalah pembuka mata yang nyata.
Untuk debugging, saya pasti akan merekomendasikan menggunakan FirePHP dan melihat sumber HTML Anda ketika ada masalah. Metode debug ole echo tidak benar-benar berfungsi dengan baik.
Arsitektur umum begitu rumit, sehingga bahkan jika saya benar-benar memahaminya, saya perlu menulis buku untuk menutupinya. Yang terbaik yang bisa saya lakukan adalah memberi Anda saran, saya berharap seseorang memberi saya ketika saya pertama kali mulai ...
Tinggal jauh dari file inti. Jangan memodifikasinya, tulis modul Anda sendiri dan timpa apa yang Anda butuhkan.
Magento menggunakan file config yang terdiri dari XML untuk memutuskan apa yang perlu dilakukan. Untuk menjalankannya sendiri, bukan fungsi inti, Anda perlu xml yang benar. Sayangnya tidak ada panduan tentang cara membangun XML Anda; Anda perlu melihat contoh dan melakukan beberapa pengujian serius. Untuk mempersulit hal-hal, isi dari file-file ini sebagian besar case-sensitive. Namun, jika Anda menguasainya, Anda dapat mengganti bagian mana pun dari fungsi dasar yang membuat sistem menjadi sangat kuat.
Magento menggunakan metode seperti
Mage::getModel('mymodel')
,Mage::getSingleton('mysingleton')
,Mage::helper('myhelper')
untuk kembali objek dari kelas-kelas tertentu. Ia menemukan ini secara default di namespace intinya. Jika Anda ingin menggunakan milik Anda sendiri, Anda harus menimpanya diconfig.xml
file Anda .Nama kelas Anda harus sesuai dengan folder tempat mereka berada.
Banyak objek di Magento pada akhirnya memperluas sesuatu yang disebut
Varien_Object
. Ini adalah kelas tujuan umum (jenis seperti pisau tentara swiss) dan tujuannya dalam hidup adalah untuk memungkinkan Anda menentukan metode / variabel Anda sendiri dengan cepat. Sebagai contoh, Anda akan melihatnya digunakan sebagai array yang dimuliakan untuk meneruskan data dari satu metode ke metode lainnya.Selama pengembangan, pastikan caching Anda dinonaktifkan. Ini akan membuat magento sangat lambat, tetapi itu akan menyelamatkan Anda dari banyak trauma kepala (dari membenturkannya di meja Anda).
Anda akan melihat
$this
banyak digunakan. Ini berarti kelas yang berbeda tergantung pada file apa yang Anda lihat.get_class($this)
adalah teman Anda, terutama dalam hubungannya dengan FirePHP.Tuliskan semuanya di atas kertas. Banyak. Ada banyak factoids kecil yang Anda butuhkan 1-2 hari setelah Anda bertemu mereka.
Magento mencintai OO. Jangan kaget jika melacak suatu metode akan membawa Anda melewati 5-10 kelas yang berbeda.
Baca panduan desainer di sini . Sebagian besar dimaksudkan untuk desainer grafis, tetapi Anda perlu memahami di mana dan mengapa output dari modul Anda akan berakhir. Untuk itu jangan lupa nyalakan "Petunjuk jalur templat" di bagian pengembang panel admin.
Masih ada lagi, tetapi saya akan berhenti di sini sebelum ini berubah menjadi disertasi.
sumber
Saya lebih suka merekomendasikan Mage2Gen , ini akan membantu Anda menghasilkan boilerplate dan Anda hanya bisa fokus pada logika bisnis inti. itu hanya membantu mempercepat hal-hal.
sumber
Modul Magento adalah sekelompok direktori yang berisi blok, pengontrol, pembantu, dan model yang diperlukan untuk membuat fitur toko tertentu. Ini adalah unit penyesuaian di platform Magento. Modul Magento dapat dibuat untuk melakukan banyak fungsi dengan logika yang mendukung untuk memengaruhi pengalaman pengguna dan tampilan etalase. Ini memiliki siklus hidup yang memungkinkan mereka untuk diinstal, dihapus, atau dinonaktifkan. Dari perspektif pedagang dan pengembang ekstensi, modul adalah unit utama dari platform Magento.
Deklarasi Modul
Kita harus mendeklarasikan modul dengan menggunakan file konfigurasi. Ketika Magento 2 mencari modul konfigurasi di direktori modul. Jadi sekarang kita akan membuat file konfigurasi module.xml.
Kode akan terlihat seperti ini:
Pendaftaran Modul Modul harus didaftarkan di sistem Magento 2 dengan menggunakan kelas Magento Component Registrar. Sekarang kita akan membuat file registration.php di direktori root modul:
Kode akan terlihat seperti ini:
Periksa Status Modul Setelah mengikuti langkah-langkah di atas, kita akan membuat modul sederhana. Sekarang kita akan memeriksa status modul dan apakah itu diaktifkan atau dinonaktifkan dengan menggunakan baris perintah berikut:
Bagikan umpan balik Anda setelah Anda melalui proses yang lengkap
sumber
Saya mencoba membuat modul saya dari tutorial halo dunia magaplaza, tetapi ada yang salah. Saya mengimpor kode modul ini https://github.com/astorm/magento2-hello-world dari github dan berhasil. dari modul itu, saya membuatnya menjadi kategori subkategori ajax pilih drop down Modul. Setelah menginstalnya di direktori aap / code dari instalasi magento2 Anda, ikuti URL ini .. http://www.example.com/hello_mvvm/hello/world Anda dapat mengunduh kodenya dari sini https://github.com/sanaullahAhmad/Magento2_cat_subcat_ajax_select_dropdowns dan letakkan di folder aap / code Anda. daripada menjalankan perintah ini ...
Sekarang Anda dapat memeriksa fungsionalitas modul dengan URL berikut http: // {{www.example.com}} / hello_mvvm / hello / world
sumber
Dan,
Saya menyarankan Anda untuk belajar tentang konfigurasi sistem.
Bagaimana Cara Menunjukkan Semua Kategori pada Bidang Konfigurasi Sistem?
Di sini saya memecahkan dengan contoh yang bagus. Itu bekerja. Anda dapat memeriksa dan mempelajari aliran kode.
Ada juga banyak contoh lain yang harus Anda pelajari.
sumber