Menu

Magento 005: Tạo một module mới trong magento

Trong phần kiến trúc magento chúng ta đã biết rằng tất cả các chức năng của Magento đều được module hóa hay nói cách khác Magento là một tập hợp các module thực hiện những nhiệm vụ khác nhau. Trong bài này mình sẽ hướng dẫn các bạn tạo ra một module mới có đầy đủ các thành phần chính với tên là “Helloworld”.

Chú ý- Tất cả các module demo được viết trong thư mục local bởi vì chắc chắn magento sẽ đưa ra những version mới và nếu để code trong thư mục local thì mỗi lần update code của ta vẫn không hề bị ảnh hưởng.

Trước khi đi vào vẫn đề chính ta cần disable all cache để mọi thay đổi trên module mới sẽ được hiển thị ngay trên website mà không cần phải refresh cache.

Truy cập vào: Admin -> System -> Cache Management sau đó chọn all cache và disable chúng.

Ok đã xong phần chuẩn bị và bây giờ chúng ta sẽ bắt đầu tạo một module tên “Helloworld” với namespace là “Basetut”. Vì đây là module đầu tiên nên mình sẽ làm đơn giản nhất để các bạn có thể hiểu được. Module này chỉ có nhiệm vụ in ra dòng text “Hello world!” ngoài frontend.

* Bước 1: tạo các thư mục chính cho module

Đầu tiên mình sẽ tạo một hệ thống các thư mục cần thiết:

appcodelocalBasetutHelloworld

appcodelocalBasetutHelloworldcontrollers

appcodelocalBasetutHelloworldetc

appcodelocalBasetutHelloworldetcconfig.xml

appcodelocalBasetutHelloworldHelper

appcodelocalBasetutHelloworldModel

* Bước 2: Tạo file cấu hình cho module với tên là Basetut_Helloworld.xml trong thư mục app/etc/modules

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?xml version=”1.0″?>
 
<config>
 
<modules>
 
<Basetut_Helloworld>
 
<active>true</active>
 
<codePool>local</codePool>
 
</Basetut_Helloworld>
 
</modules>
 
</config>

File này có tác dụng 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).

* Bước 3: tạo file config.xml trong thư mục appcodelocalBasetutHelloworldetc để khai báo các thành phần của module cho hệ thống magento.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
</pre>
<?xml version="1.0"?>
<config>
 <modules>
 <Basetut_Helloworld>
 <version>0.1.0</version>
 </Basetut_Helloworld>
 </modules>
 <frontend>
 <routers>
 <helloworld>
 <use>standard</use>
 <args>
 <module>Basetut_Helloworld</module>
 <frontName>helloworld</frontName>
 </args>
 </helloworld>
 </routers>
 <layout>
 <updates>
 <helloworld>
 <file>helloworld.xml</file>
 </helloworld>
 </updates>
 </layout>
 </frontend>
 <global>
 <blocks>
 <helloworld>
 <class>Basetut_Helloworld_Block</class>
 </helloworld>
 </blocks>
 </global>
</config>
<pre>

Trong file config này ta có khai báo một số thông tin cho module:
+ version: 1.0 – version hiện tại của module là 1.0
+ thư mục đặt block của module là app/code/local/Basetut/Helloworld/Block (nếu không có config này thì ta sẽ không thể dùng được block của nó)
+ router hay frontname trên frontend là helloworld
+ file layout frontend là helloworld.xml

* Bước 4: viết block helloword

File Helloworld.php trong thư mục app/code/local/Basetut/Helloworld/Block

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
</pre>
<?php
 
class Basetut_Helloworld_Block_Helloworld extends Mage_Core_Block_Template
{
 /**
 * prepare block's layout
 *
 * @return Basetut_Helloworld_Block_Helloworld
 */
 public function _prepareLayout()
 {
 return parent::_prepareLayout();
 }
}
<pre>

* Bước 5: tạo file template helloworld.phtml

trong thư mục app/design/frontent/default/default/template/helloworld với nội dung

1
<?php echo $this->__('Hello world!') ?>

* Bước 6: tạo file layout helloworld.xml trong thư mục: app/design/fronted/default/default/layout

1
2
3
4
5
6
7
8
<?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 chỉ cần nắm được một số thông tin sau:
+ handle: helloworld_index_index
– helloworld: router name (đã khai báo trong file config.xml)
– index: controller name (chưa tạo controller :v)
– 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 một tut 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 1 đường link trong magento. Ví dụ handle helloworld_index_index trong ví dụ này nó 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/helloworld” như vậy đường dẫn đến file block là app/code/local/Basetut/Hellowordl/Block/Helloworld. Mọi người để ý sự tương đồng giữa phần in đậm và type của block nhé!
name: đây chỉ là tên của block trong cái handle mà thôi (mục đích để phần biệt với các block khác)
template: đây là đường dẫn đến file template mà block kia map (liên kết) tới trong handle này. Sau khi khai báo như thế này mỗi lần file template sử dụng con trỏ $this hệ thống sẽ gọi tới block Helloworld (chỉ ở trong handle này thôi nhé!).

* Bước 7: tạo controller IndexController.php trong thư mục app/code/local/Basetut/Helloworld/controllers

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
 
class Basetut_Helloworld_IndexController extends Mage_Core_Controller_Front_Action
{
 /**
 * index action
 */
 public function indexAction()
 {
 $this->loadLayout();
 $this->renderLayout();
 }
}

Tại sao ta lại lấy tên controller là index? Khi người dùng đánh vào 1 đườ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ỉ bao gồm có 2 câu lệnh:
+ $this->loadLayout(): dùng để load layout, block, template từ file layout ra
+ $this->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 vừa hoàn thành được module đầu tiên trên open source Magento. Bây giờ chúng ta sẽ xem thành quả nhé!
+ Copy source code vào thư mục cài magento
+ Disable/refresh cache trước khi chạy
+ Truy cập vào đường link http://yoursite.com/helloworld (với yoursite.com là website của bạn, của mình là localhost.com)
Kết quả hiển thị:
helloworld

Các bạn hãy tìm hiểu kỹ tut này sau đó làm theo để xem có ra được kết quả như mình không nhé! Nếu có bất cứ vấn đề gì có thể comment và mình sẽ trả lời ngay lập tức.
Nếu vẫn ko làm được các bạn hãy download source code của module Helloworld version 1.0 về xem nhé!
basetut_helloword_v1.0

Facebook Comments

No comments

Trả lời