Ngoài việc cungcấp cho những người quản trị trang web webmasters một công cụ xây dựngwebsite, nó còn giúp cho các lập trình viên và nhà phát triển nhiều cách để tùybiến Drupal sử dụng cá
Trang 1TRƯỜNG ĐẠI HỌC VINH
ĐỒ ÁN TỐT NGHIỆP
Đ
Ề TÀI : PHÁT TRIỂN WEBSTIE VỚI DRUPAL7
Giảng viên hướng dẫn : THS.NGUYỄN MINH TÂM
Sinh viên thực hiện : ĐỒNG QUANG TRỌNG
Lớp : 47K - CNTT
VINH, 2011
Trang 2Lời nói đầu
Sinh viên CNTT có hai mối quan tâm chính, đó là kiến thức trong quá trình học vàviệc làm sau khi ra trường Về cả hai mặt này, mã nguồn mở là một lựa chọn rấtxứng đáng
So với việc tự học và xây dựng sản phẩm, việc học và nghiên cứu một cáchnghiêm túc một mã nguồn mở nào đó mang lại hiểu quả và nhiều ưu điểm hơnnhư:
- Nắm bắt và hiểu được các mô hình, kiến trúc để xây dựng một sản phẩmphần mềm
- Học hỏi được kinh nghiệm, kiến thức, cách viết mã lệnh từ các lập trình viênkinh nghiệm lâu năm đang xây dựng dự án mã nguồn mở
- Có thể tham gia các dự án phát triển của phần mềm mã nguồn mở như làmột kinh nghiệm làm việc thực tế và tích lũy được kỹ năng làm việc từ đó Ngày nay, với sự phát triển của mạng Internet, việc phát triển các web application,website đang có một nhu cầu rất lớn
Đối với các doanh nghiệp thì yêu cầu một website phải đáp ứng các vấn đề:
- Giao diện đơn giản, thân thiện, dễ sử dụng
- Việc quản lý dễ dàng, không đòi hỏi cao về chuyên môn
- Website có tính khả chuyển, phù hợp cho nhiều loại hàng hóa, chức năng
Trang 3các vấn đề trên
Đề tài gồm 3 phần chính:
- Phần 1 giới thiệu, mô tả về các ưu điểm, tính năng, cách xử lý của hệ thống
Drupal 7
- Phần 2 cách phát triển mô-đun với Drupal 7 bằng ví dụ minh họa cụ thể là
mô-đun lấy thông tin thời tiết tự động
- Phần 3 mô tả cách xây dựng website cho bệnh viện 115
Em xin chân thành cảm ơn sự giúp đỡ nhiệt tình của cô giáo Ths.Nguyễn Minh Tâm đã đóng góp những ý kiến quý báu giúp em có thể hoàn thành để tài của mình Một lần nữa em xin chân thành cảm ơn !
Sinh viên thực hiệnĐồng Quang Trọng
Trang 4Mục lục
1 Giới thiệu Drupal 5
1.1 Drupal là gì? 5
1.1.1 Những ai sử dụng Drupal 6
1.1.2 Những đặc tính của Drupal 7
1.2 Drupal làm việc như thế nào 8
1.2.1 Nền tảng công nghệ 8
1.2.2 Phần nhân (core) 10
1.2.3 Giao diện quản trị 11
1.2.4 Mô-đun 11
1.2.5 Hooks 13
1.2.6 Giao diện (theme) 14
1.2.7 Node 17
1.2.8 Block 17
1.2.9 Cấu trúc thư mục 18
1.3 Xử lý một yêu cầu (request) 20
1.3.1 Vai trò của web server 21
Trang 52.1 Phân tích yêu cầu 28
2.2 Làm việc với hệ thống menu 29
2.3 Làm việc với Blocks 33
2.4 Làm việc với Form API 34
2.5 Lấy thông tin thời tiết từ tuoitre.vn 40
3 Xây dựng website bệnh viện 115 43
3.1 Xây dựng website với Drupal 43
3.2 Thiết kế website 45
Tài liệu tham khảo 49
Trang 61 Giới thiệu Drupal
Nhờ những tính năng mạnh mẽ của mình, Drupal còn được coi là một khung sườnphát triển phần mềm (Content Management Framework – CMF) Ngoài việc cungcấp cho những người quản trị trang web (webmasters) một công cụ xây dựngwebsite, nó còn giúp cho các lập trình viên và nhà phát triển nhiều cách để tùybiến Drupal sử dụng các mô-đun (plug-in module) Tất cả mọi thành phần củaDrupal đều có thể được tùy biến sử dụng những mô-đun này
Điều đáng chú ý nhất là cộng đồng phát triển Drupal, vốn được coi là điều thànhcông và đáng giá nhất của drupal Khi Drupal 6 được phát hành tháng 2 năm 2008,
có hơn 700 thành viên đã cùng nhau xây dựng nên phần lõi (core) của Drupal Cóhơn 2000 lập trình viên cùng nhau xây dựng các modules, tham gia trong các quátrình kiểm thử, viết tài liệu, hỗ trợ người dùng, dịch thuật và các công đoạn quantrọng khác của dự án
Trang 7cùng với phản hồi của cộng đồng, để làm cho việc sử dụng được dễ dàng hơn Việccải tiến cách thức sử dụng bao gồm quản lý dễ dàng hơn, quản lý các cập nhật, truyxuất và tạo nội dung.
Theo số liệu mới nhất, Drupal là phần mềm mã nguồn mở được sử dụng bởi hơnnửa tỉ người trên 200 quốc gia và 189 ngôn ngữ Gần 1000 thành viên của cộngđồng Drupal đã và đang đóng góp trực tiếp phát triển lõi Drupal 7 và các modulekèm theo
1.1.1 Những ai sử dụng Drupal
Những năm gần đây, Drupal ngày càng phát triển mạnh mẽ và trở nên rất phổ biến,điều này đã làm cho nhiều công ty lớn đặc biệt chú ý Các công ty về lĩnh vực đaphương tiện như MTV UK, Lifetime và Sony BMG Records đang sử dụng Drupal
để xây dựng cộng đồng cho các sản phẩm của họ Các nhà xuất bản như New YorkObserver, The Onion, tạp chí Popular Science và tạp chí Fast Company cũng sửdụng drupal để xây dựng báo điện tử Ngoài ra còn nhiều tổ chức như tổ chức ân
xá quốc tế (Amnesty International), Liên Hợp Quốc (the United Nations) và hiệphội công nghiệp điện tử (the Electronic Frontier Foundation) cũng sử dụng Drupal
để xây dựng cổng thông tin (portal) Ubuntu Linux, Eclipse, Firefox và jQuery lànhững dự án mã nguồn mở hiện đang sử dụng Drupal để xây dựng trang cộng đồngphát triển cho dự án Ngoài ra còn có các trang web của các blogger nổi tiếng nhưTim Berners-Lee, Heather B.Armstrong (Dooce), mạng xã hội BlogHer, và MerlinMann cũng sử dụng Drupal để phát triển
Trang 81.1.2 Những đặc tính của Drupal
Drupal cung cấp nhiều tính năng mạnh mẽ, bao gồm:
Hệ thống mô-đun mềm dẻo
Mô-đun là những plug-in có thể được chỉnh sửa và thêm các tính năng cho các site
sử dụng Drupal Hầu hết những tính năng cần có đều có thể được đáp ứng bởi mộtmô-đun để giải quyết bài toán hoặc kết hợp nhiều mô-đun lại với nhau
Hệ thống giao diện tùy biến
Tất cả các đầu ra trong drupal đều hoàn toàn có thể được tùy biến, vì vậy có thể dễdàng thay đổi mọi thành phần giao diện trong website theo yêu cầu
Hệ thống tạo nội dung mở rộng
Drupal có thể được định nghĩa nhiều loại nội dung mới (ví dụ như blog, sự kiện,
Trang 9Drupal đã được hỗ trợ sẵn hệ thống tạo đường dẫn thân thiện (human-readable), vàtất cả đầu ra của Drupal đều đạt chuẩn, những tính năng này làm cho các websiteđược xây dựng bởi Drupal rất thân thiện với công cụ tìm kiếm
Hệ thống phân quyền
Các vai trò (role) và hệ thống phân quyền của Drupal rất mạnh mẽ Quyền có thểđược phân cho các vai trò khác nhau hoặc phân quyền đến tận các mô-đun Cácmô-đun đều có thể định nghĩa được quyền hạn và phân quyền theo các quyền hạnnày
1.2 Drupal làm việc như thế nào
1.2.1 Nền tảng công nghệ
Mục tiêu thiết kế của Drupal bao gồm cả việc có thể chạy tốt trên những tài khoảnchia sẻ của máy chủ web rẻ tiền và có thể mở rộng trên những website lớn dạngphân tán Mục tiêu trước hết là có thể sử dụng những công nghệ phổ biến nhất, vàsau đó là tính an toàn, bảo mật cao Công nghệ của Drupal được thể hiện theo hình:
Hình 1 Nền tảng công nghệ
Trang 10Hệ điều hành nằm ở mức thấp nhất và Drupal không cần quan tâm đến điều đó.Drupal có thể chạy thành công trên bất kỳ hệ điều hành nào hỗ trợ PHP
Web server được sử dụng phổ biến nhất với Drupal là Apache, tất nhiên nhữngweb server khác (như là Microsoft IIS) cũng có thể chạy được Bởi vì sự liên kếtchặt chẽ với Apache, Drupal được đóng gói kèm theo tệp tin htaccess giúp bảo
mật bản cài đặt cho Drupal Đồng thời tính năng đường dẫn trong suốt (Clean
Urls) – nhằm loại bỏ các dấu chấm hỏi (?), dấu nháy đơn (‘) và các ký tự nguy
hiểm dẫn đến SQL Injection được sử dụng thành phần mod_rewrite của Apache Drupal làm việc với cơ sở dữ liệu thông qua một lớp cơ sở dữ liệu trừu tượng đượcthiết kế theo hướng tối giản (lightweight database abstraction layer) Lớp này xử lýcác truy vấn SQL và làm cho chúng trở nên khả dụng với các hệ quản trị cơ sở dữliệu khác mà không cần phải code lại Hệ quản trị cơ sở dữ liệu được sử dụng rộngrãi nhất với Drupal là MySQL và PostgreSQL Và sự hỗ trợ cho hệ quản trị cơ sở
dữ liệu Microsoft SQL Server và Oracle đang ngày càng tăng
Drupal được viết bằng ngôn ngữ PHP Vì PHP là một ngôn ngữ rất dễ dàng để học,
vì vậy có rất nhiều chương trình được viết bởi những lập trình viên còn thiếu kinhnghiệm Do đó, chất lượng mã nguồn của các chương trình này thường tạo ra một
ấn tượng xấu cho ngôn ngữ PHP Tuy nhiên, toàn bộ phần mã của Drupal đượcviết theo những tiêu chuẩn viết mã chặt chẽ và các quy trình kiểm thử theo quychuẩn mã nguồn mở Tiếp cận với Drupal giúp cho chúng ta tìm hiểu thêm nhiềukinh nghiệm, kỹ năng trong việc viết mã nguồn, phân tích, thiết kế các hệ thốnglớn
1.2.2 Phần nhân (core)
Trang 11của hệ thống
Phần lõi bao gồm mã nguồn giúp cho hệ thống Drupal khởi động (bootstrap) khinhận 1 yêu cầu (request), một thư viện những hàm chung nhất thường được sửdụng với Drupal và các mô-đun cung cấp những chức năng cơ bản nhất như làquản trị người dùng, bộ từ tố (taxonomy), và hệ thống template được chỉ ra tronghình sau:
Hình 2 Cấu trúc phần Core
1.2.3 Giao diện quản trị
Không giống như những CMS khác, Drupal không có giao diện quản trị riêng biệt.Giao diện trang web và giao diện trang quản trị theo mặc định là một Người dùngđầu tiên (cài đặt Drupal) được xem như là người dùng có quyền cao nhất và cótoàn quyền với trang web
1.2.4 Mô-đun
Drupal là một khung phát triển hướng mô-đun hoàn toàn Các chức năng đượcđóng gói trong các mô-đun Khi cần, bạn có thể bật hoặc tắt các mô-đun tùy ý Khi
Trang 12cần một tính năng mới thì có thể bật các mô-đun có sẵn, cài đặt các mô-đun đượcviết và chia sẻ trên trang chủ Drupal hoặc viết một mô-đun mới theo yêu cầu
Hình 3 Mô hình modular
Bất kỳ tính năng hay sự thay đổi nào cũng có thể được thêm vào thông qua
mô-đun Drupal làm được điều này nhờ sử dụng mẫu thiết kế điều khiển ngược
(inversion of control design pattern) Các hàm chức năng trong mô-đun sẽ đượcgọi bởi khung phát triển trong thời gian thực thi Điều này trong hệ thống Drupal
được gọi là các hooks
Trang 131.2.5 Hooks
Hooks có thể được hiểu như là các sự kiện bên trong Drupal Chúng cũng có thể
được gọi là callbacks bởi vì các quy ước đặt tên hàm và không cần đăng ký lắng
nghe sự kiện (listener) Hooks cho phép các mô-đun có thể “hook vào” bất kỳ sựkiện nào trong hệ thống Drupal
Giả sử một người dùng đăng nhập vào website Drupal Vào thời điểm người dùngđăng nhập, Drupal tạo nên một hook người dùng (user hook) Điều này có nghĩa là
bất kỳ một hàm nào được đặt tên theo quy tắc tên mô-đun + tên hook sẽ được gọi
Cách phổ biến nhất để chỉnh sửa các chức năng trong phần nhân của Drupal là thựcthi thông qua hệ thống hooks trong mô-đun
Trang 14Hình 4 Hệ thống hook
1.2.6 Giao diện (theme)
Trong Drupal, lớp giao diện chịu trách nhiệm tạo ra mã HTML (hoặc JSON, XML,.v.v.) và gửi đến cho trình duyệt Drupal có thể sử dụng nhiều hệ thống giao diệnphổ biến như là Smarty, PHPTal, hoặc PHPTemplate
Trang 15Hình 5 Theme engine
Drupal chấp nhận nhiều cách để tùy biến và viết lại giao diện cho website Từ cáchđơn giản nhất là viết thêm mã CSS để nạp đè các thuộc tính đã được đính nghĩasẵn theo class và ID Tuy nhiên, nếu muốn hoàn toàn làm chủ và tối ưu việc sinh
mã HTML chỉ cần viết lại các tệp tin giao diện theo quy chuẩn đặt tên của Drupal
Trang 16Hình 6 Quá trình xử lý 1 theme
Trang 171.2.7 Node
Tất cả các loại nội dung trong Drupal đều được kế thừa từ một loại đơn giản nhất
được gọi là node Các node có thể là một bài blog, một bản tin, một nhiệm vụ của
dự án hay bất kỳ loại nội dung nào và đều có chung cấu trúc dữ liệu Chính điềunày đã làm nên sự mềm dẻo, linh hoạt cho hệ thống Drupal Dựa vào node, hệthống Drupal hoàn toàn có thể mở rộng thành các giải pháp như cms, bán hàng trựctuyến, quản lý dự án…
Hình 7 Sự kế thừa của node
1.2.8 Block
Block là các phần hiển thị nội dung được bật hoặc tắt dựa theo vị trí xác định tronggiao diện website Ví dụ, block hiển thị số người đang online trên website, blockchứa đường dẫn đến các bản tin mới nhất hay một danh sách các sự kiện đang diễn
ra Block được đặt vào các vùng trên template như sidebar, header, hay footer.Block cũng có thể được thiết đặt để hiển thị theo loại nội dung, trên trang chủ haybất kỳ điều kiện nào
Trang 18Việc xây dựng website trên Drupal thường xoay quanh việc bố trí các block nhưthế nào, vào các vị trí nào
Hình 8 Mô hình thực thể liên kết của block
1.2.9 Cấu trúc thư mục
Bộ đóng gói Drupal bố trí các tệp tin như sau:
Trang 19Hình 9 Hệ thống tệp tin của Drupal
Thông tin các thành phần:
- Thư mục includes chứa các hàm thư viện chung nhất mà Drupal sử dụng
- Thư mục misc chứa các tệp tin JavaScript và các biểu tượng, hình ảnh được
đóng gói kèm Drupal
- Thư mục modules chứa các mô-đun đóng gói sẵn, mỗi mô-đun nằm trong
một thư mục con
- Thư mục profiles chứa các cấu hình cài đặt khác nhau cho một trang web.
Nếu như có bất kỳ cấu hình cài đặt nào khác, Drupal sẽ hỏi nên chọn cấuhình cài đặt nào trong lần cài đặt đầu tiên của website Lý do chính của cấuhình cài đặt này hỗ trợ cho nhà phát triển đóng gói drupal thành các cấu hìnhkhác nhau Ví dụ: cấu hình cho thương mại điện tử, cấu hình cho cổng thôngtin… Bộ cấu hình xuất sắc nhất của Drupal là Open Atrium hỗ trợ cho việcphát triển các ứng dụng web
Trang 20- Thư mục scripts chứa các mã nguồn cho việc kiểm tra cú pháp, làm sạch mã
nguồn (cache), chạy Drupal dạng giao diện dòng lệnh, và các thao tác khácvới cron (php)
- Thư mục sites chứa các thành phần bổ sung cho Drupal như là mô-đun, giao
diện
Hình 10 Cấu trúc thư mục sites
1.3 Xử lý một yêu cầu (request)
Để hiểu tường tận các thao tác xử lý của Drupal khi có một yêu cầu gửi đến có thểcài đặt các trình debug cho php
Trang 211.3.1 Vai trò của web server
Drupal chạy trên nền web server, thường là apache Nếu web server này tìm thấytệp tin htaccess, những cấu hình cho php sẽ được khởi tạo Toàn bộ các yêu cầuđến Drupal đều thông qua index.php Ví dụ, khi một yêu cầu có URL là
http://example.com/foo/bar được gọi, sẽ có các thao tác xử lý sau:
1 Các luật của mod_rewrite trong file htaccess của Drupal sẽ xem xét đường
dẫn và chia nó ra gồm phần đường dẫn cơ sở và đường dẫn (path) Như ví dụ
trên thì phần path là foo/bar
2 Path này sẽ được gán cho tham số truyền URL là q.
3 Kết quả URL nhận được sẽ là http://example.com/index.php?q=foo/bar
4 Drupal sẽ coi foo/bar như là đường dẫn nội bộ và quá trình xử lý bắt đầu
trong index.php
Như kết quả xử lý trên thì Drupal sẽ xem http://example.com/index.php?q=foo/
bar và http://example.com/foo/bar là một vì chúng đều có chung một đường
dẫn nội bộ Điều này đã làm nên khả năng trong suốt đường dẫn tuyệt vời ởDrupal
Đối với các web server khác, như Microsoft IIS, vẫn có thể sử dụng trong suốtđường dẫn bằng cách sử dụng mô-đun của Windows Internet ServerApplication Programming Interface (ISAPI) là ISAPI Rewrite IIS phiên bản 7
đã hỗ trợ việc viết lại URL trực tiếp
1.3.2 Quá trình khởi động
Trang 22Drupal tự khởi động mỗi khi có yêu cầu được gửi đến thông qua 1 loạt các giaiđoạn khởi động Những giai đoạn này được định nghĩa trong bootstrap.inc và quátrình xử lý diễn ra theo các phần như sau.
Thiết đặt cấu hình
Quá trình này sẽ khởi tạo các mảng cấu hình nội bộ và và thiết lập đường dẫn cơ sở($base_url) của site
Bộ đệm đầu cho các trang
Trong những tình huống đòi hỏi khả năng đáp ứng cao của hệ thống, hệ thống bộđệm có thể được gọi trước khi tạo kết nối đến cơ sở dữ liệu Hệ thống này sẽ gọicác tệp tin PHP có chứa hàm page_cache_fastpath() trong đó có chứa nội dung vàtrả về cho trình duyệt Tính năng này sẽ được bật bằng cách thiết đặt biếnpage_cache_fastpath thành TRUE, và tệp tin được nhúng vào sẽ được định nghĩabằng cách thiết đặt biến cache_inc thành đường dẫn đến tệp tin
Khởi tạo cơ sở dữ liệu
Trong quá trình này thì loại cơ sở dữ liệu sẽ được xác định và khởi tạo một kết nối
để sử dụng cho các truy vấn đến cơ sở dữ liệu
Kiểm soát truy cập thông qua Hostname/IP-Based
Drupal chấp nhận việc cấm các máy chủ dựa theo tên host hoặc địa chỉ IP Quátrình điều khiển này sẽ nhanh chóng kiểm tra các yêu cầu được gửi đến có phải từ
1 máy chủ bị cấm hay không? Nếu đúng, yêu cầu này sẽ bị loại bỏ
Khởi tạo phiên xử lý (session handling)
Drupal sử dụng các tính năng ưu điểm của session hỗ trợ sẵn của PHP và bổ sung
Trang 23toàn bộ thông tin biến này, ta có thể gọi hàm user_load() khi cần.
Bộ đệm cuối cho trang
Quá trình này xác định xem trang có cần tải lại hay vẫn sử dụng cache Nếu pháthiện không cần phải tải lại trang thì cache sẽ được sử dụng và quá trình này kếtthúc
Quá trình này hoàn tất toàn bộ quá trình khởi động Các thư viện sử dụng chung,
hỗ trợ giao diện, hỗ trợ cho gọi các hàm callback, xử lý tệp tin, Unicode, các thưviện xử lý hình ảnh… được nạp
Trang 24Hình 11 Quá trình khởi động của Drupal
1.3.3 Xử lý yêu cầu
Các hàm callback sẽ xác định cần phải gọi và xử lý hàm nào cho một yêu cầu Ví
dụ, đối với 1 yêu cầu nội dung như http://example.com/q=?node/3, nó sẽ gọi hàm
node_page_view() trong node.module Quá trình này sẽ trả về một dữ liệu củanode từ cơ sở dữ liệu và đặt vào 1 mảng dữ liệu có cấu trúc Sau đó chuyển sang