1. Trang chủ
  2. » Luận Văn - Báo Cáo

cách xây dựng module cho Drupal và các vấn đề liên quan

57 1,3K 7
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Cách Xây Dựng Module Cho Drupal Và Các Vấn Đề Liên Quan
Tác giả Đặng Vĩnh Thiêm
Người hướng dẫn TS. Nguyễn Hải Châu
Trường học Trường Đại Học Công Nghệ
Thể loại Khóa luận
Năm xuất bản 2010
Thành phố Hà Nội
Định dạng
Số trang 57
Dung lượng 1,32 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

luận văn về cách xây dựng module cho Drupal và các vấn đề liên quan

Trang 1

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

Trang 2

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 đồ

Trang 3

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 

Trang 4

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 

Trang 5

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 

Trang 6

vi

Bảng từ viết tắt

Từ viết tắt Cụm từ đầy đủ

CSDL Cơ sở dữ liệu

Trang 7

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

Trang 8

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ì

Trang 9

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

Trang 10

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

Trang 11

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 <modulename>_block() và <modulename>_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

Trang 12

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 Javascript và các file CSS cũng được hỗ trợ Module có thể được sử dụng để giao tiếp với hệ thống giao diện phức tạp này

Nói tóm lại, một giao diện có thể trở thành đơn giản hay phức tạp là tùy vào thiết

kế của người phát triển

1.3 Các khái niệm cơ bản trong Drupal

1.3.1 Node

Drupal là một framework quản lý nội dung Khi nói về nội dung trong trường hợp này, chúng ta thường nghĩ đến các đối tượng văn bản như bài viết tin tức hoặc một mẫu blog

Khái niệm về một mẫu nội dung dạng văn bản tổng quát trong Drupal được gọi

bằng thuật ngữ Node Một node, hiểu theo cách của Drupal, là một đối tượng tổng

quát dùng để biểu diễn nội dung dạng văn bản

Trang 13

7

Tuy nhiên, với khả năng tùy biến của Drupal, người phát triển có thể tạo ra các module mở rộng khả năng trình bày của node để có thể hiển thị các nội dung ngoài văn bản thuần túy, như hình ảnh, video hay các file âm thanh

Các node được lưu trữ trong cơ sở dữ liệu và sẽ được lấy ra khi cần thiết Một node gồm có các thành phần:

- Một định danh không trùng nhau đối với 2 node bất kỳ (nid - Node ID)

- Ít nhất một giá trị thể hiện phiên bản của node (vid - Version ID)

- Ngày khởi tạo và thay đổi, cùng với thông tin xác định người dùng làm việc trực tiếp với node đó

- Dữ liệu meta như trạng thái xuất bản, ngôn ngữ được sử dụng và và các bản dịch sang ngôn ngữ khác

Thêm vào đó, hầu hết các node đều có phần tiêu đề và phần nội dung Người quản trị và nhà phát triển có thể chọn vô hiệu hóa hai phần này

Chúng ta sẽ xem qua quá trình tạo một nội dung mới để hiểu thêm về node

Mặc định, người dùng có thể tạo một nội dung mới trong Drupal bằng cách nhấn

vào liên kết Create content ở trang điều hướng Tại đây, người dùng sẽ được yêu cầu

chọn loại nội dung họ sẽ tạo ra

Hình 1.3.1.a Giao diện chọn nội dung cần tạo

Nói một cách tổng quát thì node là phần cốt lõi của hệ thống quản lý nội dung của Drupal Các API của node sẽ được khai thác nhiều ở các phần sau của khóa luận

Trang 14

8

Lưu ý rằng comments (các bài bình luận) không phải là node Trong khi hầu hết các nội dung ở dạng bài viết là dựa trên node thì comment là một ngoại lệ Bình luận thực chất là một cơ chế phản hồi ở cấp người dùng được gắn vào các bài viết, trang tin hay mẫu blog Khi tạo ra một trang nội dung mới, người dùng có thể chọn cho phép hoặc không cho phép các bài bình luận

Dưới đây là ví dụ về giao diện khi người dùng muốn gửi bình luận:

Hình 1.3.1.b Thêm chú thích vào bài viết

Lời bình luận đóng một vai trò khác với node trong hệ thống Drupal Mặc dù không phải là một thành phần quan trọng trong việc phát triển module nhưng lời bình luận cho thấy Drupal là một kiến trúc rất uyển chuyển, có thể chấp nhận các phần mở rộng (như comment) mà không phù hợp với khuôn mẫu điển hình của nội dung và không sử dụng các API của node

