ĐẠI HỌC ĐÀ NẴNG
TRƯỜNG ĐẠI HỌC BÁCH KHOA
KHOA CÔNG NGHỆ THÔNG TIN
Tel. (84-511) 3736 949, Fax. (84-511) 842 771
Website: itf.ud.edu.vn, E-mail: [email protected]
BÁO CÁO THỰC TẬP TỐT NGHIỆP
NGÀNH CÔNG NGHỆ THÔNG TIN
MÃ NGÀNH : 05115
ĐỀ TÀI : XÂY DỰNG COMPONENT QUẢN LÝ DỰ ÁN PHẦN
MỀM CHO WEBSITE JOOMLA
SINH VIÊN : Nguyễn Thị Thu Thiện
Lê Thị Hồng Thủy
LỚP : 04T4
CBHD : T.S Nguyễn Thanh Bình
Th.S Nguyễn Văn Nguyên
ĐÀ NẴNG, 05/2009
LỜI CẢM ƠN
Tôi chân thành cảm ơn Thầy cô trong khoa Công nghệ thông tin cũng
như các thầy cô giảng dạy trong trường Đại học Bách khoa Đà Nẵng đã
truyền đạt những kiến thức quý báu cho chúng tôi trong những năm học
vừa qua.
Đặc biệt, tôi xin chân thành cảm ơn thầy giáo Nguyễn Thanh Bình và
thầy Nguyễn Văn Nguyên - thuộc khoa Công nghệ thông tin, trường Đại
học Bách khoa Đà Nẵng đã tận tình hướng dẫn, động viên và giúp đỡ tôi
trong suốt thời gian thực hiện đề tài.
Và để có được kết quả như ngày hôm nay, tôi rất biết ơn gia đình đã
động viên, khích lệ, tạo mọi điều kiện thuận lợi nhất trong suốt quá trình
học tập cũng như quá trình thực hiện đề tài tốt nghiệp này.
Xin chân thành cám ơn các bạn trong khoa Công nghệ thông tin – khóa
04, đặc biệt là các bạn lớp 04T4 đã ủng hộ, giúp đỡ, chia sẻ kiến thức, kinh
nghiệm và tài liệu có được cho tôi trong quá trình nghiên cứu và thực hiện
.I Giới thiệu về joomla.......................................................................................................1
.I.1. Joomla là gì?............................................................................................................1
.I.2. Các dòng phiên bản của Joomla.............................................................................1
.I.3. Kiến trúc Joomla.....................................................................................................1
.II Một số khái niệm trong Joomla....................................................................................2
.II.1. Front-end và back-end...........................................................................................2
.II.1.1. Front-end............................................................................................................2
.II.1.2. Back-end.............................................................................................................2
.II.2. Template.................................................................................................................2
.II.3. Menu.......................................................................................................................2
.II.4. Các thành phần mở rộng........................................................................................3
.II.4.1. Module................................................................................................................3
.II.4.2. Component.........................................................................................................3
.II.4.3. Mambot (Plug-in)...............................................................................................4
.III Cách xây dựng một component trong Joomla 1.5......................................................4
.III.1. Giới thiệu mô hình MVC.....................................................................................4
.III.2. Cài đặt Joomla MVC............................................................................................5
.III.3. Tạo một component..............................................................................................5
.III.3.1. Tạo một entry point...........................................................................................5
.III.3.2. Tạo Controller..................................................................................................7
.III.3.3. Tạo View............................................................................................................8
.III.3.4. Tạo Template....................................................................................................8
.III.3.5. Đóng gói tất cả- Tạo file hello.xml..................................................................9
.III.4. Bổ sung Model vào component.........................................................................10
.III.4.1. Tạo Model.......................................................................................................10
.III.4.2. Sử sụng Model................................................................................................11
.III.4.3. Bổ sung file vào package ...............................................................................12
.III.5. Sử dụng cơ sở dữ liệu trong component MVC..................................................13
.III.5.1. Lấy dữ liệu......................................................................................................13
.III.5.2. Tạo file SQL trong quá trình cài đặt và gỡ bỏ component...........................15
.I.3.5. Use Case “Requirements Management”..........................................................38
.I.3.6. Use Case “Design Management”.....................................................................40
.I.3.7. Use Case “Coding Management”....................................................................41
.I.3.8. Use Case “Risks Management”........................................................................43
.I.3.9. Use Case “File Manage”.................................................................................44
.I.3.10. Use Case “Calendar Management”...............................................................45
.I.3.11. Use Case “Board Management”....................................................................47
.I.3.12. Use Case “Profile Management”...................................................................48
.I.3.13. Use Case “User Management”......................................................................49
.I.4. Sơ đồ tuần tự..........................................................................................................51
.I.4.1. Chức năng “Login”..........................................................................................51
.I.4.2. Chức năng “Projects Management”................................................................51
.I.4.3. Chức năng “Tasks Management”....................................................................53
.I.4.4. Chức năng “Delivery Management”...............................................................54
.I.4.5. Chức năng “Requirements Management”.......................................................55
.I.4.6. Chức năng “Design Management”.................................................................56
.I.4.7. Chức năng “Coding Management”.................................................................57
.I.4.8. Chức năng “Risks Management”.....................................................................58
.I.4.9. Chức năng “File Manage”..............................................................................59
.I.4.10. Chức năng “Calendar Management”............................................................60
ii
Mục lục iii
.I.4.11. Chức năng “Board Management”.................................................................61
.I.4.12. Chức năng “User Management”....................................................................62
.I.5. Thiết kế hệ thống...................................................................................................63
.I.5.1. Sơ đồ lớp............................................................................................................63
.I.5.2. Tổ chức dữ liệu..................................................................................................63
XÂY DỰNG CHƯƠNG TRÌNH VÀ KẾT QUẢ THỰC HIỆN...................74
.I Công cụ và môi trường phát triển................................................................................74
.II Một số kết quả đạt được..............................................................................................74
từ những website cá nhân cho tới những hệ thống website doanh nghiệp có tính phức
tạp cao, cung cấp nhiều dịch vụ và ứng dụng. Joomla có thể dễ dàng cài đặt, dễ dàng
quản lý và có độ tin cậy cao. Joomla giúp mọi người có thể phát triển việc kinh
doanh, học tập, giảng dạy, giới thiệu, quảng bá hình ảnh, dịch vụ, sản phẩm của mình,
của công ty, của trường mình một cách tốt nhất, hiệu quả nhất với chi phí thấp nhất..
Ngoài ra, chương trình này còn được hỗ trợ bởi một cộng đồng rộng lớn, đáp ứng các
yêu cầu về an toàn và bảo mật thông tin...
Để tìm hiểu mô hình hoạt động và cách xây dựng một ứng dụng trên nền Joomla,
chúng tôi xin giới thiệu đề tài « Xây dựng component quản lý dự án phần mềm cho
website Joomla »
Mặc dù ứng dụng đã triển khai được phần lớn các yêu cầu chính trong việc quản lý
một dự án phần mềm, tuy nhiên việc xây dựng một chương trình quản lý dự án là khá
phức tạp. Do đó ứng dụng này không tránh khỏi những thiếu sót, rất mong nhận được
nhiều ý kiến nhận xét của thầy cô và các bạn để chúng tôi có thể rút kinh nghiệm cho
việc xây dựng những ứng dụng thực tế sau này.
.II Lý do chọn đề tài
Trong thuật ngữ của chuyên ngành Kĩ nghệ phần mềm, Quản lý dự án phần mềm
là các hoạt động trong lập kế hoạch, giám sát và điều khiển tài nguyên dự án, thời
gian thực hiện, các rủi ro trong dự án và cả quy trình thực hiện dự án; nhằm đảm bảo
thành công cho dự án. Khi triển khai một dự án phần mềm thì các vấn đề sau thường
xảy ra: thời gian thực hiện quá mức dự kiến, kết quả của dự án không như mong
đợi...Để tránh những vấn đề đó xảy ra đòi hỏi người quản lý phải làm tốt về:
− Quản lý thời gian: lập lịch, kiểm tra đối chiếu quá trình thực hiện dự án với
lịch trình, điều chỉnh lịch trình khi cần thiết
Tên tác giả, LỚP XXX 1
− Quản lý nhân lực: xác định, điều phối nhân lực cho hợp lý
− Quản lý sản phẩm: thêm, bớt các chức năng phù hợp với yêu cầu của khách
hàng
− Quản lý rủi ro: xác định, phân tích rủi ro và đề xuất giải pháp khắc phục.
Xuất phát từ những yêu cầu trên, chúng tôi đã chọn đề tài « Xây dựng component
Tên tác giả, LỚP XXX 2
Tên đề tài ở đây
− Mỗi dự án phần mềm được chia ra thành những phần cụ thể như :
• Task: Mỗi dự án chia ra thành các công việc nhỏ hơn. Mỗi công việc
có một thời hạn deadline riêng.
• Requirement: đưa ra những yêu cầu của khách hàng về dự án phần
mềm đó
• Design: đưa ra các bản thiết kế cho phần mềm sao cho phù hợp với
requirement, mỗi requirement có thể có nhiều mẫu design khác nhau
• Coding: phần này để quản lý việc coding của dự án, ứng với mỗi design
thì có một hoặc nhiều phần coding khác nhau
• Risks: là nơi đưa ra những rủi ro dự kiến được của dự án, hậu quả và
cách khắc phục...
• Delivery: trưởng dự án đưa ra thông tin về kế hoạch chuyển giao cho
khách hàng ở đây để mọi người tham khảo và điều chỉnh kế hoạch làm việc
của mình cho kịp tiến độ
• Quản lý file: Các thành viên của dự án có thể đưa những tài liệu có liên
quan lên đây cho mọi người. Chương trình cho phép tạo một thư mục mới và
liên kết với task có liên quan.
• Diễn đàn thảo luận nội bộ của các thành viên trong dự án: là nơi để các
thành viên trong dự án đưa lên những ý kiến của mình, những khó khăn khi
thực hiện để trưởng dự các và các thành viên khác xem xét, cân nhắc, đưa ra
ké hoạch làm việc phù hợp.
• Quản lý thành viên: Mỗi nhân viên phải có tài khoản đăng kí trên website
của công ty. Nếu muốn nhân viên đó trở thành thành viên của dự án thì admin
hay trưởng dự án sẽ dùng tên tài khoản mà nhân viên đã đăng kí hoặc địa chỉ
mail của nhân viên để add vào dự án
.V Nội dung tóm tắt các chương tiếp theo
Chương 1: Cơ sở lý thuyết
Chương 2: Phân tích và thiết kế hệ thống
biết với tên gọi mambot).
− Tầng thứ hai là mức ứng dụng và chứa lớp JApplication. Hiện tại tầng này
gồm 3 lớp con: JInstallation, JAdministrator và JSite.
− Tầng thứ ba là mức mở rộng. Tại tầng này có các thành phần (component),
mô đun (module) và giao diện (template) được thực thi và thể hiện
Hình 1: Kiến trúc Joomla
.II Một số khái niệm trong Joomla
.II.1. Front-end và back-end
.II.1.1. Front-end
Front-end (tiền sảnh), còn được biết với tên gọi Public Front-end: phần giao diện
phía ngoài, nơi tiếp xúc với mọi người sử dụng. Bất cứ ai cũng có thể trông thấy khi
gõ đúng đường dẫn URL vào trình duyệt.
Front-end chứa 1 trang đặc biệt là FrontPage (homepage) - trang chủ.
.II.1.2. Back-end
Back-end, còn được biết với tên gọi Public Back-end, Administrator, Control
Pane: phần dành cho người quản trị. Những người bình thường không biết đường dẫn
để truy cập, hoặc nếu có biết thì cũng phải qua bước kiểm tra tài khoản.
Phần back-end được truy cập thông qua đường dẫn:
http://your_domain/administrator.
.II.2. Template
Là giao diện, khuông dạng, kiểu mẫu, hình thức được thiết kế để trình bày nội
dung của trang Web và có các vị trí định sẵn để tích hợp các bộ phận, thành phần của
trang Web. Joomla! cho phép cài đặt và thay đổi Temp cho Web Site hay cho từng
trang Web khác nhau một cách dễ dàng.
.II.3. Menu
Joomla! có rất nhiều kiểu Menu, mỗi Menu sẽ là một trang hiển thị có nội dung và
cách trình bày theo nhiều kiểu khác nhau.
Các Menu này được quản lý theo mã số ID nên có thể thay đổi tên và vị trí mà ảnh
hưởng đến nội dung, địa chỉ liên kết của chúng.
Joomla! cho phép lựa chọn và quyết định Menu nào làm Trang chủ (Home) là
CMS. Các component có thể xem như là các ứng dụng con và nếu joomla là một hệ
điều hành thì các component là các ứng dụng desktop. Ví dụ component nội dung
(com_content) là một ứng dụng mini xử lý tất cả các vấn đề về nội dung được trả lại
như thế nào mỗi khi có yêu cầu duyệt nội dung được đưa ra.
Một component có hai thành phần chính: phần quản trị và phần trên site. Phần trên
site là phần được sử dụng để tải về các trang khi được triệu gọi trong quá trình hoạt
động của một website thông thường. Phần quản trị cung cấp giao diện để cấu hình,
quản lý các khía cạnh khác nhau của component và được truy cập thông qua ứng
dụng quản trị của Joomla
Component có thể có thêm modul để hỗ trợ cho việc hiển thị các chức năng và nội
dung của component
Thông thường sau khi cài đặt joomla có sẵn các component: Banner (quản lý các
bảng quảng cáo), Contact ( quản lý việc liên hệ giữa người dùng với ban quản trị
website), Search (quản lý việc tìm kiếm), Web links (quản lý các liên kết ngoài
website), và các component quản lý nội dung của trang web
.II.4.3. Mambot (Plug-in)
Mambot (plug-in) là chức năng được bổ sung thêm cho component, các mambot
này sẽ can thiệp, bổ sung vào nội dung của trang web trước khi nó được hiển thị.
Mambot được xem như là phương tiện giao tiếp giữa hệ thống joomla với component,
chẳng hạn tìm kiếm thông tin
.III Cách xây dựng một component trong Joomla 1.5
.III.1. Giới thiệu mô hình MVC
Bắt đầu từ phiên bản Joomla 1.5.x hoặc các phiên bản sau này, Joomla đã đưa
vào một framework mới, mang lại những thuận tiên rất lớn cho những người phát
triển. Các đoạn code giờ đây rất dễ dàng để kiểm tra và khá rõ ràng. Framework này
đưa ra một mẫu thiết kế mới, thiết kế MVC (Model-View-Controller) trong Joomla.
Model-View-Controller (gọi tắt là MVC) là một mẫu thiết kế phần mềm được
dùng để tổ chức các đoạn mã theo cách mà việc xử lý dữ liệu và biểu diễn dữ liệu
tách rời nhau. Điều này tạo ra tiền đề cho hướng tiếp cận sau này khi mà việc xử lý
dữ liệu được nhóm vào trong một section, khi đó giao diện hay quá trình tương tác
− hello.php - đây là điểm vào cho component của chúng ta
− controller.php - file này có chứa controler cơ bản
− views/hello/view.html.php - file này nhận các dữ liệu cần thiết và đặt nó
lên
template
− views/hello/tmpl/default.php - file này là temple cho đầu ra
− hello.xml - đây là một file XML nói cho joomla biết cách cài đặt
component
của chúng ta như thế nào
.III.3.1. Tạo một entry point
Joomla luôn luôn được truy cập thông qua một điểm vào đơn: index.php cho các
ứng dụng site và administrator/index.php cho ứng dụng quản trị. Sau đó ứng dụng sẽ
tải các component cần thiết dựa trên giá trị chọn lựa trong URL hoặc trong dữ liệu
POST. Đối với component của chúng ta URL sẽ như sau:index.php?
option=com_hello&view=hello. Việc này sẽ tải file chính của chúng ta và có thể
được xem như một điểm vào đơn cho component của chúng ta:
components/com_hello/hello.php.
<?php
defined( '_JEXEC' ) or die( 'Restricted access' );
require_once( JPATH_COMPONENT.DS.'controller.php' );
if($controller = JRequest::getWord('controller')) {
$path=JPATH_COMPONENT.DS.'controllers'.DS.$controller.'.php';
if (file_exists($path)) {
require_once $path;
} else {
$controller = '';
}
}
$classname = 'HelloController'.$controller;
$controller = new $classname( );
nào được thiết lập thì nhiệm vụ mặc định ‘display’ sẽ được giả định. Khi ‘display’
được sử dụng, biến ‘view’ sẽ quyết định cái gì sẽ được hiển thị. Các nhiệm vụ khác
như ‘save’, ‘edit’, ‘new’, …
Controler có thể quyết định redirect the page (thực hiện tải lại một trang), thông
thường là sau khi một nhiệm vụ như ‘save’ được hoàn thành. Câu lệnh cuối cùng thực
hiện việc này.
Điểm vào chính (hello.php) về bản chất đã thông qua việc điều khiển controler
thực hiện các nhiệm vụ được đặt ra trong request.
.III.3.2. Tạo Controller
Component của chúng ta chỉ có một nhiệm vụ - greet the world (thể hiện lời chào).
Bởi vậy controler sẽ rất đơn giản. Không cần đến việc tính toán trên dữ liệu. Tất cả
những gì cần thiết phải làm là tải view thích hợp. Chúng ta sẽ chỉ có một phương thức
trong controler là display(). Hầu hết các hàm cần thiết được xây dựng trong lớp
JControler, bởi vậy tất cả những gì chúng ta cần là gọi phương thức
JControler::display(); Code của controler cơ sở như sau:
<?php
defined( '_JEXEC' ) or die( 'Restricted access' );
jimport('joomla.application.component.controller');
class HelloController extends JController
{
function display()
{
parent::display();
}
}
?>
Việc khởi tạo của <classname>JController</classname> sẽ luôn luôn đăng ký một
nhiệm vụ display() khi không có nhiệm vụ cụ thể nào được chỉ ra (bằng việc sử dụng
phương thức registerDefaultTask()), nó sẽ được thiết lập như một nhiệm vụ mặc định.
Phương thức display() này thật sự không cần thiết bởi vì tất cả những gì nó làm là
thức JView::assignRef có thể được truy cập từ template sử dụng
$this→{propertyname} (xem mã template bên dưới như một ví dụ).
Template của chúng ta rất đơn giản, chúng ta chỉ muốn thể hiện một lời chào hợp
quy cách từ view.
<?php
defined('_JEXEC') or die('Restricted access'); ?>
<h1><?php echo $this->greeting; ?></h1>
.III.3.5. Đóng gói tất cả- Tạo file hello.xml
Có thể cài đặt thủ công một component bằng cách copy tất cả các file bằng FPT
client và hiệu chỉnh CSDL. Nhưng sẽ hiệu quả hơn nếu tạo ra một file được đóng gói
để Joomla! Installer thực hiện điều này cho bạn. File đóng gói này sẽ chứa nhiều dạng
thông tin khác nhau như:
− Các miêu tả chi tiết cơ bản về component của bạn (ví dụ như tên), và tùy ý
một số mô tả thông tin về bản quyền ….
− Một danh sách các file cần copy.
−
Một file PHP thực hiện bổ sung các thao tác cài đặt và gỡ bỏ (file này là
không bắt buộc).
− Một file SQL có chứa các câu truy vấn dữ liệu mà sẽ được thực hiện vào
lúc cài đặt hoặc gỡ bỏ (file này là không bắt buộc).
Định dạng của file XML như dưới đây:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE install SYSTEM "http://dev.joomla.org/xml/1.5/component
install.dtd">
<install type="component" version="1.5.0">
<name>Hello</name>
<creationDate>2007 02 22</creationDate>
<author>John Doe</author>
<authorEmail>[email protected]</authorEmail>
file này có một dòng đơn như sau: (Nó đơn giản là thể hiện một trang trống)
<html><body bgcolor="#FFFFFF"></body></html>
File khác là admin.hello.php, đây là điểm vào cho section quản trị trong
component của chúng ta. Bởi vì chúng ta chưa có section quản trị trong component
vào thời điểm này nên nó sẽ có nội dung tương tự như file index.html.
.III.4. Bổ sung Model vào component
.III.4.1. Tạo Model
Khái niệm model được gọi tên như thế bởi vì lớp này được dùng để mô hình hóa
cho một vài thực thể nào đó. Trong trường hợp của chúng ta, model đầu tiên sẽ đưa
ra một lời chào mừng. Điều này phù hợp với thiết kế hiện tại, bởi vì chúng ta đã có
một view ‘hello’, view đó thể hiện một câu chào mừng tới người dùng.
Cách thông thường để đặt tên cho các model trong Joomla! Frameword là tên lớp
bắt đầu bằng tên của component (trong trường hợp của chúng ta là ‘hello’), tiếp theo
là ‘model’, và cuối cùng là là tên của model. Bởi thế lớp model của chúng ta được
gọi là HelloModelHello.
Ở thời điểm này chúng ta chỉ mô hình hóa cách xử lý của model hello, và nó sẽ trả
lại một lời chào. Chúng ta sẽ có một phương thức được gọi là getGreeting(). Phương
thức này đơn giản là trả lại chuỗi “Hello, World”. Dưới đây là code cho model của
chúng ta:
<?php
defined('_JEXEC') or die();
jimport( 'joomla.application.component.model' );
class HelloModelHello extends JModel
{
function getGreeting()
{
return 'Hello, World!';
}
}
Trong đoạn code trên, chú ý dòng bắt đầu là lệnh jimport. Hàm jimport được sử
parent::display($tpl);
}
}
?>
.III.4.3. Bổ sung file vào package
Tất cả những gì còn lại cần phải làm là bổ sung một entry vào file XML để model
mới của chúng ta được copy. Joomla! Frameword sẽ tìm kiếm model của chúng ta
trong thư mục models. Bởi vậy entry cho file này trông như sau:
<filename>models/hello.php</filename>
File hello.xml mới của chúng ta sẽ như sau:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE install SYSTEM "http://dev.joomla.org/xml/1.5/component-
install.dtd">
<install type="component" version="1.5.0">
<name>Hello</name>
<creationDate>2007 02 22</creationDate>
<author>John Doe</author>
<authorEmail>[email protected]</authorEmail>
<authorUrl>http://www.example.org</authorUrl>
<copyright>Copyright Info</copyright>
<license>License Info</license>
<version>Component Version String</version>
<description>Description of the component ...</description>
<files folder="site">
<filename>index.html</filename>
<filename>hello.php</filename>
<filename>controller.php</filename>
<filename>views/index.html</filename>
<filename>views/hello/index.html</filename>
<filename>views/hello/view.html.php</filename>
thống khác nhau. Các thông tin thêm về lớp này có thể tham khảo trong tài liệu về
API. Tên hàm getDBO là viết tắt cho get DataBase Object, có thể nhớ một cách dễ
dàng và rất quan trọng.
Bây giờ chúng ta đã có một tham chiếu đến đối tượng CSDL, Chúng ta có thể lấy
dữ liệu. Điều này được thực qua hai bước:
− Lưu trữ câu truy vấn của vào đối tượng CSDL
− Tải kết quả về
Code của phương thức getGreeting() bây giờ sẽ như sau:
function getGreeting()
{
$db =& JFactory::getDBO();
$query = 'SELECT greeting FROM #__hello';
$db->setQuery( $query );
$greeting = $db->loadResult();
return $greeting;
}
Trong đoạn mã trên ‘hello’ là tên của bảng trong CSDL mà chúng ta sẽ tạo ra
trong phần sau. Và ‘greeting’ là tên của trường lưu trữ câu chào mừng.
Phương thức $db→loadResult() sẽ chạy câu lệnh truy vấn CSDL đã được lưu trữ
và trả về trường đầu tiên của dòng đầu tiên trong kết quả. Xem JDatabase API
reference để có các thông tin nhiều hơn về các phương thức khác trong lớp
JDatabase.