Xậy dựng component cho website Joomla thực hiện một số công việc cơ bản của quản lý dự án phần mềm như:
Trang 1ĐẠ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 771Website: itf.ud.edu.vn, E-mail: cntt@ud.edu.vn
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
Trang 2LỜ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
đề tài.
Một lần nữa tôi xin chân thành cảm ơn !
Trang 3LỜI CAM ĐOAN
Tôi xin cam đoan:
1 Những nội dung trong báo cáo này là do tôi thực hiện dưới sự hướng dẫn trực tiếp của thầy T.S Nguyễn Thanh Bình và thầy Th.S Nguyễn Văn Nguyên.
2 Mọi tham khảo dùng trong báo cáo này đều được trích dẫn rõ ràng tên tác giả, tên công trình, thời gian, địa điểm công bố.
3 Mọi sao chép không hợp lệ, vi phạm quy chế đào tạo, hay gian trá, tôi xin chịu hoàn toàn trách nhiệm.
Sinh viên, Ngưyễn Thị Thu Thiện
Lê Thị Hồng Thủy
Trang 4MỤC LỤC
MỞ ĐẦU 1
I Đặt vấn đề 1
II Lý do chọn đề tài 1
III Hướng nghiên cứu của đề tài 2
III.1 Về mặt lý thuyết 2
III.2 Công cụ xây dựng đề tài 2
IV Dự kiến kết quả đạt được 2
V Nội dung tóm tắt các chương tiếp theo 3
CƠ SỞ LÝ THUYẾT ERROR! BOOKMARK NOT DEFINED. VI Giới thiệu về joomla 1
VI.1 Joomla là gì? 1
VI.2 Các dòng phiên bản của Joomla 1
VI.3 Kiến trúc Joomla 1
VII Một số khái niệm trong Joomla 2
VII.1 Front-end và back-end 2
VII.1.1 Front-end 2
VII.1.2 Back-end 2
VII.2 Template 2
VII.3 Menu 2
VII.4 Các thành phần mở rộng 3
VII.4.1 Module 3
VII.4.2 Component 3
VII.4.3 Mambot (Plug-in) 4
VIII Cách xây dựng một component trong Joomla 1.5 6
VIII.1 Giới thiệu mô hình MVC 6
VIII.2 Cài đặt Joomla MVC 6
VIII.3 Tạo một component 7
VIII.3.1 Tạo một entry point 7
VIII.3.2 Tạo Controller 8
VIII.3.3 Tạo View 9
VIII.3.4 Tạo Template 10
VIII.3.5 Đóng gói tất cả- Tạo file hello.xml 10
VIII.4 Bổ sung Model vào component 12
VIII.4.1 Tạo Model 12
VIII.4.2 Sử sụng Model 13
VIII.4.3 Bổ sung file vào package 14
VIII.5 Sử dụng cơ sở dữ liệu trong component MVC 15
VIII.5.1 Lấy dữ liệu 15
VIII.5.2 Tạo file SQL trong quá trình cài đặt và gỡ bỏ component 16
VIII.5.3 Cập nhật file cài đặt 17
VIII.6 Tạo giao diện quản trị trong MVC 19
i
Trang 5VIII.6.1 Tạo Framework cơ sở 19
VIII.6.2 Model Hellos 20
VIII.6.3 View Hellos 22
VIII.6.4 Template hellos 23
PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG 25
IX Phân tích hệ thống thông tin 25
IX.1 Sơ đồ Use Case 26
IX.1.1 Use Case “Projects Management” 26
IX.1.2 Use Case “Tasks Management” 26
IX.1.3 Use Case “Delivery Management” 27
IX.1.4 Use Case “Requirements Management” 27
IX.1.5 Use Case “Design Management” 28
IX.1.6 Use Case “Coding Management” 28
IX.1.7 Use Case “Risks Management” 29
IX.1.8 Use Case “File Manage” 29
IX.1.9 Use Case “Calendar Management” 30
IX.1.10 Use Case “Board Management” 30
IX.1.11 Use Case “Profile Management” 31
IX.1.12 Use Case “User Management” 31
IX.2 Danh sách Actor, Phân Quyền và Use Case 31
IX.2.1 Actor 31
IX.2.2 Use Case 32
IX.3 Đặc tả chi tiết 35
IX.3.1 Use Case “Login” 35
IX.3.2 Use Case “Projects Management” 36
I.1.2 Use Case “Tasks Management” 38
I.1.2 Use Case “Delivery Management” 39
I.1.2 Use Case “Requirements Management” 41
I.1.2 Use Case “Design Management” 42
I.1.3 Use Case “Coding Management” 44
I.1.4 Use Case “Risks Management” 45
I.1.5 Use Case “File Manage” 46
I.1.2 Use Case “Calendar Management” 48
I.1.3 Use Case “Board Management” 49
I.1.4 Use Case “Profile Management” 51
I.1.5 Use Case “User Management” 51
I.2 Sơ đồ tuần tự 53
I.2.1 Chức năng “Login” 53
I.2.2 Chức năng “Projects Management” 53
I.2.3 Chức năng “Tasks Management” 55
I.2.4 Chức năng “Delivery Management” 56
I.2.5 Chức năng “Requirements Management” 57
I.2.6 Chức năng “Design Management” 58
I.2.7 Chức năng “Coding Management” 59
I.2.8 Chức năng “Risks Management” 60
ii
Trang 6Mục lục iii
I.2.9 Chức năng “File Manage” 61
I.2.10 Chức năng “Calendar Management” 62
I.2.11 Chức năng “Board Management” 63
I.2.12 Chức năng “User Management” 64
I.3 Thiết kế hệ thống 65
I.3.1 Tổ chức dữ liệu 65
XÂY DỰNG CHƯƠNG TRÌNH VÀ KẾT QUẢ THỰC HIỆN 76
I Công cụ và môi trường phát triển 76
I Một số kết quả đạt được 76
I.1 Màn hình khởi động 76
I.2 Màn hình “Tasks Management” 77
II Màn hình “Delivery Management” 77
II.1 Màn hình “Requirements Management” 78
II.2 Màn hình “Design Management” 78
II.3 Mành hình “Coding Management” 79
II.4 Màn hình “Risks Management” 79
II.5 Màn hình “Upload File” 80
II.6 Màn hình “Calendar Management” 80
II.7 Màn hình “Update profile” 81
II.8 Màn hình “User Management” 81
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 82
Trang 7Mục lục iv
Trang 8mã nguồn mở là tiết kiệm chi phí Ngoài ra, khi ứng dụng phần mềm chạy trên nềnweb người dùng sẽ dễ dàng truy cập và sử dụng bằng các trình duyệt như Firefox hay
IE mà không cần phải cài đặt gì thêm
Có nhiều chương trình mã nguồn mở khác nhau, chúng tôi chọn tìm hiểu về hệthống quản lý tin Joomla CMS vì Joomla được sử dụng ở khắp mọi nơi trên thế giới,
từ những website cá nhân cho tới những hệ thống website doanh nghiệp có tính phứctạ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àngquả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ủacô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ácyê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 chowebsite 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 đượcnhiề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 choviệ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 gianthự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ànhcô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
Trang 9 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 componentquản lý dự án phần mềm cho website Joomla » làm đề tài tốt nghiệp Việc xây dựngmột ứng dụng như vậy nhằm áp dụng những kiến thức mà chúng tôi đã được học ởtrường trong thời gian qua vào thực tiễn với mong muốn sẽ làm cho công việc quản lý
dự án doanh nghiệp phần mềm sẽ thuận tiện hơn Chương trình được viết trên nềnweb nên những người tham gia dự án chỉ cần truy cập vào website của công ty để lấynhững thông tin về dự án, trao đổi về công việc Hơn nữa người quản lý vẫn có thểxem xét quá trình làm dự án, trực tiếp quản lý dự án đó khi vắng mặt ở công ty
III Hướng nghiên cứu của đề tài
III.1 Về mặt lý thuyết
Tìm hiểu về CMS Joomla, ngôn ngữ PHP, MySQL, cách xây dựng
component cho website Joomla
Tìm hiểu về các thao thác cơ bản trong việc quản lý dự án nói chung và quản lý dự án phần mềm nói riêng
Đưa ra một số định hướng để phát triển đề tài
III.2 Công cụ xây dựng đề tài
Công cụ nghiên cứu cơ sở lý thuyết: Các tài liêu tham khảo về ngôn ngữ PHP, MySQL, Joomla, quản lý dự án
Công cụ thiết kế phần mềm: trình duyệt Firefox, Internet Explore, Joomla 1.5.9, Jcode studio for Joomla, StarUML
IV Dự kiến kết quả đạt được
Xậy dựng component cho website Joomla thực hiện một số công việc cơ bản củaquản lý dự án phần mềm như:
Hiển thị thông tin các dự án mà công ty đang thực hiện Chương trình cho phép admin và trưởng dự án trực tiếp chỉnh sửa, cập nhật thông tin về dự án trên đó Nhân viên sau khi xem thông tin về dự án nếu muốn tham gia có thể gởi yêu cầu và nếu đựợc admin hay trưởng dự án đồng ý thì sẽ trở thành thành viên của dự án
Trưởng dự án có thể chia một dự án ra thành nhiều task nhỏ, mỗi task có một thời hạn deadline riêng, do một nhân viên trực tiếp chịu trách nhiệm để tiện cho việc quản lý
Trang 10 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 quanlê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ếtvớ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
Chương 3: Xây dựng chương trình và kết quả thực hiện
Chương 4: Kết luận
Trang 11CHƯƠNG 2
CƠ SỞ LÝ THUYẾT
Trang 12I Giới thiệu về joomla
Joomla là một hệ quản trị nội dung mã nguồn mở (Open Source Content
Management Systems).Joomla được viết bằng ngôn ngữ PHP và kết nối tới cơ sở dữ
liệu MySQL , cho phép người sử dụng có thể dễ dàng xuất bản các nội dung của họlên Internet hoặc Intranet
Joomla có các đặc tính cơ bản là: bộ đệm trang (page caching) để tăng tốc độ hiểnthị, lập chỉ mục, đọc tin RSS (RSS feeds), trang dùng để in, bản tin nhanh, blog, diễnđàn, bình chọn, lịch biểu, tìm kiếm trong Site và hỗ trợ đa ngôn ngữ
Joomla! được sử dụng rất phổ biến, từ những website cá nhân cho tới những hệthống website doanh nghiệp, cung cấp nhiều dịch vụ và ứng dụng Joomla dễ dàng càiđặt, quản lý và có độ tin cậy cao
Joomla có mã nguồn mở do đó việc sử dụng Joomla là hoàn toàn miễn phí.
Joomla có 2 dòng phiên bản chính: Joomla 1.0.x và Joomla 1.5.x
Dòng phiên bản 1.0.x: Là phiên bản phát hành ổn định Được sử dụng rộng rãi, có nhiều thành phần mở rộng (component, module, mambot)
Dòng phiên bản 1.5.x: Là phiên bản cải tiến từ Joomla 1.0.x (phần mã được viết lại hoàn toàn, tuy nhiên vẫn giữ cách hành xử như cũ) Joomla 1.5 hỗ trợ
đa ngôn ngữ Joomla 1.5 dùng charset mặc định là UTF-8 (thay vì ISO-8859-1 trong Joomla 1.0.x)
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
Trang 13Hì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 dungcủ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 trangWeb Joomla! cho phép cài đặt và thay đổi Temp cho Web Site hay cho từng trangWeb 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
Trang 14Joomla! cho phép lựa chọn và quyết định Menu nào làm Trang chủ (Home) là trang
sẽ xuất hiện đầu tiên khi truy cập vào địa chỉ của trang Web
Tất cả các thành phần, nội dung, trong Joomla! đều có thể cho phép hiển thị hay
không hiển thị (sử dụng hay không sử dụng) thông qua chức năng Published hay Unpublish
II.4 Các thành phần mở rộng
II.4.1 Module
Module là một trong 3 thành phần mở rộng chính của Joomla! Đó là một đoạn mã
nhỏ thường được dùng để truy vấn các thông tin từ cơ sở dữ liệu và hiển thị các kếtquả tìm được Nó có thể được nạp vào một vị trí bất kỳ trên template (vị trí left, right,top, bottom hoặc vị trí do người dùng định nghĩa); có thể hiện trên tất cả các trangcủa Website hay một số trang được ấn định Khả năng tương tác giữa người sử dụng
và hệ thống thông qua module là hạn chế (chúng ta thường chỉ nhận thông tin trả về)
Module có tên bắt đầu bằng mod_ Chúng ta có các module thông dụng:
Lastest News (mod_latestnews): Module hiển thị các tin mới nhất
Popular News (mod_mostreads): Module hiển thị các bài được quan tâm nhiều nhất
Related Items (mod_related_items): Module hiển thị các bài viết liên quan
Random Image (mod_random_image): Module hiển thị các ảnh ngẫu nhiên
Search Module (mod_search): Module công cụ tìm kiếm
Login Module (mod_login): Module hiển thị form đăng nhập hệ thống
Stats Module (mod_stats): Module hiển thị các thông tin thống kê về hệ thống
Menu Module (mod_mainmenu): Module hiển thị các menu của website
Banners Module (mod_banners): Moudule hiển thị các banner quảng cáo
II.4.2 Component
Component là một thành phần mở rộng lớn nhất và phức tạp nhất của Joomla CMS.Các component có thể xem như là các ứng dụng con và nếu joomla là một hệ điềuhà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ạinhư thế nào mỗi khi có yêu cầu duyệt nội dung được đưa ra
Trang 15Một component có hai thành phần chính: phần quản trị và phần trên site Phần trênsite 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ụngquả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ộidung của component
Thông thường sau khi cài đặt joomla có sẵn các component: Banner (quản lý cácbả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àiwebsite), 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 mambotnà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 đã đưavà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áttriể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 đượcdù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áchrờ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 với ngườidùng bao quanh dữ liệu có thể được định dạng và tùy biến lại mà không phải lập trìnhlại việc xử lý dữ liệu nữa
Model: là thành phần của component đóng gói dữ liệu cho ứng dụng Nó thường
cung cấp các thủ tục để quản lý, thao tác dữ liệu trong đó có thêm các thủ tục để lấy
dữ liệu từ model Có thể là bổ sung (insert), loại bỏ (delete) hay cập nhật (update)thông tin về một trường nào đó trong cơ sở dữ liệu (CSDL) Theo cách này, nếu mộtứng dụng chuyển đổi sang việc sử dụng một file bình thường để lưu trữ thông tin của
nó thay vì sử dụng CSDL thì chỉ có thành phần Model là thay đổi còn các thành phầnView và Controller là không đổi
View: là một thành phần của component được sử dụng để trả lại dữ liệu từ model.
Đối với ứng dụng web, view thông thường là các trang HTML để trả lại dữ liệu Viewlấy dữ liệu từ Model (dữ liệu này được chuyển qua View tới Controller) Sau cùng là
Trang 16đưa dữ liệu vào trong template (dữ liệu này sẽ hiển thị với người dùng) View khônglàm thay đổi dữ liệu, nó chỉ hiển thị dữ liệu lấy từ Model mà thôi)
Controller: Controller chịu trách nhiệm phản hồi các hành động của người dùng.
Trong các ứng dụng web, một hành động của người dùng thông thường là một yêucầu tải trang Controller sẽ xác định yêu cầu gì được người dùng đưa ra và phản hồithích hợp bằng việc yêu cầu Model tính toán dữ liệu phù hợp và chuyển từ Model vàoView Controller không thể hiện dữ liệu từ Model, nó kích hoạt các phương thức trongModel để hiệu chỉnh dữ liệu và sau đó chuyển từ Model sang View để hiển thị dữ liệu Trong Joomla, mô hình MVC được hỗ trợ thông qua 3 lớp JModel, JView vàJcontroller
III.2 Cài đặt Joomla MVC
Trong Joomla mấu MVC được thực hiện sử dụng 3 lớp:
<classname>JModel</classname>
<classname>JView</classname>
<classname>JController</classname>
III.3 Tạo một component
Đối với component cơ sở của chúng ta, chúng ta chỉ cần 5 file:
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ệuPOST Đố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ể đượcxem như một điểm vào đơn cho component của chúng ta:components/com_hello/hello.php
<?php
Trang 17defined( '_JEXEC' ) or die( 'Restricted access' );
$controller = new $classname( );
$controller->execute( JRequest::getVar( 'task' ) );
$controller->redirect();
?>
Câu lệnh đầu tiên là câu lệnh kiểm tra bảo mật
JPATH_COMPONENT là đường dẫn tuyệt đối tới component hiện tại, trongtrường hợp của chúng ta là components/com_hello Nếu bạn cần xác định sitecomponent hoặc admin component thì bạn có thể sử dụngJPATH_COMPONENT và JPATH_COMPONENT_ADMINISTRATOR
DS là dấu phân cách thư mục trong hệ thống của bạn: có thể là “\” hoặc “/” Điềunày được thiết lập tự động bởi frameword, vì thế developer không phải quan tâm đếnviệc phát triển các phiên bản khác nhau cho các hệ điều hành khác nhau DS sẽ luônđược sử dụng khi tham chiếu đến các file trên máy chủ cục bộ
Sau khi tải controler cơ bản, chúng ta sẽ kiểm tra một controler cụ thể cần đến.Trong component này, controler cơ bản chỉ là một controler nhưng chúng ta đề cậpđến điều này cho các công việc trong tương lai
<classname>JRequest</classname>:getVar() tìm một biến trong URL hoặc POST dữliệu Bởi vậy nếu URL của chúng ta là: index.php?option=com_hello>controller=controller_name thì chúng ta có thể nhận được têncontroler của chúng ta trong component bằng sử dụng câu lệnh sau: echo
<classname>JRequest</classname>::getVar(’controller’);
Bây giờ chúng ta đã có controler cơ sở ‘<classname>HelloController</classname>’trong com_hello/controller.php, và nếu cần thiết bổ sung thêm các controler dạng như:
Trang 18‘<classname>HelloControllerController1</classname>’ trongcom_hello/controllers/controller1.php.
Sau khi controler được tạo ra, chúng ta cho controler chạy nhiệm vụ như được chỉ
ra trong URL: index.php?option=com_hello&task=sometask Nếu không có nhiệm vụ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ácnhư ‘save’, ‘edit’, ‘new’, …
Controler có thể quyết định redirect the page (thực hiện tải lại một trang), thôngthườ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ựchiệ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ựchiệ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ứctrong controler là display() Hầu hết các hàm cần thiết được xây dựng trong lớpJControler, bởi vậy tất cả những gì chúng ta cần là gọi phương thứcJControler::display(); Code của controler cơ sở như sau:
Trang 19Phươ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àgọi hàm khởi tạo của cha nó Tuy nhiên, đó là một cơ sở khá tốt để chỉ ra điều gì cầnphải làm trong controler
Phương thức <classname>JController</classname>::display() sẽ xác định view vàlayout từ request, tải view đó và thiết lập layout Khi bạn tạo ra một menu item chocomponent của bạn, menu manager sẽ cho phép admin lựa chọn view mà họ thích đểthể hiện và trên layout cụ thể Một view thông thường được xem như một cách hiểnthị của một tập các dữ liệu nào đó (ví dụ, danh sách các car, danh sách các event, mộtcar đơn, một event đơn, …) Một layout là một cách tổ chức view
Trong component của chúng ta chúng ta sẽ có một view đơn được gọi là hello, vàmột layout đơn (default)
III.3.3 Tạo View
Nhiệm vụ của view là rất đơn giản: nó nhận dữ liệu được thể hiện và đặt nó lêntemplate Dữ liệu được đặt lên template sử dụng phương thức
<classname>JView</classname>::assignRef Đoạn mã của view như sau:
$greeting = "Hello World!";
$this->assignRef( 'greeting', $greeting );
parent::display($tpl);
}
}
?>
III.3.4 Tạo Template
Joomla template/ layout là các file PHP thông thường, được sử dụng để bố trí, xếpđặt dữ liệu từ view theo một cách cụ thể nào đó Các biến được gán bởi phương thứcJView::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ụ)
Trang 20Template 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ợpquy 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 FPTclient 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ạngthô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:
<version>Component Version String</version>
<description>Description of the component </description>
<files folder="site">
Trang 21<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 componentcủa chúng ta Bởi vì chúng ta chưa có section quản trị trong component vào thời điểmnà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óacho 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
Trang 22mộ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ộtview ‘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ớpbắ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ươngthức này đơn giản là trả lại chuỗi “Hello, World” Dưới đây là code cho model củachúng ta:
Bây giờ chúng ta đã tạo ra model của mình Tiếp theo chúng ta sẽ phải hiệu chínhview để nó có thể lấy được lời chào
III.4.2 Sử sụng Model
Joomla! Frameword được thiết lập theo cách controler sẽ tự động tải model có têntrùng với view và đặt nó vào trong view Vì view của chúng ta được đặt là ‘hello’, nênmodel ‘hello’ của chúng ta sẽ tự động được tải và được đặt vào trong view Bởi vậychúng ta sẽ dễ dàng nhận được một tham chiếu đến model của chúng ta sử dụngphương thức JView::getModel() Đoạn mã cho view trước của chúng ta có chứa dòng:
Trang 23$greeting = "Hello World!";
Để sử dụng model, chúng ta chuyển đổi dòng trên thành:
$model =& $this->getModel();
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 để modelmới của chúng ta được copy Joomla! Frameword sẽ tìm kiếm model của chúng tatrong thư mục models Bởi vậy entry cho file này trông như sau:
Trang 24<name>Hello</name>
<creationDate>2007 02 22</creationDate>
<author>John Doe</author>
<authorEmail>john.doe@example.org</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">
Trang 25III.5 Sử dụng cơ sở dữ liệu trong component MVC
III.5.1 Lấy dữ liệu
Model hiện tại của chúng ta có một phương thức getGreeting() Phương thức nàyrất đơn giản, tất cả những gì nó làm là trả về một câu chào được code cố định
Để làm những điều này thú vị hơn, chúng ta sẽ lấy câu chào từ bảng cơ sở dữliệu Trong phần sau, chúng ta sẽ mô tả làm cách nào để tạo ra một file SQL và bổsung các đoạn mã phù hợp vào file XML để tạo ra bảng và bổ sung dữ liệu mẫu vàobảng khi component được cài đặt Bây giờ, chúng ta chỉ đơn giản thay thế câu lệnh trả
về trong hàm getGreeting bằng đoạn code lấy lời chào mừng từ CSDL và trả lại lờichào mừng đó
Đầu tiên, chúng ta cần lấy được một tham chiếu đến đối tượng CSDL Vìjoomla sử dụng CSDL cho các thao tác thông thường của nó, nên nó đã có một kết nốitới CSDL tồn tại, bởi thế không cần thiết phải tạo ra một kết nối CSDL riêng Có thểlấy được một tham chiếu tới kết nối bằng cách sử dụng câu lệnh:
$db =& JFactory::getDBO();
JFactory là một lớp static được sử dụng để nhận tham chiếu đến nhiều đối tượng hệ
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
Trang 26Phươ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 APIreference để có các thông tin nhiều hơn về các phương thức khác trong lớp JDatabase
III.5.2 Tạo file SQL trong quá trình cài đặt và gỡ bỏ component
Joomla! installer có xây dựng sẵn việc hỗ trợ đối với việc chạy các câu truy vấntrong quá trình cài đặt component Tất cả các câu truy vấn này được lưu trữ trong mộtfile text chuẩn
Chúng ta sẽ có 3 câu truy vấn trong file cài đặt: việc đầu tiên sẽ thực hiện xóa bảngtrong trường hợp nó đã tồn tại, tiếp theo thực hiện việc tạo ra bảng với các trường phùhợp, và cuối cùng là chèn dữ liệu vào bảng vừa tạo
Dưới đây là các câu truy vấn của chúng ta:
DROP TABLE IF EXISTS `# hello`;
CREATE TABLE `# hello` (
`id` int(11) NOT NULL auto_increment,
`greeting` varchar(25) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT DEFAULT CHARSET=utf8;
INSERT INTO `# hello` (`greeting`) VALUES ('Hello, World!'),
('Bonjour, Monde!'),
('Ciao, Mondo!');
Joomla! sẽ thay thế các tiền tố #_ trong tên bảng bởi tiền tố đã được xác địnhtrong quá trình cài đặt Đối với hầu hết các bản cài đặt, bảng này sẽ trở thànhjos_hello Điều này cho phép nhiều bản cài đặt joomla có thể sử dụng chung CSDL,
và ngăn chặn các xung đột với các ứng dụng khác sử dụng cùng tên bảng (ví dụ, haiứng dụng có thể chia sẻ chung một CSDL, nhưng cả hai đều cần một bảng ‘user’, vớicách này vấn đề sẽ được giải quyết)
Chúng ta đã xác định hai trường trong CSDL Trường đầu tiên là ‘id’ đóng vai trò
là khóa chính Khóa chính trong một bảng của CSDL là trường dùng để xác định duynhất một bản ghi trong bảng Nó thường được sử dụng để tìm kiếm các hàng trongCSDL Trường còn lại là ‘greeting’ Đây là trường lưu câu chào mừng được trả lại bởitruy vấn mà chúng ta đã sử dụng ở trên Các câu truy vấn của chúng ta sẽ được lưutrong file install.utf.sql
Tạo ra file SQL để gỡ bỏ cài đặt
Trang 27Joomla! sẽ quản lý việc xóa các file và các thư mục được tạo ra trong quá trình càiđặt, nhưng phải bổ sung các câu truy vấn sẽ loại bỏ các bảng đã được thêm vàoCSDL Trong ví dụ, chúng ta chỉ cần một câu truy vấn sau để xóa nó
DROP TABLE IF EXISTS `# hello`;
Câu truy vấn này sẽ được lưu trữ trong file uninstall.utf.sql
Cập nhật file cài đặt
Chúng ta cần phải thay đổi một vài thứ trong file cài đặt XML Đầu tiên, chúng tacần bổ sung hai file mới vào danh sách các file File cài đặt SQL sẽ phải đưa vàotrong thư mục admin Thứ hai, chúng ta cần phải báo cho trình cài đặt chạy các câutruy vấn trong các file của chúng ta trong quá trình cài đặt và quá trình gỡ bỏ
File XML mới của chúng ta sẽ như sau:
<version>Component Version String</version>
<description>Description of the component </description>
Trang 28Chú ý đến hai thuộc tính xuất hiện trong các thẻ <file> nằm trong các phần
<install> và <uninstall>: charset và driver Charset là kiểu charset được sử dụng Chỉ
có charset hợp lệ là utf8 Nếu bạn muốn tạo ra các file cài đặt cho CSDL không phải
là utf8 bạn sẽ bỏ qua thuộc tính này Thuộc tính driver xác định CSDL nào các câutruy vấn được viết cho Hiện tại, thuộc tính này chỉ có thể là mysql, nhưng các phiênbản joomla trong tương lai có thể có nhiều dạng CSDL hơn
Trang 29III.6 Tạo giao diện quản trị trong MVC
III.6.1 Tạo Framework cơ sở
Frameword cơ sở của panel quản trị cũng tương tự như phần site Điểm vào chínhcho phần quản trị là file admin.hello.php File này giống y hệt file hello.php được sửdụng trong phần site ngoại trừ tên của controler mà nó tải sẽ được thay đổi thànhHellosController Ngoài ra, controler mặc định được gọi là controller.php và file nàygiống y hệt controler mặc định trong phần site, ngoại trừ tên của controler được gọi làHellosController thay vì HelloController Sự thay đổi này để JControler theo mặc định
sẽ tải hellos view, view này sẽ hiển thị một danh sách các câu chào mừng
Dưới đây là code của admin.hello.php
$controller = new $classname( );
$controller->execute( JRequest::getVar( 'task' ) );
$controller->redirect();
?>
Chúng sẽ bắt đầu với view hellos và model hellos Đầu tiên là model hellos
III.6.2 Model Hellos
Model Hellos sẽ rất đơn giản Hiện tại, công việc mà chúng ta cần chỉ là truy vấn
để nhận được một danh sách của các câu chào mừng từ CSDL Công việc này sẽ đượcthực hiện bằng cách gọi phương thức getData()
Trang 30Lớp JModel có một phương thức protected được xây dựng sẵn _getList() Phươngthức này có thể được sử dụng để đơn giản hóa tác vụ truy vấn để nhận được một danhsách các bản ghi từ CSDL Đơn giản là chúng ta cần truyền cho nó câu truy vấn và nó
sẽ trả lại danh sách các bản ghi
Trong tương lai, có thể chúng ta lại muốn sử dụng câu truy vấn trong một phươngthức khác Vì vậy, ở đây chúng ta sẽ tạo ra một phương thức private _buildQuery() sẽtrả lại câu truy vấn sẽ được truyền vào phương thức _getList() Điều này sẽ tạo ra khảnăng thay đổi câu truy vấn khi nó được đặt trong một tình huống khác
Do đó trong lớp của chúng ta sẽ có hai phương thức: getData() và _buildQuery() Phương thức _buidQuery đơn giản là trả về câu truy vấn Code của nó như sau:
sẽ được gọi là _data
Dưới đây là code của phương thức getData()
Trang 32III.6.3 View Hellos
Bây giờ chúng ta đã có một model để nhận dữ liệu, chúng ta cần hiển thị nó Viewhellos này sẽ khá giống với view trong phần site Model của chúng ta được tự độngcài đặt trên site, bởi vậy nó nằm trong phần quản trị Các phương thức bắt đầu bằng
‘get’ trong model có thể được truy cập bằng việc sử dụng phương thức get() của lớpJView Bởi vậy view của chúng ta sẽ có 3 dòng Một để lấy dữ liệu từ model, một đểđẩy dữ liệu lên template, và một gọi phương thức display để hiển thị Bởi vậy chúng
ta có code như sau:
// Get data from the model
$items =& $this->get( 'Data');
$this->assignRef( 'items', $items );
parent::display($tpl);
}
}
File này được lưu thành views/hellos/view.html.php.
III.6.4 Template hellos
Template sẽ lấy dữ liệu được đưa đến từ view và đưa dữ liệu đó ra đầu ra để hiểnthị Chúng ta sẽ hiển thị kết quả ở đầu ra trong một bảng đơn giản Trong khi template
Trang 33ở phần site là rất đơn giản, thì trong trang quản trị chúng ta sẽ cần mở rộng một chút
để xử lý vòng lặp thông qua dữ liệu
Dưới đây là code trong template của chúng ta:
<?php defined('_JEXEC') or die('Restricted access'); ?>
<form action="index.php" method="post" name="adminForm">
Trang 34<input type="hidden" name="option" value="com_hello" />
<input type="hidden" name="task" value="" />
<input type="hidden" name="boxchecked" value="0" />
<input type="hidden" name="controller" value="hello" />
</form>
Template này được lưu thành views/hellos/tmpl/default.php
Trang 35CHƯƠNG 3
PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG
Trình bày kết quả phân tích và thiết kế bài toán gồm: phân tích chức năng như sơ
đồ UseCase, sơ đồ tuần tự; thiết kế như sơ đồ lớp; giao diện,…)
I Phân tích hệ thống thông tin
Dưới đây là sơ đồ mô tả tổng quát chức năng của hệ thống quản lý dự án
Hình 1: Sơ đồ tổng quát của hệ thống
Trang 36I.1 Sơ đồ Use Case
I.1.1 Use Case “Projects Management”
Hình 2: Sơ đồ Use Case “Projects Management”
I.1.2 Use Case “Tasks Management”
Hình 3: Sơ đồ Use Case “Tasks Management”
Trang 37I.1.3 Use Case “Delivery Management”
Hình 4: Sơ đồ Use Case “Delivery Management”
I.1.4 Use Case “Requirements Management”
Hình 5: Sơ đồ Use Case “Requirements Management”
Trang 38I.1.5 Use Case “Design Management”
Hình 6: Sơ đồ Use Case “Design Management”
I.1.6 Use Case “Coding Management”
Hình 7: Sơ đồ Use Case “Coding Management”
Trang 39I.1.7 Use Case “Risks Management”
Hình 8: Sơ đồ Use Case “Risks Management”
I.1.8 Use Case “File Manage”
Hình 9: Sơ đồ Use Case “File Manage”
Trang 40I.1.9 Use Case “Calendar Management”
Hình 10: Sơ đồ Use Case “Calendar Management”
I.1.10 Use Case “Board Management”
Hình 11: Sơ đồ Use Case “Board Management”