SlideShare a Scribd company logo
Tạo Module cho Joomla! 1.5
Module là một extension rất nhẹ và mềm dẻo được sử dụng để render nên trang web. Chúng
được sử dụng cho trang có kích thước nhỏ, ít phức tạp và có thể được xem từ nhiều component
khác nhau.
Bạn có thể thấy nhiều ví dụ về module trong bản cài đặt Joomla! chuẩn như:
- Menus
- Latest News
- Login form
- và nhiều cái khác nữa.
Bài viết này sẽ hướng dẫn bạn cách tạo ra một module Hello World đơn giản. Xuyên suốt bài
viết này bạn sẽ học được cấu trúc cơ bản của một module. Tất nhiên, bạn hoàn toàn có thể mở
rộng cấu trúc cơ bản này để tạo ra các module phức tạp hơn theo ý mình.
Cấu trúc tập tin
Có 4 file cơ bản được dùng trong mẫu tiêu chuẩn của việc phát triển module:
• mod_helloworld.php – File này là điểm vào chính cho module. Nó sẽ thực hiện những khởi
tạo cần thiết, gọi các helper để thu thập mọi dữ liệu cần thiết, và include template hiển thị đầu ra
của module.
• mod_helloworld.xml – File này chứa thông tin về module. Nó định nghĩa ra các files cần thiết
để cài đặt từ trình cài đặt của Joomla! và chỉ ra các tham số cấu hình cho module.
• helper.php – File này chứa lớp helper, được dùng để thực hiện các hành động thực sự để lấy về
các thông tin mà sẽ được hiển thị trên module (thường là từ database hoặc những nguồn dữ liệu

www.dvms.vn                                                                                  Page 1
khác).
• tmpl/default.php – File này là template của module. Nó sẽ lấy về dữ liệu đã được thu thập bởi
mod_helloworld.php và sinh ra mã HTML để hiển thị trên trang web.
Tạo mod_helloworld.php
File mod_helloworld.php sẽ thực hiện 3 nhiệm vụ sau:
• include file helper.php chứa lớp được dùng để thu thập dữ liệu cần thiết
• Triệu gọi phương thức thích hợp trong lớp helper để lấy về dữ liệu
• include template để hiển thị đầu ra.
Lớp helper được định nghĩa trong file helper.php của chúng ta. File này được include bằng lệnh
require_once:
require_once( dirname(__FILE__).DS.'helper.php' );

require_once được dùng bởi hàm helper của chúng ta được định nghĩa bên trong một lớp, và
chúng ta muốn lớp này được định nghĩa chỉ 1 lần mà thôi.
Lớp helper của chúng ta hiện vẫn chưa được định nghĩa, nhưng khi được định nghĩa nó sẽ chứa
một phương thức: getHello(). Với ví dụ đơn giản của chúng ta, không thực sự cần thiết phải làm
như vậy – thông điệp “Hello, World” mà phương thức này trả về đơn giản là sẽ được include vào
trong template. Chúng ta dùng lớp helper chỉ để chứng minh kỹ thuật cơ bản này mà thôi.
Hiện tại thì module của chúng ta chưa sử dụng bất kỳ tham số nào, nhưng dù sao thì chúng ta
cũng sẽ truyền cho phương thức helper để nó có thể sử dụng về sau, nếu chúng ta quyết định mở
rộng chức năng cho module này.
Phương thức lớp helper được triệu gọi theo cách sau đây:
$hello = modHelloWorldHelper::getHello( $params );

File mod_helloworld.php hoàn chỉnh như sau:
<?php
/**
 * Hello World! Module Entry Point
 *
 * @package    Joomla.Tutorials
 * @subpackage Modules
 * @link http://dev.joomla.org/component/option,com_jd-
wiki/Itemid,31/id,tutorials:modules/
 * @license        GNU/GPL, see LICENSE.php
 * mod_helloworld is free software. This version may have been modified
pursuant
 * to the GNU General Public License, and as distributed it includes or
 * is derivative of works licensed under the GNU General Public License or
 * other free or open source software licenses.
 */

// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );

// Include the syndicate functions only once
require_once( dirname(__FILE__).DS.'helper.php' );

$hello = modHelloWorldHelper::getHello( $params );
require( JModuleHelper::getLayoutPath( 'mod_helloworld' ) );

