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 berikut
cd /path/to/store/app
touch etc/modules/MyCompanyName_HelloWorld.xml
<?xml version="1.0"?>
<config>
<modules>
<MyCompanyName_HelloWorld>
<active>true</active>
<codePool>local</codePool>
</MyCompanyName_HelloWorld>
</modules>
</config>
MyCompanyName 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
- Pergi ke Sistem-> Manajemen Cache
- Pilih Refresh dari menu All Cache
- Klik Simpan pengaturan Cache
Sekarang, kami memastikan bahwa Magento tahu tentang modul
- Pergi ke System-> Configuration
- Klik Tingkat Lanjut
- Di kotak pengaturan "Nonaktifkan modul keluaran", cari modul baru Anda bernama "MyCompanyName_HelloWorld"
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.
mkdir -p app/code/local/MyCompanyName/HelloWorld/Block
mkdir -p app/code/local/MyCompanyName/HelloWorld/controllers
mkdir -p app/code/local/MyCompanyName/HelloWorld/Model
mkdir -p app/code/local/MyCompanyName/HelloWorld/Helper
mkdir -p app/code/local/MyCompanyName/HelloWorld/etc
mkdir -p app/code/local/MyCompanyName/HelloWorld/sql
Dan tambahkan file konfigurasi
touch app/code/local/MyCompanyName/HelloWorld/etc/config.xml
dan di dalam file konfigurasi, tambahkan berikut ini, yang pada dasarnya merupakan konfigurasi "kosong".
<?xml version="1.0"?>
<config>
<modules>
<MyCompanyName_HelloWorld>
<version>0.1.0</version>
</MyCompanyName_HelloWorld>
</modules>
</config>
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
http://example.com/magento/index.php/helloworld
Jadi, di file konfigurasi Anda, tambahkan bagian berikut.
<config>
<!-- ... -->
<frontend>
<routers>
<!-- the <helloworld> tagname appears to be arbitrary, but by
convention is should match the frontName tag below-->
<helloworld>
<use>standard</use>
<args>
<module>MyCompanyName_HelloWorld</module>
<frontName>helloworld</frontName>
</args>
</helloworld>
</routers>
</frontend>
<!-- ... -->
</config>
Apa yang Anda katakan di sini adalah "URL apa pun dengan nama depan helloworld ...
http://example.com/magento/index.php/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.
touch app/code/local/MyCompanyName/HelloWorld/controllers/IndexController.php
Sekarang coba muat halaman. Kemajuan! Alih-alih 404, Anda akan mendapatkan pengecualian PHP / Magento
Controller file was loaded but class does not exist
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.
<?php
class MyCompanyName_HelloWorld_IndexController extends Mage_Core_Controller_Front_Action{
public function indexAction(){
echo "We're echoing just to show that this is what's called, normally you'd have some kind of redirect going on here";
}
}
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 inihttp://example.com/magento/index.php/frontName/controllerName/actionName
Jadi jika Anda ingin mencocokkan url ini
http://example.com/magento/index.php/helloworld/foo
Anda harus memiliki FooController, yang dapat Anda lakukan dengan cara ini:
touch app/code/local/MyCompanyName/HelloWorld/controllers/FooController.php
<?php
class MyCompanyName_HelloWorld_FooController extends Mage_Core_Controller_Front_Action{
public function indexAction(){
echo 'Foo Index Action';
}
public function addAction(){
echo 'Foo add Action';
}
public function deleteAction(){
echo 'Foo delete Action';
}
}
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
http://example.com/magento/index.php/helloworld/foo
http://example.com/magento/index.php/helloworld/foo/add
http://example.com/magento/index.php/helloworld/foo/delete
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.