Module trong Magento CMS

I. Giới thiệu về module trong magento

1 . Khái niệm

Module trong magento là một extension để mở rộng những tính năng trong hệ thống magento khi người dùng cần phát triển thêm.

2 . Các bước tiến hành trước khi xây dựng module magento

  • Vô hiệu hóa chức năng cache: Với chức năng cache, hệ thống magento sẽ lưu trữ các phiên bản của nó, và chúng ta sẽ không xem được các cập nhật mà mình đã phát triển trong hệ thống.

Để vô hiệu hóa chức năng cache, làm theo các bước sau: Admin Panel > System > Cache Management > Select All > Actions: Disable > Submit.

  • Hiểu chức năng của các thư mục trong thư mục app/code: trong thư mục app/code có 3 thư mục chính là core, community và local.

    • Core: thư mục này sẽ chứa tất cả các chức năng chính của hệ thống magento như sản phẩm, các loại sản phẩm, khách hàng, thanh toán... mà các nhà phát triển magento đã xây dựng sẵn cho chúng ta. Trong quá trình phát triển chức năng mới, chúng ta không nên sửa đổi trực tiếp các file trong thư mục này.
    • Community: Thư mục này chứa các modules được cung cấp từ bên thứ ba(không phải đội ngũ nòng cốt của magento . Chúng có thể được cài đặt thông qua chức năng Package Manager của magento.
    • Local: Thư mục chứa các module riêng biệt được cài đặt trong hệ thống magento của chúng ta và cũng là nơi chúng ta phát triển các module chức năng mới.

3.Cấu trúc của module magento

Module magento gồm có sáu thư mục chính: Block, controllers, ect, helper, model, sql.

  • Block: Là nơi lưu trữ tất cả các views class của module.

  • Controllers: Thư mục này chứa các lớp điều khiển, cung cấp tất cả các logic của module.

  • Etc: bao gồm các file xml dùng để config cho module. Tùy theo mỗi module mà có những file xml khác nhau.

  • Helper: Chúng ta sẽ cho vào các helper class tại đây. Các hàm chúng ta định nghĩa trong helper có thể được gọi ở bất cứ chỗ nào. Do đó helper là nơi chứa các "công cụ" giúp quá trình lập trình của chúng ta trở nên dễ dàng.

  • Model: Được sử dụng để làm việc với các dữ liệu khác nhau. Hay nói cách khác, chúng được thiết kế để kết nối với cơ sở dữ liệu và xử lý dữ liệu vào ra

  • Sql: Bao gồm các câu lệnh sql để tạo bảng, tương tác thay đổi dữ liệu khi module được cài đặt hay nâng cấp… Vị trí của các thư mục trong magento app\etc\modules{Namespace}_{Modulename}.xml app\code\local{Namespace}{Modulename} app\code\local{Namespace}{Modulename}\controllers app\code\local{Namespace}{Modulename}\etc app\code\local{Namespace}{Modulename}\Helper app\code\local{Namespace}{Modulename}\Model trong đó

    Namespace: Là tên tổ chức, công ty, cá nhân phát triển module. Sử dụng Namespace với mục đích để tránh xung đột với code của người khác. Modulename: Tên module của chúng ta muốn tạo.

II. Tạo module trong Magento

1. Tạo module

Ở đây chúng ta sẽ tạo một module tên là Test và cấu trúc thư mục của module sẽ được tạo ra như sau:

app/code/local/DemoModule/Test/Block
app/code/local/DemoModule/Test/controllers
app/code/local/DemoModule/Test/etc
app/code/local/DemoModule/Test/Helper
app/code/local/DemoModule/Test/Model
app/code/local/DemoModule/Test/sql

Bước 1: chúng ta sẽ tạo các file config của module trong hệ thống. Đầu tiênlà file config.xml trong folder etc. app/code/local/DemoModule/Test/etc /config.xmlfile thứ 2 cần tạo trong thư mục app/etc/modules app/etc/modules/DemoModule_Test.xml file này được dùng để khai báo tên module chúng ta đang xây dựng cho hệ thống magento biết. code cho hai file:

<config>
  <modules>
    <DemoModule_Test>
      <version>0.1.0</version>
    </DemoModule_Test>
  </modules>
</config>

tiếp theo chúng ta sẽ kiểm tra xem module vừa tạo đã được cài đặt một cách chính xác hay chưa. Chúng ta có thể làm điều này bằng cách vào Admin Panel -> System -> Configuration -> Advanced -> Advanced. Sau đó, chúng ta mở rộng menu"Disable Modules Output". nếu module được cài đặt thành công thì chúng ta sẽ thấy module trong một danh sách. Bước 2: Tạo một controller app/code/local/DemoModule/Test/controllers/IndexController.php cho module. action trong controller.

class DemoModule_Test_IndexController extends Mage_Core_Controller_Front_Action
{
/* khai bảo action mặc định của controller.*/
public function indexAction()
{
/* khởi tạo Mage_Core_Model_Layout cho module*/
$this->loadLayout();
/*xây dựng trang theo layout.*/
$this->renderLayout();}
}

IndexController được gọi là theo mặc định nếu chúng ta không gọi bất kỳ action nào khác. Như chúng ta có thể thấy, trong indexAction chỉ có hai phương pháp, đó là khởi tạo và hiển thị trang web. hai phương pháp này khá đủ cho việc tạo một module đơn giản. Và để cho controller này có thê chạy, chúng ta sẽ thêm một số thông tin trong file config.xml.

<?xml version="1.0" ?>
-<config>
--<modules>
---<DemoModule_Test>
----<version>0.1</version>
---</DemoModule_Test>
--</modules>
-<frontend>
--<routers>
---<test>
----<use>standard</use>
----<args>
-----<module>DemoModule_Test</module>
------<frontName>demoTest</frontName>
-----</args>
---</test>
--</routers>
-</frontend>
</config>

Bây giờ chúng ta đã có thê gọi module thông qua link url/Test or url/Test/index/index trên tình duyệt web.

Bước 3: Thêm layout hiển thị cho module

Tất cả các file templates và layout của module đều được chứa trong thư mục /app/design. Magento sử dụng hai vùng "frontend" dùng để hiển thị cho người dùng và "adminhtml" cho trang quản trị.

/app/design
|-- /adminhtml
|-- /frontend

bình thường magento sẽ sử dụng 2 thư mục để lưu trữ các theme:

  • layout: lưu trữ các file xml config cho layout.
  • template: lưu các file .phtml. đầu tiên chúng ta sẽ tạo file test.xml trong thư mục /app/design/frontend/default/default/layout/
<?xml version="1.0" ?>
-<layout version="0.1.0">
-<test_index_index>
--<reference name="content">
----<block type="core/template" name="test" template="test/view.phtml"></block>
--</reference>
-</helloworld_index_index>
</layout>

Tiếp theo chúng ta sẽ tạo một file template trong thư mục /app/design/frontend/default/default/template/test/view.phtml với việc hiển thị một thông báo đơn giản.

<p>Test</p>

cuối cùng là thêm những thông tin sau trong file config.xml

<?xml version="1.0" ?>
<config>
-<frontend>
--<layout>
---<updates>
----<Test>
-----<!-- File load -->
-----<file>Test.xml</file>
----</Test>
---</updates>
--</layout>
-</frontend>
</config>

Như vậy, chúng ta đã tạo xong một module magento đơn giản và có thể truy cập theo đường dẫn localhost/magento/Test

2 . Đóng gói module magento

Sau khi tạo xong một module và chạy thành công, nếu bạn muốn gửi module này cho những người khác. và nó có thể chạy trên hệ thống magento của họ, thì chúng ta cần phải tiến hành bước đóng gói module. Vào admin => Configuration => Magento Connect > Package Extensions. Tại đây có một số tab để đóng gói (Create Extension Package page):

  • Package Info

  • Release Info

  • Authors

  • Dependencies

  • Contents

    archive-pakage-300x134.png

Trong đó

  • Package Info: Nơi nhập các thông tin về module được đóng gói
  • Name: tên gói, đặt tên theo gói module
  • Channel : community.
  • Supported releases: nếu chọn “Pre-1.5.0.0” thì gói sẽ được đóng gói vào: var/pear/folder. Chọn “ 1.5.0.0 & later" gói sẽ được tạo trong var/connect/. Bạn có thể chọn cả hai loại.
  • Summary and Description: mô tả
  • ...
  • Release Info: Thông tin về phiên bản
  • Authors: Thông tin tài khoản user tạo module.
  • Dependencies: Thông tin về php và các thư viện mở rộng đặc biệt kèm theo.
  • Content: khai báo thông tin module mà bạn muốn đóng gói, đường dẫn tương ứng như sau: Sau khi điền đầy đủ thông tin vào các mục yêu cầu cần nhập, chúng ta bấm nút: “Saving Data and Creating Package” khi đó toàn bộ các module file của module sẽ được đóng gói vào một file nén nén (.tgz).