Có một dòng mà chúng ra vẫn chưa hề động đến chính là dòng đầu tiên. Dòng này kiểm tra để
chắc chắn rằng file này thực sự được include từ một ứng dụng Joomla!. Nó thực sự cần thiết để


www.dvms.vn                                                                              Page 2
tránh bị khai thác lỗi variable injection và các nguy cơ tiềm ẩn khác.
Tạo helper.php
File helper.php chứa lớp helper dùng để lấy về dữ liệu cho đầu ra của module. Như sẽ đề cập, lớp
helper của chúng ta sẽ có 1 method: getHello() trả về thông điệp ‘Hello, World’.
Và đây là code cho helper.php:
<?php
/**
 * Helper class for Hello World! module
 *
 * @package    Joomla.Tutorials
 * @subpackage Modules
 * @link http://dev.joomla.org/component/option,com_jd-
wiki/Itemid,31/id,tutorials:modules/
 * @license        GNU/GPL, see LICENSE.php
 * mod_helloworld is free software. This version may have been modified
pursuant
 * to the GNU General Public License, and as distributed it includes or
 * is derivative of works licensed under the GNU General Public License or
 * other free or open source software licenses.
 */
class modHelloWorldHelper
{
    /**
     * Retrieves the hello message
     *
     * @param array $params An object containing the module parameters
     * @access public
     */
    function getHello( $params )
    {
        return 'Hello, World!';
    }
}

Không có quy tắc nào bắt chúng ta phải đặt tên cho lớp helper như trên, nhưng đặt tên như vậy sẽ
rất có ích cho việc nhận dạng lớp và tìm kiếm.
Các module cao cấp hơn có thể sẽ chứa các yêu cầu truy vấn database hoặc các chức năng khác.
Tạo tmpl/default.php
File default.php là một template nó sẽ hiển thị đầu ra của module.
Code cho default.php như sau:
<?php // no direct access
defined( '_JEXEC' ) or die( 'Restricted access' ); ?>
<?php echo $hello; ?>

Một điểm quan trọng cần chú ý là file template có cùng phạm vi với file mod_helloworld.php.
Nghĩa là biến $hello được định nghĩa trong file mod_helloworld.php có thể dùng được trong file
template default.php mà không cần bất kỳ khai báo hay lời gọi hàm nào.

Tạo mod_helloworld.xml
File mod_helloworld.xml được dùng để chỉ ra những file nào mà trình cài đặt cần phải copy và
sẽ được sử dụng bởi Module Manager để xác định tham số nào được dùng để cấu hình cho



www.dvms.vn                                                                              Page 3
module. Những thông tin khác về module cũng được định nghĩa trong file này.
Code cho mod_helloworld.xml như sau:
<?xml version="1.0" encoding="utf-8"?>
<install type="module" version="1.5.0">
    <name>Hello, World!</name>
    <author>John Doe</author>
    <version>1.5.0</version>
    <description>A simple Hello, World! module.</description>
    <files>
        <filename module="mod_helloworld">mod_helloworld.php</filename>
        <filename>index.html</filename>
        <filename>helper.php</filename>
        <filename>tmpl/default.php</filename>
        <filename>tmpl/index.html</filename>
    </files>
    <params>
    </params>
</install>

Chú ý là có 2 file thêm vào mà chúng ra chưa nhắc đến đó là: index.html and tmpl/index.html.
Các file này cũng được include để tránh cho các thư mục không bị truy cập và liệt kê nội dung
bởi trình duyệt. Nếu người dùng cố gắng trỏ trình duyệt của họ tới thẳng các thư mục thì file
index.html sẽ được hiển thị và họ sẽ chẳng thấy gì hết. Các file này có thể để trống hoặc chứa
một dòng đơn giản sau:
<html><body bgcolor="#FFFFFF"></body></html>

Nó sẽ hiển thị một trang trắng tinh.
Vì module của chúng ta ko có parameters nào, nên chương này sẽ bỏ trống.
Kết luận
Phát triển module cho Joomla! là một việc khá đơn giản, trình tự rõ ràng. Bằng cách sử dụng kỹ
thuật đã mô tả trong bài viết này, chúng ta có thể dễ dàng phát triển rất, rất nhiều các modules
khác nữa.