1.3.2 Người dùng (User)

Một kiểu đối tượng quan trọng khác trong Drupal là đối tượng Người dùng

Giống như comment và node, dữ liệu người dùng cũng được lưu trữ trong cơ sở dữ liệu và được lấy ra trong quá trình xử lý

Trang 15

9

Thông tin về người dùng được sử dụng trong việc xác thực, định nghĩa các thiết lập cá nhân và quyền hạn, và tạo các bản log

Truy xuất và bảo mật

Các đặc quyền của người dùng được liên kết chặt chẽ với đối tượng người dùng

mà hệ thống chỉ định Drupal có cơ chế để có thể cấp quyền cho một tập hợp người dùng Mặc định, mỗi người dùng được gán một vai trò và các đặc quyền được cấp phát hoặc thu hồi qua vai trò đó

Vì thế, khi kiểm tra truy cập đến tài nguyên, Drupal nạp một đối tượng người dùng, tìm vài trò của người dùng đó và kiểm tra các đặc quyền của vai trò để quyết định cho phép truy cập hay không

Những việc này được thực hiện bởi API người dùng, người phát triển module không cần thao tác trực tiếp với vai trò của người dùng trước khi xác định quyền hạn

1.3.3 Khối và cách thể hiện trang

Một khái niệm quan trọng trong Drupal là Khối (block) Nếu một node được sử

dụng để lưu trữ và trình bày các bài viết và mẫu tin lớn thì khối được dùng để biểu diễn các nội dung nhỏ hơn Ví dụ, menu điều hướng, đoạn trích dẫn, khung bầu chọn hay ô tìm kiếm thường được thể hiện dưới dạng các khối

Khối không phải là một dạng nội dung mà thực chất là một đối tượng trừu tượng được sử dụng chủ yếu để hiển thị các đối tượng nội dung khác Người quản trị có thể

vào Block editor để chỉ định vị trí đặt các khối trong một trang giao diện:

Trang 16

Một khái niệm liên quan chặt chẽ đến khối là Thực đơn Drupal có một hệ thống

thực đơn phức tạp được sử dụng với mục đích chính là xây dựng điều hướng cho trang

web Ví dụ, hình trên thể hiện thực đơn chính với các mục Code review, My account,

Create content Thực đơn này được khởi tạo động bởi hệ thống thực đơn của

Trang 17

11

1.3.5 Form

Cách chủ yếu để đưa thông tin, nội dung lên Web là thông qua các form HTML Mặc dù sự phổ biến của form làm cho người dùng web thuận tiện hơn nhưng đối với lập trình viên, có rất ít lựa chọn cho công cụ xử lý form trong việc viết mã

Tuy nhiên, trong Drupal, form được hỗ trợ đầy đủ và mạnh mẽ Bộ API form (FAPI) cung cấp một giao diện lập trình linh hoạt giúp cho lập trình viên giảm bớt lượng công việc và thời gian trong việc thiết kế và xử lý form

Bằng cách sử dụng FAPI, người phát triển chỉ cần cung cấp thông tin một form, Drupal sẽ xây dựng và hiển thị form đó, thu thập kết quả và thậm chí kiểm tra tính hợp

lệ của dữ liệu người dùng đưa vào

1.3.6 API cơ sở dữ liệu và lược đồ

Nằm ở dưới các framework cung cấp ứng dụng và giao diện là một lớp chịu trách nhiệm về quản lý và thao tác về cơ sở dữ liệu Drupal cung cấp một API cơ sở dữ liệu

ở cấp thấp để đơn giản hoá việc viết truy vấn SQL

API này có cơ chế bảo mật giúp kiểm soát và lọc các truy vấn, đồng thời giúp người phát triển dễ dàng viết các đoạn mã SQL để có thể thực thi ở các cơ sở dữ liệu khác nhau

Ngoài ra, một API mới được giới thiệu từ phiên bản Drupal 6 là API lược đồ,

cho phép định nghĩa cấu trúc một cơ sở dữ liệu mà không cần phải viết mã SQL Trong khi các cơ sở dữ liệu khác nhau sử dụng các cấu trúc riêng biệt cho việc định nghĩa bảng, API này giúp giải quyết vấn đề phát triển module có tính di động

