Drupal là một hệquản trịnội dung được sửdụng khá phổbiến trên Internet trong
thời gian gần đây. Với thiết kếmang tính module, Drupal cho phép mởrộng các tính
năng một cách linh hoạt thông qua các module được thêm vào mà không phải thay đổi
mã nguồn của hệthống.
Trong khoá luận này, chúng tôi tập trung tìm hiểu các kiến thức liên quan đến
việc xây dựng module cho Drupal bao gồm triển khai các hook, làm việc với cơsởdữ
liệu, thực thi mã JavaScript, xửlý form.v.v. Đi vào thực nghiệm, chúng tôi đã thiết kế
và cài đặt thành công một module có chức năng tích hợp bản đồsốGoogle Maps vào
trang web bằng cách sửdụng API do Google cung cấp. Module này hướng tới các đối
tượng website liên quan đến địa danh, địa điểm nhưwebsite du lịch, tra cứu địa điểm
trên bản đồ.
57 trang |
Chia sẻ: lvbuiluyen | Lượt xem: 7700 | Lượt tải: 5
Bạn đang xem trước 20 trang tài liệu Tìm hiểu cách xây dựng module cho Drupal và các vấn đề liên quan, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
i
Lời cảm ơn
Trước tiên, tôi muốn gửi lời cảm ơn sâu sắc đến TS Nguyễn Hải Châu, người đã
hết lòng hướng dẫn tôi trong suốt quá trình thực hiện khóa luận tốt nghiệp.
Tôi xin chân thành cảm ơn các thầy, các cô của trường đại học Công Nghệ đã
cung cấp cho tôi nền tảng kiến thức quý báu và sự giúp đỡ tận tình để tôi có thể hoàn
thành khóa luận của mình.
Tôi cũng muốn cảm ơn các bạn tôi, những người đã giúp đỡ tôi đưa ra giải pháp
lập trình hiệu quả khi thực hiện các thử nghiệm liên quan đến khóa luận này.
Cuối cùng, tôi xin gửi lời cảm ơn đến gia đình và người thân của tôi, những
người đã luôn động viên và giúp đỡ tôi trong suốt quá trình học tập và thực hiện khóa
luận.
Hà Nội, ngày 20 tháng 5 năm 2010
Sinh viên
Đặng Vĩnh Thiêm
ii
Tóm tắt khóa luận
Drupal là một hệ quản trị nội dung được sử dụng khá phổ biến trên Internet trong
thời gian gần đây. Với thiết kế mang tính module, Drupal cho phép mở rộng các tính
năng một cách linh hoạt thông qua các module được thêm vào mà không phải thay đổi
mã nguồn của hệ thống.
Trong khoá luận này, chúng tôi tập trung tìm hiểu các kiến thức liên quan đến
việc xây dựng module cho Drupal bao gồm triển khai các hook, làm việc với cơ sở dữ
liệu, thực thi mã JavaScript, xử lý form..v..v. Đi vào thực nghiệm, chúng tôi đã thiết kế
và cài đặt thành công một module có chức năng tích hợp bản đồ số Google Maps vào
trang web bằng cách sử dụng API do Google cung cấp. Module này hướng tới các đối
tượng website liên quan đến địa danh, địa điểm như website du lịch, tra cứu địa điểm
trên bản đồ...
iii
Mục lục
Lời cảm ơn...................................................................................................................................i
Tóm tắt khóa luận.......................................................................................................................ii
Mục lục ..................................................................................................................................... iii
Bảng từ viết tắt ..........................................................................................................................vi
Mở đầu........................................................................................................................................1
Chương 1: Tổng quan về Drupal ................................................................................................2
1.1 Giới thiệu về Drupal .........................................................................................................2
1.2 Kiến trúc của Drupal ........................................................................................................2
1.2.1 Kiến trúc module .......................................................................................................3
1.2.2 Các module lõi...........................................................................................................4
1.2.3 Hook ..........................................................................................................................5
1.2.4 Giao diện ...................................................................................................................6
1.3 Các khái niệm cơ bản trong Drupal..................................................................................6
1.3.1 Node ..........................................................................................................................6
1.3.2 Người dùng (User).....................................................................................................8
1.3.3 Khối và cách thể hiện trang .......................................................................................9
1.3.4 Thực đơn – Menu ....................................................................................................10
1.3.5 Form ........................................................................................................................11
1.3.6 API cơ sở dữ liệu và lược đồ ...................................................................................11
1.4 Hệ thống tệp tin và thư mục của Drupal.........................................................................11
1.5. Drupal xử lý yêu cầu như thế nào?................................................................................13
1.5.1 Vai trò của Web server ............................................................................................13
1.5.2 Quá trình khởi động.................................................................................................13
1.5.3 Xử lý yêu cầu...........................................................................................................15
1.5.4 Giao diện hoá nội dung............................................................................................15
1.6 Công cụ dành cho người phát triển.................................................................................15
1.6.1 Module Devel ..........................................................................................................15
iv
1.6.2 Module Coder ..........................................................................................................16
Chương 2 - Xây dựng module cho Drupal ...............................................................................17
2.1 File .info và .module.......................................................................................................17
2.1.1 File .info ..................................................................................................................17
2.1.2 File .module .............................................................................................................19
2.2 Chú thích trong mã nguồn ..............................................................................................19
2.3 Một số hook cơ bản ........................................................................................................20
2.4 Định nghĩa một hook mới...............................................................................................24
2.4.1 Cách tạo một hook...................................................................................................25
2.4.2 Sử dụng hook vào các module khác ........................................................................26
2.5 Một số hàm quan trọng trong thư viện hàm của Drupal.................................................26
2.6 Sử dụng Javascript và AJAX/JSON ...............................................................................28
2.6.1 Giới thiệu về jQuery ................................................................................................28
2.6.2 jQuery hoạt động như thế nào .................................................................................29
2.6.2.1 Sử dụng bộ lọc ID của CSS..............................................................................29
2.6.2.2 Sử dụng XPath..................................................................................................29
2.6.3 jQuery trong Drupal ................................................................................................30
2.7 Form API ........................................................................................................................31
2.7.1 Quá trình thao tác với form .....................................................................................31
2.7.2 Một số thao tác cơ bản.............................................................................................34
2.7.2.1 Tạo form ...........................................................................................................34
2.7.2.2 Giao diện hoá form...........................................................................................35
2.7.2.3 Kiểm tra dữ liệu................................................................................................35
2.7.2.4 Gửi form lên trang web ....................................................................................36
2.8 Làm việc với cơ sở dữ liệu .............................................................................................36
2.8.1 Định nghĩa các tham số trong CSDL.......................................................................36
2.8.2 Một số truy vấn đơn giản.........................................................................................37
2.8.3 Lấy kết quả truy vấn ................................................................................................38
Chương 3: Xây dựng module tích hợp .....................................................................................40
v
Google Maps vào Drupal..........................................................................................................40
3.1 Giới thiệu về Google Maps ............................................................................................40
3.2 Nhúng bản đồ vào trang web..........................................................................................40
3.2.1 Tạo một bản đồ đơn giản .........................................................................................41
3.2.2 Dịch vụ Geocoder - Chuyển đổi giữa địa chỉ và toạ độ ..........................................42
3.3 Xây dựng module Google Maps cho Drupal..................................................................42
3.3.1 Module Google Maps ..............................................................................................42
3.3.1.1 File .info ...........................................................................................................42
3.3.1.2 File .module ......................................................................................................43
3.3.1.3 Tạo thêm trường thông tin cho bài viết ............................................................43
Kết luận ....................................................................................................................................46
Phụ lục A ..................................................................................................................................47
A.1 Cài đặt module Google Maps ........................................................................................48
A.2 Chạy thử chương trình ...................................................................................................50
Tài liệu tham khảo ....................................................................................................................47
vi
Bảng từ viết tắt
Từ viết tắt Cụm từ đầy đủ
URI Uniform Resource Identifier
CVS Concurrent Version System
API Application Programming Interface
CSDL Cơ sở dữ liệu
CMS Content Management System
1
Mở đầu
Trong thời đại Công nghệ thông tin ngày nay, các dịch vụ và ứng dụng web ngày
càng phát triển. Việc một cá nhân hay tổ chức sở hữu một website, một cổng thông tin
là điều dễ thấy trên Internet. Để thiết kế một trang web phục vụ mục đích riêng, người
dùng có nhiều lựa chọn. Một trong số đó là sử dụng hệ quản trị nội dung sẵn có để tổ
chức và xây dựng các trang thông tin.
Với mục đích đó, chúng tôi đã chọn Drupal, một trong các CMS phổ biến nhất,
để thực hiện nghiên cứu. Sở dĩ chúng tôi chọn CMS này vì đây là một hệ mã nguồn
mở miễn phí, được sử dụng rộng rãi và được cộng đồng mạng phát triển ngày càng
hoàn thiện.
Drupal có thể được sử dụng trong nhiều mục đích như xây dựng cổng thông tin
trực tuyến, website cá nhân, tổ chức, website thương mại, báo điện tử, thư viện hình
ảnh...
Hệ thống Drupal được thiết kế để có thể tuỳ biến theo mong muốn của người
dùng và việc tuỳ biến chỉ được thực hiện bằng cách thêm các module để làm tăng khả
năng của hệ thống mà không thay đổi bộ nhân. Do đó, trong khoá luận này chúng tôi
chú trọng tìm hiểu cách xây dựng module cho Drupal và các vấn đề liên quan.
Chúng tôi hi vọng phần kiến thức tìm hiểu được trong khóa luận sẽ mạng lại
những ý nghĩa tích cực trong thực tiễn.
Ngoài phần mở đầu, bố cục của khóa luận gồm 3 chương sau:
• Chương 1: Trình bày các kiến thức cơ bản về hệ thống Drupal và cách hoạt
động.
• Chương 2: Tìm hiểu cách viết một module trong Drupal.
• Chương 3: Đưa lý thuyết đã trình bày vào thực tế để thiết kế một module cụ
thể.
• Cuối cùng là phần kết luận và hướng phát triển trong tương lai.
2
Chương 1: Tổng quan về Drupal
1.1 Giới thiệu về Drupal
Drupal là một framework dùng cho phát triển phần mềm hướng module, một hệ
thống quản trị nội dung miễn phí và mã nguồn mở.
Cũng giống như các hệ thống quản trị nội dung hiện đại khác, Drupal cho phép
người quản trị hệ thống tạo và tổ chức dữ liệu, tùy chỉnh cách trình bày, tự động hóa
các tác vụ điều hành và quản lý hệ thống. Drupal có cấu trúc lập trình rất tinh vi, dựa
trên đó, hầu hết các tác vụ phức tạp có thể được giải quyết với rất ít đoạn mã được
viết, thậm chí không cần. Đôi khi, Drupal cũng được gọi là "Framework cho ứng dụng
Web" vì kiến trúc thông minh và uyển chuyển của nó.
Drupal được chạy trên rất nhiều môi trường khác nhau, bao gồm Windows, Mac
OS X, Linux, FreeBSD, OpenBSD và các môi trường hỗ trợ máy phục vụ web Apache
(phiên bản 1.3+) hoặc IIS (phiên bản 5+) có hỗ trợ ngôn ngữ PHP (phiên bản 4.3.3+).
Drupal kết nối với cơ sở dữ liệu MySQL hoặc PostgreSQL để lưu nội dung và các
thiết lập.
Hình 1.1. Các dịch vụ được sử dụng trong Drupal.
1.2 Kiến trúc của Drupal
Nói một cách ngắn gọn thì Drupal là một hệ quản trị nội dung được viết bằng
ngôn ngữ PHP và sử dụng cơ sở dữ liệu quan hệ để lưu trữ (thông thường là MySQL).
Mặc dù Drupal được viết bằng PHP nhưng lại không sử dụng hướng đối tượng mà sử
dụng kiểu lập trình thủ tục truyền thống. Một trong số lý do đó là khi Drupal ra đời thì
PHP chưa hỗ trợ mạnh về hướng đối tượng. Tuy nhiên, nhìn một cách tổng quát thì
3
Drupal vẫn áp dụng những nguyên lý trong lập trình hướng đối tượng: tính đóng gói,
kế thừa, đa hình...
Kiến trúc của Drupal có thể mô tả như biểu đồ dưới đây:
Hình 1.2. Kiến trúc Drupal
Ở trung tâm của kiến trúc là phần nhân gồm một tập các file chứa các đoạn mã
nạp chương trình và các thư viện quan trọng. Thư viện nhân Drupal đóng vai trò như
lớp kết nối các modules. Phần này cung cấp các dịch vụ như kết nối và quản lý cơ sở
dữ liệu, quản lý bộ khung hook, thư viện trừu tượng phục vụ mail và hình ảnh, hỗ trợ
Unicode... Mặc dù những thư viện này cung cấp các tính năng quan trọng nhưng sức
mạnh thực sự của Drupal nằm ở kiến trúc kiểu module.
1.2.1 Kiến trúc module
Module là một bộ gồm mã PHP và các file hỗ trợ sử dụng API và kiến trúc của
Drupal tích hợp các thành phần mới vào trong framework của Drupal.
Cơ chế module của Drupal được thiết kế để cung cấp một cách thức đồng nhất
giúp người phát triển mở rộng khả năng của hệ thống.
Những file tạo nên module được gộp vào một ví trí nhất định trong cấu trúc thư
mục của Drupal. Khi Drupal cần thông tin về module nào đó, nó sẽ tìm trong những
thư mục này. Mỗi module nằm ở một thư mục riêng và có ít nhất là 2 file - một file
4
cung cấp thông tin về module và một hay nhiều file khác chứa mã PHP thực hiện chức
năng của module đó.
Để một module sử dụng được thì nó phải được bật bởi người quản trị trang web.
Drupal sẽ chuyển các yêu cầu của người dùng đến module đó nếu cần thiết.
1.2.2 Các module lõi
Một số module có vai trò rất quan trọng trong hệ thống Drupal. Nếu gỡ bỏ hoặc
vô hiệu hóa các module này sẽ dẫn đến Drupal mất đi các chức năng thiết yếu. Những
module này được gọi là module lõi, được mặc định phân phối theo mã nguồn Drupal.
Danh sách module lõi nằm ở Administer | Site building | Modules. Trong số này có 5
module quan trọng nhất là Block, Filter, Node, System và User. Những module này
không thể gỡ bỏ hoặc vô hiệu hóa.
Hình 1.2.2. Danh sách các module lõi
Một nét đặc biệt trong kiến trúc của Drupal là các module có thể tác động với
nhau một cách dễ dàng. Bằng cách sử dụng cơ chế hook, dịch vụ mà các module khác
nhau cung cấp có thể kết hợp với nhau để tạo nên các tính năng mạnh hơn mà không
cần phải viết lại một lượng lớn mã nguồn.
5
1.2.3 Hook
Cơ chế hook là một khái niệm rất quan trọng trong việc phát triển module cho
Drupal. Cơ chế này giúp Drupal biết được phải gọi module nào khi xử lý các yêu cầu
khác nhau từ người dùng.
Một yêu cầu của người dùng sẽ được Drupal xử lý qua một chuỗi các bước khác
nhau. Đầu tiên, phần lõi khởi động ứng dụng, định nghĩa các các biến và các hàm
thường dùng. Tiếp theo, hệ thống sẽ nạp các thư viện, giao diện và module cần thiết và
ánh xạ URI được yêu cầu tới đoạn mã điều khiển tương ứng. Sau đó, dữ liệu sẽ được
định dạng và đặt vào giao diện để đưa ra trình duyệt của người dùng.
Trong một thời điểm xác định trước, Drupal thực thi các hook. Hệ thống sẽ dựa
vào hook để kiểm tra một số hoặc tất cả các module đang được bật, tìm kiếm các hàm
theo khuôn mẫu được định nghĩa trước. Một số mẫu liên kết quá trình này với phương
thức "callback" thường được sử dụng trong mô hình xử lý sự kiện. Cơ chế hook cũng
tương tự như thế.
Ví dụ, trong khi tạo nội dung cho một trang dạng View, Drupal có thể quét qua
các module để tìm những hàm có tên _block() và _view()
với modulename được thay bằng tên của module cụ thể khi kiểm tra. Những module
chứa các hàm trên bổ sung cho các hook hook_block() và hook_view().
Khi Drupal tìm thấy những hàm đó thì sẽ thực thi chúng và sử dụng dữ liệu lấy
được để trả lời yêu cầu của người dùng. Sau đó hệ thống sẽ tiếp tục quá trình xử lý
từng bước đã nói ở trên và có thể sẽ thực thi các hook khác nếu cần thiết.
Khi tất cả các bước đã hoàn thành, phản hồi được gửi lại người dùng, Drupal sẽ
dọn dẹp hệ thống và thoát ra.
Những người quen thuộc với lập trình hướng đối tượng có thể xem hook là một
cơ chế tương tự như các giao diện hoặc phương thức ảo. Giống như giao diện trong lập
trình hướng đối tượng, bản triển khai (bao gồm tên, các tham số và giá trị trả về) phải
khớp với phần khai báo của hook. Khác với giao diện, người phát triển module có thể
chọn những hook nào sẽ sử dụng và những hook nào được bỏ qua. Drupal không yêu
cầu tất cả các hook đã định nghĩa phải được triển khai và sử dụng.
Module có thể định nghĩa các hook riêng và module khác có thể dùng chung các
hook đó. Theo cách này, cơ chế hook được mở rộng để cung cấp các chức năng phức
6
tạp. Sử dụng hook thực chất là cách để người phát triển tương tác gián tiếp với bộ
nhân của Drupal.
1.2.4 Giao diện
Đối với một hệ quản trị nội dung (CMS) trên nền web, sức mạnh xử lý không
phải là tất cả. Một CMS ở cấp độ thương mại cần phải cho phép người thiết kế có khả
năng tùy chỉnh trang web với chế độ xem-và-cảm nhận (look-and-feel) mà họ mong
muốn. Drupal cung cấp một hệ thống giao diện mạnh mẽ để phục vụ mục đích này.
Hệ thống giao diện của Drupal khá phức tạp. Giống như các module, giao diện
được thiết kế sao cho có thể được cải tiến và mở rộng bằng cách sử dụng cơ chế hook.
Giao diện bao gồm một bộ tài nguyên bao gồm các mẫu PHP, CSS, Javascript và
hình ảnh, tạo nên bố cục và cách trình bày cho nội dung trong Drupal. Một giao diện
đơn giản có thể được tạo ra bởi một vài file - một file định nghĩa cách trình bày, một
file thông tin về giao diện và một vài hình ảnh. Bằng cách sử dụng mẫu có sẵn của
Drupal, người phát triển có thể tạo ra một giao diện tùy chỉnh mà không tốn nhiều thời
gian.
Một giao diện cũng có thể phát triển để đáp ứng những nhu cầu cao hơn. Những
khuôn mẫu tùy biến, thường được viết bằng ngôn ngữ PHP dành cho mẫu, có thể tái
cấu trúc các chi tiết của HTML. Một số file PHP được viết để nạp chồng các phương
thức của bộ máy giao diện. Các cấu hình phức tạp của Javas