Dịch từ Joomla Developer Site




                                CHÚC THÀNH CÔNG!


                          THÔNG TIN LIÊN HỆ HỖ TRỢ

                DVMS

                  (08) 360 289 37 info@dvms.vn

                 www.DVMS.vn


www.dvms.vn                                                                                Page 4
www.dvms.vn   Page 5

More Related Content

PDF
Web203 slide 5
PDF
TÀI LIỆU HƯỚNG DẪN ĐÓNG GÓI MODULE MAGENTO 1.7
DOCX
Học Zend Framework - Khóa học lập trình Zend Framework
DOCX
Tài liệu Zend Framework 2 - Cài đặt và cấu hình Zend Framework 2 - Bài 2
PDF
Bài 6 Lập trình PHP (phần 4) Làm việc với cookie và session - Giáo trình FPT
PDF
Web301 slide 2
PPTX
Giáo trình lập trình Wordpress - bài 4 - Tạo Plugin căn bản
PPTX
The First 2015 Saigon WordPress Meetup
Web203 slide 5
TÀI LIỆU HƯỚNG DẪN ĐÓNG GÓI MODULE MAGENTO 1.7
Học Zend Framework - Khóa học lập trình Zend Framework
Tài liệu Zend Framework 2 - Cài đặt và cấu hình Zend Framework 2 - Bài 2
Bài 6 Lập trình PHP (phần 4) Làm việc với cookie và session - Giáo trình FPT
Web301 slide 2
Giáo trình lập trình Wordpress - bài 4 - Tạo Plugin căn bản
The First 2015 Saigon WordPress Meetup

What's hot (20)

PDF
Bài 4 Bảo mật cho website - Xây dựng ứng dụng web
PPTX
Học lập trình Wordpress - bài 2 - Tìm hiểu cấu trúc và cấu hình nâng cao
PDF
Tài liệu Lập trình Zend Framework 2.x
PDF
Web301 slide 4
PDF
Bài 1 Lập trình website theo mô hình MVC - Xây dựng ứng dụng web
PDF
Web201 slide 6
PDF
Bài 3 Lập trình PHP (phần 1) - Giáo trình FPT
PDF
Bài 2 Các kỹ thuật lập trình MySQL với PHP nâng cao - Xây dựng ứng dụng web
PPTX
Mysql Workbench hướng dẫn cài đặt - Video tiếng Việt
PDF
Bài 7 Xây dựng website sử dụng PHP và MySQL - Giáo trình FPT
PDF
Web201 slide 7
PDF
Web3012 slide 8
PDF
Web301 slide 1
PDF
Web201 slide 2
PDF
Web201 slide 1
PDF
Báo cáo thực tập athena nguyễn anh tuấn
PDF
Web203 slide 4
PPTX
Wp hoi-thao-phan-quyen
PDF
Web203 slide 8
PPTX
Tài liệu lập trình Wordpress - bài 5 - Action và Action hook trong Wordpress
Bài 4 Bảo mật cho website - Xây dựng ứng dụng web
Học lập trình Wordpress - bài 2 - Tìm hiểu cấu trúc và cấu hình nâng cao
Tài liệu Lập trình Zend Framework 2.x
Web301 slide 4
Bài 1 Lập trình website theo mô hình MVC - Xây dựng ứng dụng web
Web201 slide 6
Bài 3 Lập trình PHP (phần 1) - Giáo trình FPT
Bài 2 Các kỹ thuật lập trình MySQL với PHP nâng cao - Xây dựng ứng dụng web
Mysql Workbench hướng dẫn cài đặt - Video tiếng Việt
Bài 7 Xây dựng website sử dụng PHP và MySQL - Giáo trình FPT
Web201 slide 7
Web3012 slide 8
Web301 slide 1
Web201 slide 2
Web201 slide 1
Báo cáo thực tập athena nguyễn anh tuấn
Web203 slide 4
Wp hoi-thao-phan-quyen
Web203 slide 8
Tài liệu lập trình Wordpress - bài 5 - Action và Action hook trong Wordpress
Ad

Viewers also liked (15)