1.4 Hệ thống tệp tin và thư mục của Drupal

Hiểu rõ cấu trúc thư mục của Drupal giúp người quản trị quản lý website một cách toàn diện và người phát triển có thể can thiệp sâu hơn vào hệ thống Mặc định, cấu trúc thư mục của Drupal được sắp xếp như sau:

Hình 1.4.a Hệ thống tệp tin và thư mục của Drupal

Trang 18

12

Thư mục files sử dụng cho các logo tuỳ biến, hình ảnh đại diện người dùng

hoặc chứa các file đa phương tiện được tải lên website Thư mục này phải được đặt quyền đọc và ghi bởi web server phục vụ Drupal

Thư mục includes chứa thư viện các hàm thường dùng

Thư mục misc lưu trữ các biểu tưởng và hình ảnh dùng cho Javascript và một số

tài nguyên khác

Thư mục profiles chứa các profile khác nhau dùng cho cài đặt và thiết lập Drupal Ở lần đầu tiên cài đặt, Drupal sẽ hỏi xem người dùng sử dụng profile nào Mục đích của các profile là giúp tự động hoá việc cài đặt bằng cách bật các module và chức năng định sẵn trong phần nhân hệ thống để phù hợp với mục đích sử dụng website

Thư mục scripts chứa các tập lệnh dùng để phân tích cú pháp, dọn dẹp mã

nguồn và xử lý các tác vụ đặc biệt với cron Những tập lệnh tiện ích này được viết bằng ngôn ngữ shell và Perl

Thư mục themes chứa các công cụ tạo khuôn mẫu và giao diện mặc định cho

Drupal

Thư mục sites chứa các thay đổi đối với Drupal dưới dạng thiết lập, module và giao diện Các module được thêm vào sẽ nằm trong sites/all/modules Trong thư

mục sites có thư mục được đặt tên là default chứa các thiết lập mặc định cho hệ

thống Drupal, được ghi lại trong file settings.php Dưới đây là cấu trúc bên trong thư

mục sites:

Trang 19

13

Hình 1.4.b Cây thư mục con của thư mục sites

1.5 Drupal xử lý yêu cầu như thế nào?

Nắm được cách thức Drupal xử lý yêu cầu từ phía người dùng và người quản trị

sẽ giúp lập trình viên tác động sâu vào trong hệ thống Quá trình này có thể tự tìm hiểu bằng cách sử dụng một bộ dò lỗi và bắt đầu từ file index.php, nơi mà Drupal tiếp nhận hầu hết các yêu cầu

1.5.1 Vai trò của Web server

Drupal hoạt động trên một web server, thường là Apache Nếu web server hỗ trợ file .htaccess, một số tuỳ chọn trong PHP sẽ được khởi tạo và chức năng URL rút gọn cũng được bật Chức năng này giúp chuyển các URL yêu cầu thành dạng ngắn gọn, ví dụ URL http://example.com/index.php?q=foo/bar sẽ được chuyển thành

http://example.com/foo/bar Đối với các web server khác như Microsoft IIS, chức năng này được hỗ trợ trong các module interface (ISAPI – Windows Internet Server Application Programming Interface) như ISAPI_Rewrite

1.5.2 Quá trình khởi động

Drupal tự nạp phần khởi động khi có yêu cầu bằng cách thao tác qua một chuỗi các bước được định nghĩa trong file bootstrap.inc. Những thao tác này gồm:

Cấu hình

Trang 20

14

Bước này sinh ra một mảng chứa cấu hình bên trong Drupal và thiết lập biến

$base_url cho trang web File settings.php được phân tích thông qua hàm

include_once() và sử dụng các biến được nạp chồng trước đó

Bộ nhớ đệm

Trong những trường hợp yêu cầu khả năng mở rộng hệ thống cao, một bộ nhớ đệm cần được thiết lập trước khi kết nối cơ sở dữ liệu Bước này cho phép dẫn giải đến một file PHP chứa hàm page_cache_fastpath() có nhiệm vụ lấy thông tin và trả lại

dữ liệu cho trình duyệt Chức năng tạo bộ nhớ đệm được bật bằng cách đặt giá trị TRUE cho biến page_cache_fastpath và file được tham chiếu phải được định nghĩa

thông qua đường dẫn của biến cache_inc.

Cơ sở dữ liệu

