"Hello world" module trong magento 1
Trong bài này, mình sẽ giới thiệu cách viết một module helloworld trong magento 1. Như chúng ta đã biết thì Magento được xây dựng dựa trên rất nhiều module khác nhau và tổng hợp tất cả các module này lại với nhau thì ta có một website thương mại điện tử. Chú ý: Tất cả các module được phát triển ...
Trong bài này, mình sẽ giới thiệu cách viết một module helloworld trong magento 1. Như chúng ta đã biết thì Magento được xây dựng dựa trên rất nhiều module khác nhau và tổng hợp tất cả các module này lại với nhau thì ta có một website thương mại điện tử.
Chú ý: Tất cả các module được phát triển nên được đặt trong thư mục local vì hiện tại nhà cung cấp của magento vẫn đang phát triển và có thể tung ra rất nhiều bản vá, update cho magento vì vậy nếu để trong thư mục khac ngoài local có thể code của bạn sẽ bị ảnh hưởng.
Trước khi bắt đầu, chúng ta cần tắt hết toàn bộ cache trên site magento của mình để module của bạn được thực hiện mà không phải refresh cache sau mỗi lần phát triển.
Truy cập: Admin >> System >> Cache Management >> all cache >> disable.
OK. Bây giờ ta bắt đầu với một module helloworld. Đây sẽ là một module cơ bản nhất cũng như khi bạn bắt đầu một ngôn ngữ mới, nó chỉ có một nhiệm vụ duy nhất là in ra màn hình 2 chữ "HELLO WORLD".
1. Tạo thư mục
Chúng ta cần biết thư mục của chúng ta là những gì, và tại sao!
appcodelocalQuytvHelloworld appcodelocalQuytvHelloworldcontroller appcodelocalQuytvHelloworldetc appcodelocalQuytvHelloworldetcconfig.xml appcodelocalQuytvHelloworldHelper appcodelocalQuytvHelloworldModel
Quytv ở đây được gọi là namespace của module đầu tiên và Helloworld là tên module.
2. Tạo file cấu hình
Trong thư mục appetcmodulesQuytv_Helloworld.xml
<?xml version=”1.0″?> <config> <modules> <Quytv_Helloworld> <active>true</active> <codePool>local</codePool> </Quytv_Helloworld> </modules> </config>
File này có nhiệm vụ khai báo với hệ thống magento codePool và trạng thái của module.
- codePool : local(code được đặt trong thư mục local chứ không phải community hay core)
- active :true(module đang được active)
Trong thư mục: appcodelocalQuytvHelloworldetc
<?xml version="1.0"?> <config> <modules> <Quytv_Helloworld> <version>0.1.0</version> </Quytv_Helloworld> </modules> <frontend> <routers> <helloworld> <use>standard</use> <args> <module>Quytv_Helloworld</module> <frontName>helloworld</frontName> </args> </helloworld> </routers> <layout> <updates> <helloworld> <file>helloworld.xml</file> </helloworld> </updates> </layout> </frontend> <global> <blocks> <helloworld> <class>Quytv_Helloworld_Block</class> </helloworld> </blocks> </global> </config>
Trong file config này ta khai báo một số thông tin cho module
- Verision : 1.0 –verison hiện tại của module là 1.0
- Thư mục đặt block của module là app/code/local/Quytv/Helloworld/Block( nếu không có config này thì ta sẽ không thể dùng được blog của nó)
- Router hay frontname trên frontend là helloworld
- File layout frontend là helloworld.xml
1. Block cho module helloworld
Trong file: app/code/local/Quytv/Helloworld/Block/Helloworld.php
<?php class Quytv_Helloworld_Block_Helloworld extends Mage_Core_Block_Template { /** * prepare block's layout * * @return Quytv_Helloworld_Block_Helloworld */ public function _prepareLayout() { return parent::_prepareLayout(); } }
2. Template
Trong file: app/design/frontend/base/default/template/helloworld/helloworld.phtml
<?php echo $this->__('Hello world!') ?>
3. Layout
Trong file: app/design/frontend/base/default/layout/helloword.xml
<?xml version="1.0"?> <layout version="0.1.0"> <helloworld_index_index> <reference name="content"> <block type="helloworld/helloworld" name="helloworld" template="helloworld/helloworld.phtml" /> </reference> </helloworld_index_index> </layout>
Trong file layout này ta cần nắm được một số thông tin :
- handle : hellowrold_index_index
- Helloworld :router name (đã khai báo trong file config.xml)
- Index : controller name ( chưa tạo controller)
- Index cuối cùng là action name (function trong controller index )
- Để hiểu được luồng hoạt động của magento chúng ta sẽ đi sâu vào trong một bài khác , còn bây giờ chúng ta sẽ tạm hiểu rằng mỗi handle này tương đương với một đường link magento . Ví dụ handle helloworld_index_index trong ví dụ này sẽ tương đương với http://yoursite .com/index.php/helloworld/index/index .
- block
- Type : type này chính là đường dẫn đến file block , trong ví dụ nó có giá trị là “helloworld/helloword” như vậy đường dẫn đến file block là app/code/local/Quytv/Helloworld/Block/Helloworld
- Name : đây chỉ là tên của block trong cái handle mà thôi ( mục đích là để phân biệt với các block khác )
- Template : đây là đường dẫn đến file template mà block map ( liên kết) tới trong handle này . sau khi khai báo như thế này thì mỗi lần file template sử dụng con trỏ $$his hệ thống sẽ gọi tới block Helloworld ( chỉ ở trong handle này thôi nhé )
4. Controller
file: app/code/local/Quytv/Helloworld/controllers/IndexController.php
<?php class Quytv_Helloworld_IndexController extends Mage_Core_Controller_Front_Action { /** * index action */ public function indexAction() { $this->loadLayout(); $this->renderLayout(); } }
Tại sao tao lại lấy tên controller là index ? khi người dùng đánh vào một đường link rút gọn trên trình duyệt http://yoursite.com/helloworld sẽ bị thiếu controller name và action name .Trong trường hợp này hệ thống sẽ biết lấy controller mặc định là IndexController và lấy action mặc định IndexAction. Trong action index ở trên chỉ gồm có hai câu lệnh :
- $$his->loadLayout() : dùng để load layout , block , template từ file layout ra
- $$his->renderLayout() :render giao diện từ những block , template , theo thứ tự đã được định sẵn trong file layout =>> Vậy là chúng ta đã hoàn thành được module đầu tiên trên open source magento . Bây giờ chúng ta sẽ chạy thử :
- Copy source code vào thư mục cài magento
- Disable/refresh cache trước khi chạy
- Truy nhập vào đường link http://yoursite.com/helloworld
5. Kết quả
3. Kết luận
Rất vui khi bạn theo dõi bài viết này của mình, một cách cơ bản nhất cho người mới để bắt đầu một module magento. Mọi ngôn ngữ, lúc bắt đầu luôn là chỗ khó nhất, từ bước cài đặt đén khi tạo được một chương trình hello world và magento cũng vậy nó luôn luôn rất phức tạp với người mới bát đầu.
Hy vọng bài viêt này có thể giúp bạn giảm bớt thời gian đi rất nhiều với magento.
Cám ơn và hẹn gặp lại