PDF
mobile catalogue, mobile brochure
PPTX
CakePHP × 国産! baserCMS3の深化と今後の拡がり
TXT
Lgpl 2 1
PDF
BỘ QUY TẮC ỨNG XỬ CỦA ĐỐI TÁC DVMS
PDF
TÀI LIỆU HƯỚNG DẪN VIẾT MODULE CHO SUGARCRM
DOCX
“El coaching como estrategia para mejorar el desempeño laboral de docentes en...
PDF
20150606 CMS Fun名古屋 vol.2 baserCMSのご紹介
PDF
STracking
PDF
DVMS tạo module joomla 2.5
PDF
SmartApp for Sale
PDF
TÀI LIỆU HƯỚNG VIẾT MODULE VÀ WEBSERVICE CHO MAGENTO 1.7
PDF
NỘI QUY CTY DVMS
PDF
DVMS schat giải pháp chăm sóc và tư vấn khách hàng tuyệt vời
DOC
Sesiones de aprendizaje de 1° a 5° secundaria
PDF
Quản trị joomla toàn tập
mobile catalogue, mobile brochure
CakePHP × 国産! baserCMS3の深化と今後の拡がり
Lgpl 2 1
BỘ QUY TẮC ỨNG XỬ CỦA ĐỐI TÁC DVMS
TÀI LIỆU HƯỚNG DẪN VIẾT MODULE CHO SUGARCRM
“El coaching como estrategia para mejorar el desempeño laboral de docentes en...
20150606 CMS Fun名古屋 vol.2 baserCMSのご紹介
STracking
DVMS tạo module joomla 2.5
SmartApp for Sale
TÀI LIỆU HƯỚNG VIẾT MODULE VÀ WEBSERVICE CHO MAGENTO 1.7
NỘI QUY CTY DVMS
DVMS schat giải pháp chăm sóc và tư vấn khách hàng tuyệt vời
Sesiones de aprendizaje de 1° a 5° secundaria
Quản trị joomla toàn tập
Ad

Similar to tao module joomla 1.5 (20)