Quá trình này xác định loại cơ sở dữ liệu được sử dụng và một kết nối ban đầu được thiết lập để sử dụng cho các truy vấn

Truy cập

Drupal cho phép ngăn chặn các truy cập từ máy khách thông qua tham chiếu IP

và tên máy Trong bước này, hệ thống sẽ kiểm tra xem yêu cầu có phải được thực hiện

từ địa chỉ bị chặn hay không, nếu phải thì truy cập sẽ bị từ chối

Phiên phục vụ

Drupal tận dụng lợi thế của PHP trong việc quản lý phiên đồng thời phát triển thêm các chức năng riêng để bổ sung cho việc quản lý phiên cơ sở dữ liệu Trong bước này, các phiên sẽ được khởi tạo hoặc thiết lập lại

Xử lý đường dẫn

Tại bước này, đoạn mã dùng để xử lý đường dẫn và định danh được nạp Những URL ở dạng rút gọn hoặc đã được chuyển sang dạng dễ đọc sẽ được phân tích thành các yêu cầu

Trang 21

15

Khi Drupal đã hoàn thành quá trình khởi động, tất cả các thành phần của framework đều chuyển sang trạng thái sẵn sàng Lúc này, hệ thống lấy và phân tích yêu cầu từ phía trình duyệt và chuyển sang các hàm PHP tương ứng để xử lý

1.5.3 Xử lý yêu cầu

Việc ánh xạ giữa địa chỉ URL và các hàm xử lý được thực hiện thông qua một bước đăng ký hàm callback để quản lý URL và quyền truy cập Các module đăng ký hàm callback của mình bằng cách sử dụng hook menu

Khi Drupal xác định được có tồn tại một callback đến địa chỉ URL của trình duyệt mà yêu cầu được ánh xạ và người dùng gửi yêu cầu này có quyền truy cập callback thì việc xử lý yêu cầu sẽ được giao cho hàm callback đó

Ví dụ, nếu nhận được một yêu cầu về nội dung là

http://example.com/q=node/3, URL sẽ được ánh xạ đến hàm node_page_view()

trong node.module Các quá trình xử lý tiếp theo sẽ tiếp nhận dữ liệu cho node đó từ cơ

sở dữ liệu Cuối cùng, phản hồi sẽ được gửi trả lại trình duyệt qua bộ phận giao diện

1.5.4 Giao diện hoá nội dung

Việc giao diện hoá thực chất là chuyển dữ liệu mà Drupal nhận được, dữ liệu thông qua xử lý hay dữ liệu tự tạo ra sang dạng HTML Drupal sẽ sử dụng giao diện

mà người quản trị chọn trước để thiết kế trang web đúng với yêu cầu và chuyển kết quả HTML cho trình duyệt để hiển thị tới người dùng

1.6 Công cụ dành cho người phát triển

Drupal đưa ra một số công cụ đặc thù dành cho người phát triển module Drupal Những công cụ này được cung cấp bởi 2 module chủ yếu, có thể lấy từ trang web của Drupal, là module Devel và module Coder

1.6.1 Module Devel

Module này cung cấp một số công cụ đặc biệt hữu dụng cho việc phát triển Drupal, gồm có quản lý bộ nhớ cache, công cụ dò lỗi SQL, công cụ thăm dò, công cụ tham chiếu API

Thông tin chi tiết về module này có ở:

http://drupal.org/project/devel

Trang 22

16

Các công cụ trên được hiển thị dưới dạng các mục trong một Khối Vì thế, sau

khi cài đặt module Devel, người quản trị phải vào Administer | Site building |

Modules để bật module và vào mục Blocks để xác định ví trí hiện thị nội dung trên

trang chủ

Module này còn bao gồm các công cụ để xây dựng giao diện, bộ sinh mã macro

để giả lập dữ liệu dành cho form và các dữ liệu cho quá trình testing

1.6.2 Module Coder

Cũng như một số framework khác, người phát triển Drupal phải tuân theo những quy ước nhất định trong việc viết mã Module Coder là một công cụ được thiết kế nhằm giúp xác định và sửa những đoạn mã không theo quy ước định sẵn

Ngoài ra, công cụ này còn thực hiện một số bước kiểm tra tính bảo mật bằng cách quản lý việc các đoạn mã được xử lý như thế nào Chức năng này hữu ích trong việc phát hiện các lỗi lập trình và cảnh báo trước khi trở thành các lỗ hổng bảo mật Thông tin chi tiết về module này có thể tìm tại trang:

