Tuesday, November 1, 2011

Belajar Magento (Rute ke Controller)

Bulan ini kita mulai dengan mempelajari sesuatu yang baru. Nah bahan untuk belajar skrng adalah Magento.

Magento adalah salah satu shopping cart software yang sangat terkenal. Bukti nya saja dia dibeli oleh Ebay. Dan dari pengalaman menggunakan beberapa product shopping cart yang serupa (khusus nya yang menggunakan php), magento adalah yang paling kompleks, namun memiliki feature yang paling lengkap. Dan dari segi programming bnyk yang menganggap Magento adalah salah suatu masterpiece software yang berbasiskan php.

Setelah mempelajari magento beberapa saat, ternyata magento sangat menarik untuk dipelajari. Terdapat beberapa kekurangan dari magento, seperti contoh nya Magento membutuhkan resource yang cukup besar untuk meload suatu page. Tercatat magento membutuhkan sekitar 38 MB untuk meload suatu page yang mana diload tanpa cache dan hanya untuk 1 (satu) request. Besar kan? Maka oleh karena itu, hampir tidak mungkin magento dapat di host pada shared hosting yang biasa nya untuk mengeksekusi php saja dibatasi sebesar 32 MB.

Magento juga menggunakan framework MVC seperti kebanyakan product lainnya. Nah, seperti langkah belajar sebelumnya, mari kita cari tau, bagaimana alur sampai request yang masuk keserver sampai dihandle oleh controller dari Magento.
  1. Semua request ke magento, akan selalu di redirect index.php oleh .htaccess.  htaccess sendiri sebetulnya biasa digunakan untuk webserver apache. Tapi disebutkan juga bahwa beberapa webserver mensupport htaccess.
  2. Kemudian dari index.php, dilanjutkan ke Mage.php yang dinstantiate dan memanggil function run. Class Mage ini merupakan class penghubung dari sysem keseluruhan dari magento. Dan class Mage ini akan selalu digunakan dalam memanggil komponen komponen magento lainnya
  3. Dari fungsi run tersebut application model di instantiate (Mage_Core_Model_App) yang kemudian akan memanggil front controller (Mage_Core_Controller_Varien_Front).
  4. Class dari front controller tersebut adalah Mage_Core_Controller_Varien_Front. Fungsi init dari class tersebut mengambil configurasi yang didefinisikan pada file app/code/core/Mage/Core/etc/Config.xml untuk key di node stores/default/web/router. dan didapat 2 record yang merupakan Class Router. Yang pertama adalah router untuk admin area (Mage_Core_Controller_Varien_Router_Admin) dan router untuk frontend area (Mage_Core_Controller_Varien_Router_Standard)
  5. Dari Mage_Core_Model_App, front controller di dispatch. Pada proses dispatch ini, router akan memanggil function match, yang mana akan mengambil config sesuai dengan area dan module yang akan dituju. Pada admin akan diambil configurasi di node admin/routers/modulename, sedangkan pada frontend akan diambil configurasi di node frontend/routers/modulename. File dari configurasi tersebut semua terdapat pada file etc/config.xml untuk setiap module.
  6. Saat module, controller, dan action ditemukan maka Selanjutnya request akan dihandle oleh module/controller/action yang dituju. 
  7. Note : Magento sendiri memiliki Mekanisme URL Rewrite tersendiri, tidak menggunakan .htaccess yang biasa digunakan pada applikasi lain. Pada product, category, URL rewrite disimpan pada database. Selain itu terdapat juga cara untuk rewrite  melalui config dengan node global\rewrite. Contoh nya : 
    <global>
            <rewrite>
                <nama_unik_halaman>
                    <from>halaman/yang/direwrite</from>
                    <to>halaman/hasil/rewrite</to>
                </nama_unik_halaman>
            </rewrite>
    </global>
    
Dengan mengetahui alur kerja dari routing magento,  tentu dengan mudah kita dapat menentukan controller yang mana yang akan di hit oleh magento untuk sebuah request. Selain itu kita juga bahkan dapat menciptakan sendiri page sendiri dari framework yang sudah terdapat pada magento ini sendiri.

No comments:

Post a Comment