PDF
Create easymoduleinphpfox
PPT
Tìm hiểu về Joomla
DOCX
Gioi thieu joomla
PDF
PPTX
Thuyet_trinh_de_tai_Joomla
PDF
Joomla developermanual
PDF
Lap trinh-joomla-15-theo-mo-hinh-mvc
PPTX
Drupal framework xanh
PDF
Hỏi tình hình bk tiny bktiny-hdsd
DOCX
Sức mạnh của jsf 2, phần 2 tạo khuôn mẫu và các thành phần phức hợp
DOCX
PMMNM.docx
PDF
template magento
PDF
Web203 slide 7
PDF
Bài 7: Bảo mật website Joomla Các lỗi và một số vấn đề thường gặp với website...
DOCX
All zend
PDF
Kentcources 110109221507-phpapp01
PDF
Huongdancaidat moodle 162(kco j
PDF
Web203 slide 3
PDF
Bài 3 Cài đặt và quản lý các Extension của Joomla
PDF
Bài 4 Hướng dẫn chỉnh sửa và thiết kế giao diện web Joomla
Create easymoduleinphpfox
Tìm hiểu về Joomla
Gioi thieu joomla
Thuyet_trinh_de_tai_Joomla
Joomla developermanual
Lap trinh-joomla-15-theo-mo-hinh-mvc
Drupal framework xanh
Hỏi tình hình bk tiny bktiny-hdsd
Sức mạnh của jsf 2, phần 2 tạo khuôn mẫu và các thành phần phức hợp
PMMNM.docx
template magento
Web203 slide 7
Bài 7: Bảo mật website Joomla Các lỗi và một số vấn đề thường gặp với website...
All zend
Kentcources 110109221507-phpapp01
Huongdancaidat moodle 162(kco j
Web203 slide 3
Bài 3 Cài đặt và quản lý các Extension của Joomla
Bài 4 Hướng dẫn chỉnh sửa và thiết kế giao diện web Joomla

More from dvms (6)

PDF
S-TMS | Smart Transportation Management System
PDF
HƯỚNG DẪN SỬ DỤNG PHẦN MỀM SUBVERSION (SVN) TOÀN TẬP
PDF
DVMS Easy Order app đặt món trên smartphone
PDF
Quy trình làm việc với khách hàng của DVMS
PDF
Hệ thống đánh giá đại lý, chi nhánh, cửa hàng
PDF
admin magento user guide
S-TMS | Smart Transportation Management System
HƯỚNG DẪN SỬ DỤNG PHẦN MỀM SUBVERSION (SVN) TOÀN TẬP
DVMS Easy Order app đặt món trên smartphone
Quy trình làm việc với khách hàng của DVMS
Hệ thống đánh giá đại lý, chi nhánh, cửa hàng
admin magento user guide

tao module joomla 1.5

  • 1. Tạo Module cho Joomla! 1.5 Module là một extension rất nhẹ và mềm dẻo được sử dụng để render nên trang web. Chúng được sử dụng cho trang có kích thước nhỏ, ít phức tạp và có thể được xem từ nhiều component khác nhau. Bạn có thể thấy nhiều ví dụ về module trong bản cài đặt Joomla! chuẩn như: - Menus - Latest News - Login form - và nhiều cái khác nữa. Bài viết này sẽ hướng dẫn bạn cách tạo ra một module Hello World đơn giản. Xuyên suốt bài viết này bạn sẽ học được cấu trúc cơ bản của một module. Tất nhiên, bạn hoàn toàn có thể mở rộng cấu trúc cơ bản này để tạo ra các module phức tạp hơn theo ý mình. Cấu trúc tập tin Có 4 file cơ bản được dùng trong mẫu tiêu chuẩn của việc phát triển module: • mod_helloworld.php – File này là điểm vào chính cho module. Nó sẽ thực hiện những khởi tạo cần thiết, gọi các helper để thu thập mọi dữ liệu cần thiết, và include template hiển thị đầu ra của module. • mod_helloworld.xml – File này chứa thông tin về module. Nó định nghĩa ra các files cần thiết để cài đặt từ trình cài đặt của Joomla! và chỉ ra các tham số cấu hình cho module. • helper.php – File này chứa lớp helper, được dùng để thực hiện các hành động thực sự để lấy về các thông tin mà sẽ được hiển thị trên module (thường là từ database hoặc những nguồn dữ liệu www.dvms.vn Page 1
  • 2. khác). • tmpl/default.php – File này là template của module. Nó sẽ lấy về dữ liệu đã được thu thập bởi mod_helloworld.php và sinh ra mã HTML để hiển thị trên trang web. Tạo mod_helloworld.php File mod_helloworld.php sẽ thực hiện 3 nhiệm vụ sau: • include file helper.php chứa lớp được dùng để thu thập dữ liệu cần thiết • Triệu gọi phương thức thích hợp trong lớp helper để lấy về dữ liệu • include template để hiển thị đầu ra. Lớp helper được định nghĩa trong file helper.php của chúng ta. File này được include bằng lệnh require_once: require_once( dirname(__FILE__).DS.'helper.php' ); require_once được dùng bởi hàm helper của chúng ta được định nghĩa bên trong một lớp, và chúng ta muốn lớp này được định nghĩa chỉ 1 lần mà thôi. Lớp helper của chúng ta hiện vẫn chưa được định nghĩa, nhưng khi được định nghĩa nó sẽ chứa một phương thức: getHello(). Với ví dụ đơn giản của chúng ta, không thực sự cần thiết phải làm như vậy – thông điệp “Hello, World” mà phương thức này trả về đơn giản là sẽ được include vào trong template. Chúng ta dùng lớp helper chỉ để chứng minh kỹ thuật cơ bản này mà thôi. Hiện tại thì module của chúng ta chưa sử dụng bất kỳ tham số nào, nhưng dù sao thì chúng ta cũng sẽ truyền cho phương thức helper để nó có thể sử dụng về sau, nếu chúng ta quyết định mở rộng chức năng cho module này. Phương thức lớp helper được triệu gọi theo cách sau đây: $hello = modHelloWorldHelper::getHello( $params ); File mod_helloworld.php hoàn chỉnh như sau: <?php /** * Hello World! Module Entry Point * * @package Joomla.Tutorials * @subpackage Modules * @link http://dev.joomla.org/component/option,com_jd- wiki/Itemid,31/id,tutorials:modules/ * @license GNU/GPL, see LICENSE.php * mod_helloworld is free software. This version may have been modified pursuant * to the GNU General Public License, and as distributed it includes or * is derivative of works licensed under the GNU General Public License or * other free or open source software licenses. */ // no direct access defined( '_JEXEC' ) or die( 'Restricted access' ); // Include the syndicate functions only once require_once( dirname(__FILE__).DS.'helper.php' ); $hello = modHelloWorldHelper::getHello( $params ); require( JModuleHelper::getLayoutPath( 'mod_helloworld' ) ); Có một dòng mà chúng ra vẫn chưa hề động đến chính là dòng đầu tiên. Dòng này kiểm tra để chắc chắn rằng file này thực sự được include từ một ứng dụng Joomla!. Nó thực sự cần thiết để www.dvms.vn Page 2
  • 3. tránh bị khai thác lỗi variable injection và các nguy cơ tiềm ẩn khác. Tạo helper.php File helper.php chứa lớp helper dùng để lấy về dữ liệu cho đầu ra của module. Như sẽ đề cập, lớp helper của chúng ta sẽ có 1 method: getHello() trả về thông điệp ‘Hello, World’. Và đây là code cho helper.php: <?php /** * Helper class for Hello World! module * * @package Joomla.Tutorials * @subpackage Modules * @link http://dev.joomla.org/component/option,com_jd- wiki/Itemid,31/id,tutorials:modules/ * @license GNU/GPL, see LICENSE.php * mod_helloworld is free software. This version may have been modified pursuant * to the GNU General Public License, and as distributed it includes or * is derivative of works licensed under the GNU General Public License or * other free or open source software licenses. */ class modHelloWorldHelper { /** * Retrieves the hello message * * @param array $params An object containing the module parameters * @access public */ function getHello( $params ) { return 'Hello, World!'; } } Không có quy tắc nào bắt chúng ta phải đặt tên cho lớp helper như trên, nhưng đặt tên như vậy sẽ rất có ích cho việc nhận dạng lớp và tìm kiếm. Các module cao cấp hơn có thể sẽ chứa các yêu cầu truy vấn database hoặc các chức năng khác. Tạo tmpl/default.php File default.php là một template nó sẽ hiển thị đầu ra của module. Code cho default.php như sau: <?php // no direct access defined( '_JEXEC' ) or die( 'Restricted access' ); ?> <?php echo $hello; ?> Một điểm quan trọng cần chú ý là file template có cùng phạm vi với file mod_helloworld.php. Nghĩa là biến $hello được định nghĩa trong file mod_helloworld.php có thể dùng được trong file template default.php mà không cần bất kỳ khai báo hay lời gọi hàm nào. Tạo mod_helloworld.xml File mod_helloworld.xml được dùng để chỉ ra những file nào mà trình cài đặt cần phải copy và sẽ được sử dụng bởi Module Manager để xác định tham số nào được dùng để cấu hình cho www.dvms.vn Page 3
  • 4. module. Những thông tin khác về module cũng được định nghĩa trong file này. Code cho mod_helloworld.xml như sau: <?xml version="1.0" encoding="utf-8"?> <install type="module" version="1.5.0"> <name>Hello, World!</name> <author>John Doe</author> <version>1.5.0</version> <description>A simple Hello, World! module.</description> <files> <filename module="mod_helloworld">mod_helloworld.php</filename> <filename>index.html</filename> <filename>helper.php</filename> <filename>tmpl/default.php</filename> <filename>tmpl/index.html</filename> </files> <params> </params> </install> Chú ý là có 2 file thêm vào mà chúng ra chưa nhắc đến đó là: index.html and tmpl/index.html. Các file này cũng được include để tránh cho các thư mục không bị truy cập và liệt kê nội dung bởi trình duyệt. Nếu người dùng cố gắng trỏ trình duyệt của họ tới thẳng các thư mục thì file index.html sẽ được hiển thị và họ sẽ chẳng thấy gì hết. Các file này có thể để trống hoặc chứa một dòng đơn giản sau: <html><body bgcolor="#FFFFFF"></body></html> Nó sẽ hiển thị một trang trắng tinh. Vì module của chúng ta ko có parameters nào, nên chương này sẽ bỏ trống. Kết luận Phát triển module cho Joomla! là một việc khá đơn giản, trình tự rõ ràng. Bằng cách sử dụng kỹ thuật đã mô tả trong bài viết này, chúng ta có thể dễ dàng phát triển rất, rất nhiều các modules khác nữa. Dịch từ Joomla Developer Site CHÚC THÀNH CÔNG! THÔNG TIN LIÊN HỆ HỖ TRỢ DVMS (08) 360 289 37 info@dvms.vn www.DVMS.vn www.dvms.vn Page 4
  • 5. www.dvms.vn Page 5