http://drupal.org/project/coder

Mặc dù không làm tăng hiệu suất trong việc phát triển như module Devel nhưng Coder giúp tạo nên những đoạn mã gọn gàng và mang phong cách Drupal Quá trình kiểm tra cú pháp của công cụ này còn có thể phát hiện các lỗ hổng về bảo mật

Trang 23

17

Chương 2 - Xây dựng module cho Drupal

Trong nhiều ứng dụng mã nguồn mở, người dùng có thể tuỳ biến chương trình bằng cách thay đổi hoặc thêm các đoạn mã Điều này dẫn đến việc mỗi khi có bản cập nhật, người dùng phải kiểm tra xem sự tuỳ chỉnh có còn tương thích và hoạt động đúng như mong muốn hay không Drupal hoạt động theo một cách khác Mọi thay đổi

và sự mở rộng được thực hiện thông qua các module Chương này sẽ tập trung tìm hiểu cách viết một module cho Drupal

2.1 File info và module

Cấu trúc của một module có thể gồm nhiều tập tin khác nhau nhưng phải có ít nhất một tập tin <tenmodule>.info và một tập tin <tenmodule>.module trong đó

<tenmodule> là tên của thư mục chứa module được tạo, tên này không được trùng với

các module đã tồn tại trong hệ thống

2.1.1 File info

Trước khi thực sự đi vào viết mã cho một module, chúng ta phải tạo ra một file văn bản chứa các thông tin cơ bản về module đó Một số thành phần của Drupal sẽ sử dụng các thông tin trong file này cho việc quản lý module

File .info được viết theo kiểu của file PHP INI, một định dạng file dùng cho

việc xác định các thiết lập Nội dung một file .info có dạng như sau:

name = “Google Maps”

description = “Displays a map using Google Maps API”

core = 6.x

php = 5.1

Trường name khai báo tên của module, tên này sẽ hiển thị trong danh sách các module có ở khu vực cho người quản trị Ví dụ:

Trang 24

18

Hình 2.1.1 Minh họa giao diện hiển thị tên module

Trong hình trên, Aggregrator và Blog được lấy từ giá trị của trường name trong

file .info của các module tương ứng

Tiếp theo là phần description chứa thông tin thêm về module, mô tả chức năng,

nhiệm vụ mà module sẽ thực hiện

Namedescription là hai trường bắt buộc phải có trong file info

Trường thông tin thứ ba là core Mục này chỉ rõ module sẽ hoạt động tốt trên

phiên bản nào của Drupal Giá trị 6.x cho biết module này yêu cầu phiên bản Drupal 6,

bao gồm các phiên bản nâng cấp từ bản 6 Trong nhiều trường hợp, Drupal sẽ tự động đặt giá trị này một cách hợp lý, nhưng những người phát triển làm việc với CVS (Concurrent Version System - hệ thống quản lý phiên bản ứng dụng) được khuyến cáo nên tự mình đặt giá trị cho trường core

Chỉ dẫn cuối cùng trong file .info trên là php, cho biết phiên bản tối thiểu của

PHP mà module yêu cầu

Ngoài ra, các module phức tạp hơn còn có thêm một số trường thông tin trong file .info như:

- Package: nhóm các chức năng của module, nếu không khai báo package thì module được đưa vào nhóm “other”

- Dependencies: các module phụ thuộc, cách nhau bằng khoảng trống Nếu module được yêu cầu chưa được bật trên hệ thống thì module này không thể bật được

Sau khi có file info, chúng ta bắt đầu việc viết mã cho module trong file

.module.

Trang 25

19

2.1.2 File module

File .module là file quan trọng nhất trong một module, chứa các đoạn mã PHP

thực hiện chức năng của module đó File này thông thường sẽ mở rộng một số hàm hook mà Drupal gọi tại các thời điểm nhất định đối với một yêu cầu

Cũng giống như file info, file module được đặt tên theo quy tắc

<modulename>.module, trong đó <modulename> là tên thư mục chứa module

Nội dung file module bắt đầu bằng thẻ <?php, sau đó là mã nguồn Theo quy ước của Drupal, file này sẽ không chứa dấu đóng ?> Việc này giúp tránh in những ký tự trống trong đầu ra của mã kịch bản trong một số trường hợp Ví dụ, nếu các ký tự trống được xuất ra trước khi phần thông tin header của HTML gửi đi, ở trình duyệt máy khách sẽ xuất hiện thông báo lỗi trên đầu của trang web

Mã nguồn chi tiết của file này sẽ được đề cập trong những phần tiếp theo

2.2 Chú thích trong mã nguồn

Như đã đề cập ở trên, Drupal tuân theo các tiêu chuẩn viết mã và tài liệu một cách chặt chẽ Xem chi tiết tại http://drupal.org/coding-standards Một trong số

đó là chuẩn viết chú thích trong mã nguồn

Mở đầu các module và hàm trong đó, lập trình viên phải chú thích rõ ràng và đầy

đủ chức năng của khối mã tiếp theo đó Ví dụ, dưới đây là chú thích của module GoogleMaps:

/**

* @file

* Module for displaying a map from Google Maps

* This module provides block content retrieved from

* Google Maps data

Trang 26

20

Trong ví dụ trên có hai định danh là @file@see Định danh @file cho biết

khối này sẽ chú thích cho toàn bộ file, không phải cho riêng một hàm hay biến ở trong file

Định danh @see chỉ dẫn bộ xử lý tài liệu liên kết file này đến thông tin ở các

nguồn khác Trong ví dụ, nguồn dẫn là một địa chỉ URL Các hàm, hằng số và biến cũng được tham chiếu bởi định danh @see Trong các trường hợp này, bộ xử lý tài liệu

sẽ liên kết khối chú thích đến thông tin API của các đối tượng tương ứng

Khi chú thích cho một hàm, các định danh khác sẽ được sử dụng Ví dụ:

/**

* Retrieve information from the Goodreads bookshelp XML API

*

* This makes an HTTP connection to the given URL, and

* retrieves XML data, which it then attempts to format

sử dụng cho chú thích hàm là @return cho biết giá trị mà hàm sẽ trả về

Từ những chú thích này, người phát triển có thể sử dụng những chương trình phân tích tài liệu như Doxygen để trích ra làm tài liệu dành cho người dùng

2.3 Một số hook cơ bản

- Hook block:

Trang 27

configure: Dùng để điều chỉnh các thiết lập cho block

save: Giá trị này được dùng khi thông tin về thiết lập của block lấy từ form dữ liệu sinh ra bởi configure cần được lưu lại

Tham số $delta được đặt phụ thuộc vào các thao tác nhất định của module Khi

$op có giá trị là view thì $delta sẽ được đặt Tham số này chứa các thông tin thêm về nội dung sẽ hiển thị trong block Bằng cách sử dụng $delta, một hàm hook_block()

có thể hiển thị nhiều block khác nhau Nội dung nào trong block sẽ được sử dụng tuỳ thuộc vào giá trị của $delta được truyền vào

Cuối cùng là tham số $edit, được sử dụng trong quá trình điều chỉnh các thiết lập của block (khi thao tác save được gọi) $edit thực chất là một mảng chứa các thay đổi mà người quản trị thực hiện lên các thiết lập của block

Giá trị trả về của hàm này phụ thuộc vào thao tác mà nó thực hiện Thông thường, hàm sẽ trả về một mảng chứa thông tin của block (info), tiêu đề (subject) và nội dung (content)

- Hook help:

Hook này được dùng để cung cấp các thông tin trợ giúp cho người sử dụng Hàm

hook_help() nhận hai tham số: $path chứa một đoạn URI cho biết trang trợ giúp nào được gọi, và tham số $arg chứa một số thông tin thêm

Với các trường hợp phức tạp, lập trình viên có thể sử dụng phát biểu switch đối với giá trị của $path để trả về các văn bản trợ giúp khác nhau đối với mỗi đường dẫn Giá trị này tuân theo định dạng admin/help#<module name> , trong đó <module name>

được thay bằng tên của module tương ứng Kết quả của hàm này được hiển thị tại mục

Administer | Help page:

Trang 28

22

Hình 2.3.a Minh họa nội dung sử dụng hook_help()

- Hook user:

Mặc định, mỗi người dùng đã đăng ký đều có thể truy cập trang My account để

xem thông tin tài khoản của họ Địa chỉ URL của trang này có dạng:

http://example.com/drupal/?q=user/3. Người dùng sẽ thấy những thông tin sau:

Hình 2.3.b Giao diện thông tin tài khoản người dùng

Trang thông tin người dùng cũng có thể được truy cập bởi một người quản trị có quyền tương ứng Phần lớn nội dung của trang này được tạo ra bởi hook_user(). Bằng cách triển khai hook này trong module, người phát triển có thể liên kết với giao diện quản lý người dùng

Thực ra, hook người dùng làm được nhiều việc hơn là hiển thị trang tài khoản người dùng Trong Drupal 6 có 13 thao tác mà hook này thực thi, bao gồm việc thêm, sửa chữa hoặc xoá bộ ghi nhớ đăng nhập

Một bản triển khai của hook_user() sẽ nhận 4 tham số sau:

$op: Tên của thao tác mà người dùng thực hiện Tham số này nhận 1 trong 13 giá trị tương ứng với 13 thao tác (view, login, delete )

$edit: Một mảng chứa các giá trị được gửi lên từ một form Giá trị này được truyền vào qua tham chiếu &$edit và được sử dụng bởi các thao tác xử lý dữ liệu như insert

Ngày đăng: 13/04/2013, 10:00

HÌNH ẢNH LIÊN QUAN

Bảng từ viết tắt - cách xây dựng module cho Drupal và các vấn đề liên quan
Bảng t ừ viết tắt (Trang 6)
Hình 1.1. Các dịch vụ được sử dụng trong Drupal. - cách xây dựng module cho Drupal và các vấn đề liên quan
Hình 1.1. Các dịch vụ được sử dụng trong Drupal (Trang 8)
Hình 1.2. Kiến trúc Drupal - cách xây dựng module cho Drupal và các vấn đề liên quan
Hình 1.2. Kiến trúc Drupal (Trang 9)
Hình 1.2.2. Danh sách các module lõi - cách xây dựng module cho Drupal và các vấn đề liên quan
Hình 1.2.2. Danh sách các module lõi (Trang 10)
Hình 1.3.1.a. Giao diện chọn nội dung cần tạo - cách xây dựng module cho Drupal và các vấn đề liên quan
Hình 1.3.1.a. Giao diện chọn nội dung cần tạo (Trang 13)
Hình 1.3.1.b. Thêm chú thích vào bài viết - cách xây dựng module cho Drupal và các vấn đề liên quan
Hình 1.3.1.b. Thêm chú thích vào bài viết (Trang 14)
Hình 1.3.3. Các vị trí đặt Blocks - cách xây dựng module cho Drupal và các vấn đề liên quan
Hình 1.3.3. Các vị trí đặt Blocks (Trang 16)
Hình 1.4.b. Cây thư mục con của thư mục sites - cách xây dựng module cho Drupal và các vấn đề liên quan
Hình 1.4.b. Cây thư mục con của thư mục sites (Trang 19)
Hình 2.1.1. Minh họa giao diện hiển thị tên module - cách xây dựng module cho Drupal và các vấn đề liên quan
Hình 2.1.1. Minh họa giao diện hiển thị tên module (Trang 24)
Hình 2.3.a. Minh họa nội dung sử dụng hook_help(). - cách xây dựng module cho Drupal và các vấn đề liên quan
Hình 2.3.a. Minh họa nội dung sử dụng hook_help() (Trang 28)
Hình 2.7.1. Quá trình xử lý form - cách xây dựng module cho Drupal và các vấn đề liên quan
Hình 2.7.1. Quá trình xử lý form (Trang 38)
Hình 3.2.1. Minh họa trang web tích hợp bản đồ Google Maps. - cách xây dựng module cho Drupal và các vấn đề liên quan
Hình 3.2.1. Minh họa trang web tích hợp bản đồ Google Maps (Trang 47)
Hình 3.3.1.3.b. Giao diện bài viết cùng với Block hiển thị bản đồ. - cách xây dựng module cho Drupal và các vấn đề liên quan
Hình 3.3.1.3.b. Giao diện bài viết cùng với Block hiển thị bản đồ (Trang 51)
Hình A.1.a. Bật các module trong trang quản trị. - cách xây dựng module cho Drupal và các vấn đề liên quan
nh A.1.a. Bật các module trong trang quản trị (Trang 54)
Hình A.2.b. Kết quả chạy thử chương trình. - cách xây dựng module cho Drupal và các vấn đề liên quan
nh A.2.b. Kết quả chạy thử chương trình (Trang 57)

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w