Nhân bao gồm code cho phép hệ thống Drupal khởi động khi nó nhận được một yêu cầu, một thư viện các chức năng phổ biến thường xuyên được sử dụng với Drupal, và các module cung cấp chức n
Trang 1ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
Nguyễn Thị Thanh Tâm
WEBSITE TRƯỜNG ĐH CÔNG NGHỆ PHIÊN BẢN
TIẾNG ANH TRÊN THIẾT BỊ DI ĐỘNG
KHOÁ LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY
Ngành: Công nghệ thông tin
HÀ NỘI - 2010
Trang 2ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
Nguyễn Thị Thanh Tâm
WEBSITE TRƯỜNG ĐH CÔNG NGHỆ PHIÊN BẢN
TIẾNG ANH TRÊN THIẾT BỊ DI ĐỘNG
KHOÁ LUẬN TỐT NGHIỆP ĐẠI HỌC HỆ CHÍNH QUY
Ngành: Công nghệ thông tin
Cán bộ hướng dẫn: ThS.Phùng Chí Dũng
HÀ NỘI - 2010
Trang 3TÓM TẮT NỘI DUNG
Mục tiêu của đề tài là xây dựng một phiên bản website trường ĐH Công nghệ phiên bản tiếng Anh trên thiết bị di động Phiên bản này là một bản rút gọn của website, cho phép hiển thị tốt trên thiết bị di động vốn bị hạn chế bởi kích thước màn hình Bắt đầu từ việc nghiên cứu hệ thống website trường ĐH Công nghệ, vốn được xây dựng trên hệ quản trị nội dung Drupal Sau khi nghiên cứu các thành phần cơ bản, các module quan trọng, hệ thống file giao diện của Drupal thì tiến hành thiết kế template cho phiên bản trên thiết bị di động Triển khai bằng cách cài đặt một trang Drupal mới với dữ liệu được lấy từ phiên bản gốc và hiển thị lại theo template đã thiết
kế Kết quả, đã xây dựng thành công phiên bản trên thiết bị di động cho website trường ĐH Công nghệ với tên miền riêng Tuy nhiên, hệ thống chưa có chức năng tự nhận diện thiết bị truy cập để điều hướng sang tên miền đó
Trang 4MỤC LỤC
Chương 1 Tổng quan về Drupal 2
1.1 Giới thiệu chung 2
1.1.1 Drupal là gì? 2
1.1.2 Lịch sử 2
1.1.3 Các tầng kỹ thuật 3
1.1.4 Chức năng 4
1.1.5 Nguyên tắc 7
1.2 Các khái niệm cơ bản 7
1.2.1 Nhân 7
1.2.2 Block 8
1.2.3 Hook 9
1.2.4 Node 9
1.2.5 Taxonomy 12
1.2.6 Path 14
1.2.7 User 16
1.2.8 Hệ thống file 17
1.3 Hệ thống module 20
1.3.1 Các module hệ thống 21
1.3.2 Các module đóng gói quan trọng 22
1.4 Hệ thống giao diện 24
1.4.1 Tổng quan về phát triển giao diện 24
1.4.2 Regions 25
1.4.3 Hệ thống file trong giao diện 26
1.4.4 Các file template 27
1.4.5 Các file CSS 35
1.5 Kết luận 36
Trang 5Chương 2 Phiên bản website dùng Drupal trên thiết bị di động 37
2.1 Đặt vấn đề 37
2.2 Định hướng giải pháp 37
2.2.1 Multisite 37
2.2.2 Thiết kế template 38
2.2.3 Module Mobile Plugin 52
2.3 Kết luận 52
Chương 3 Website trường ĐH Công nghệ phiên bản tiếng Anh trên thiết bị di động………53
3.1 Giao diện 53
3.2 Cài đặt 54
3.2.1 Cài đặt multisite 54
3.2.2 Tạo trang chủ 55
3.3 Kết quả 55
Trang 61
LỜI MỞ ĐẦU
Ngày nay, điện thoại di động đã trở nên phổ biến, với sự phát triển của mạng 3G thì việc sử dụng thiết bị di động để truy cập web trở nên dễ dàng hơn bao giờ hết Truy cập web bằng thiết bị di động vừa tiện lợi lại vừa nhanh chóng nên nhiều người đang chọn cách này để truy cập web Tuy nhiên, các trang web thường được thiết kế phù hợp với việc hiển thị trên máy tính, có màn hình rộng và hỗ trợ tối đa các tiện ích kèm theo Còn với thiết bị di động, với màn hình nhỏ và hầu hết không hỗ trợ Javascript hay Flash Player thì thường gặp khó khăn trong việc hiển thị Hơn nữa, với những thông tin quảng cáo kèm theo sẽ khiến cho dung lượng tải về rất lớn, vừa gây độ trễ lớn trong việc tải trang web vừa tốn kém khi mà hầu hết người dùng sử dụng gói cước tính tiền theo dung lượng và tốc độ của mạng 3G cũng không lớn Tất cả những điều
đó đòi hỏi phải có một phiên bản riêng của trang web dành cho thiết bị di động
Không nằm ngoài những trường hợp trên, website trường ĐH Công nghệ phiên bản tiếng Anh cũng chỉ hỗ trợ cho người dùng truy cập từ máy tính Nhận thấy nhu cầu truy cập web qua thiết bị di động ngày càng tăng, để hỗ trợ tối đa cho người dùng, cần phải có một phiên bản dành riêng cho thiết bị di động Chính vì vậy em đã lựa chọn và
nghiên cứu đề tài “Website trường ĐH Công nghệ phiên bản tiếng Anh trên thiết
bị di động” Website được xây dựng dựa trên phiên bản đầy đủ dành cho desktop, sử
dụng hệ quản trị nội dung Drupal Khoá luận của em sẽ trình bày gồm 3 chương:
Chương 1: Tổng quan về Drupal
Chương 2: Phiên bản website dùng Drupal trên thiết bị di động
Chương 3: Website trường ĐH Công nghệ phiên bản tiếng Anh trên thiết bị di động
Em xin chân thành cảm ơn sự giúp đỡ tận tình của ThS.Phùng Chí Dũng trong quá trình thực hiện đề tài
Trang 72
Chương 1 Tổng quan về Drupal
1.1 Giới thiệu chung
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 chủ 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
1.1.2 Lịch sử
Năm 2000, các kết nối Internet thường xuyên ở mức cao với các sinh viên trường Đại học Antwerp, do đó, Dries Buytaert và Hans Snijder thiết lập một cầu nối không dây giữa ký túc xá sinh viên của mình để chia sẻ kết nối modem Hans 'ADSL giữa tám sinh viên Đây là một việc cực kỳ xa xỉ tại thời điểm đó, nhưng vẫn có sự thiếu sót: không có phương tiện để thảo luận hay chia sẻ những điều đơn giản
Nó truyền cảm hứng cho Dries làm việc trên một trang web tin tức nhỏ với một built-in hội đồng quản trị web, cho phép các nhóm bạn bè để lại mỗi ghi chú khác về
Trang 8họ Trong khi tìm kiếm một tên miền phù hợp, Dries đặt tên miền 'drop.org' sau khi ông thực hiện một lỗi đánh máy để xem tên “dorp.org” vẫn còn Dorp là từ Hà Lan cho 'làng', được coi là một tên phù hợp cho các cộng đồng nhỏ
Một khi drop.org được thành lập trên mạng, khán giả của nó đã thay đổi khi các thành viên bắt đầu nói về các công nghệ web mới, chẳng hạn như kiểm duyệt, cung cấp, đánh giá, và phân phối chứng thực Drop.org từ từ biến thành một môi trường thử nghiệm cá nhân, thúc đẩy bởi các cuộc thảo luận và dòng chảy của ý tưởng Các cuộc thảo luận về các công nghệ web đã được thử ra trên drop.org chính nó như là mới bổ sung cho các phần mềm chạy các trang web Chỉ sau đó, vào tháng 1 năm 2001, mà Dries quyết định phát hành phần mềm phía sau drop.org như "Drupal" Mục đích là để cho phép người khác sử dụng và mở rộng nền tảng thử nghiệm để nhiều người hơn có thể khám phá những con đường mới để phát triển Cái tên Drupal, phát âm là "droo-puhl," có nguồn gốc từ cách phát âm tiếng Anh của từ tiếng Hà Lan "druppel," có nghĩa là "thả"
1.1.3 Các tầng kỹ thuật
Mục tiêu thiết kế của Drupal bao gồm cả việc có thể chạy tốt trên các tài khoản web hosting giá rẻ và có thể mở rộng tới các trang web phân phối lớn Mục tiêu ban đầu là sử dụng công nghệ phổ biến nhất, và sau này là coding cẩn thận, chặt chẽ Các tầng kỹ thuật của Drupal được minh họa trong hình 1-1
Hình 1-1 Các tầng kỹ thuật của Drupal
Trang 9Giao diện Drupal với các lớp tiếp theo của stack (cơ sở dữ liệu) thông qua một lớp cơ sở dữ liệu nhỏ Lớp này xử lý các truy vấn SQL để có thể sử dụng cơ sở dữ liệu các nhà cung cấp khác nhau mà không cần viết lại code Các cơ sở dữ liệu thử nghiệm rộng rãi nhất là MySQL và PostgreSQL, mặc dù hỗ trợ cho Microsoft SQL Server và Oracle đang tăng lên
Drupal được viết bằng PHP Vì PHP là một ngôn ngữ dễ học, có rất nhiều chương trình PHP được viết bởi người mới bắt đầu Chất lượng code của người mới bắt đầu đã khiến cho PHP mất uy tín Hơn nữa, PHP cũng có thể được sử dụng để viết code Tất cả code của nhân Drupal đều tuân thủ nghiêm ngặt các tiêu chuẩn code và được xem xét kỹ lưỡng qua quá trình mã nguồn mở Đối với Drupal, rất dễ dàng học PHP vì có một cộng đồng luôn sẵn sàng giúp đỡ những người mới bắt đầu Và những người mới bắt đầu nhận được thông tin phản hồi từ cộng đồng giúp nâng cao kỹ năng của họ
Trang 101.1.4.3 Quản trị nội dung
Poll - Module bầu chọn của Drupal cho phép người dùng tạo các bầu chọn và gắn vào các trang khác nhau
Khuôn mẫu (template) - Hệ thống khuôn mẫu của Drupal phân tách nội dung với cách trình bày Khuôn mẫu được xây dựng trên PHP và HTML chuẩn, có nghĩa là không cần phải học một ngôn ngữ khuôn mẫu (templating language) nào cả
Bình luận theo luồng - Mô hình bình luận theo luồng mạnh mẽ của Drupal cho phép bình luận bất cứ nội dung nào Các bình luận có chia cấp như ở một nhóm tin (newsgroup) hoặc diễn đàn
Điều khiển phiên bản - Hệ thống điều khiển phiên bản của Drupal cho phép lưu giữ thông tin của các lần cập nhật (ai, cái gì, khi nào) Có thể dễ dàng quay lại (roll-back) một phiên bản trước đó
Trang 116
News aggregator - Giúp đọc thông tin từ các website khác
Permalink - Tất cả các nội dung trong Drupal đều có một URL cố định, giúp người dùng có thể dễ dàng liên kết đến mà không sợ nó thay đổi về sau
1.1.4.5 Nền tảng
Apache hoặc IIS, Unix/Linux/BSD/Solaris/Windows/Mac OS X đều được hỗ trợ - Drupal ngay từ đầu đã được xây dựng để tương thích nhiều nền tảng
Độc lập với cơ sở dữ liệu - Mặc dù đa số dùng MySQL, nhưng không phải tất
cả Drupal được xây dựng trên lớp CSDL trừu tượng (database abstraction layer
- DAL), hỗ trợ cả MySQL lẫn PostgreSQL Để hỗ trợ các CSDL riêng của mình, người dùng chỉ việc viết phần back-end hiện thực hóa 14 hàm của DAL
Đa ngôn ngữ - Nền tảng Drupal sẵn sàng cho việc xây dựng một website đa ngôn ngữ
1.1.4.6 Quản trị và phân tích
Phân tích, Theo dõi và Thống kê
Ghi nhật kí và báo cáo - Các hoạt động quan trọng trên hệ thống đều được ghi lại, giúp người quản trị có thể xem lại sau đó
Hệ thống quản trị trên web - Tất cả có thể được quản lí qua trình duyệt web 1.1.4.7 Tính năng cộng đồng
Diễn đàn - Diễn đàn thảo luận
Blog - Hệ thống blog đa người dùng
1.1.4.8 Hiệu năng và khả năng mở rộng
Caching - Cơ chế đệm dữ liệu giúp giảm số truy vấn CSDL, tăng hiệu năng và giảm tải server Hệ thống này đã từng được thử nghiệm cho thấy chúng hoạt động rất tốt dưới hiệu ứng "slashdot" (lưu lượng tăng đột biến do trang web được giới thiệu ở một website lớn)
Nén CSS - Drupal hỗ trợ chức năng gom nhóm các tập tin CSS lại thành một tập tin nhất, đồng thời cũng loại bỏ các ghi chú bên trong Khi trình duyệt thực hiện chỉ cần thực hiện một yêu cầu để lấy về một tập tin CSS duy nhất
Nén Javascript - Từ phiên bản 6.x Drupal còn cho phép gom nhóm và nén các tập tin Javascript
Trang 127
1.1.5 Nguyên tắc
Modular và extensible Mục tiêu của Drupal và cung cấp một nhân gọn, mạnh
để sẵn sàng mở rộng thông qua các module tự tạo
Mã nguồn chất lượng Chất lượng cao, trình bày đẹp, ghi chú đầy dủ
Tuân thủ chuẩn Drupal hỗ trợ các chuẩn cũ và mới, trong đó có HTML và CSS
Đòi hỏi ít tài nguyên Để đạt hiệu quả cao nhất, Drupal khuyến khích các mã lệnh tiết kiệm (thí dụ như dùng ít truy vấn CSDL) Drupal cũng chỉ cần rất ít đòi hỏi về server, chỉ yêu cầu những cấu hình phổ biến Cụ thể là Drupal cần hoạt động trơn tru với Apache, PHP và MySQL hoặc Postgresql
Mã nguồn mở Drupal dựa trên triết lí mã nguồn mở về sự phát triển cộng tác của phần mềm tự do Drupal xây dựng bằng mã mở, bản thân là mã mở và hỗ trợ các dự án mã mở Cụ thể là Drupal được xây dựng trên ngôn ngữ mở PHP,
hỗ trợ các CSDL mã mở là MySQL và Postgresql
Dễ dùng Dễ dùng đối với nhà phát triển, nhà quản lí và người dùng
Cộng tác Hỗ trợ các hệ thống chia sẻ thông tin
1.2 Các khái niệm cơ bản
1.2.1 Nhân
Một framework đơn giản tạo nên nhân Drupal Đây là những gì nhận được khi tải Drupal về từ drupal.org Nhân chịu trách nhiệm cung cấp các chức năng cơ bản sẽ được sử dụng để hỗ trợ các bộ phận khác của hệ thống
Nhân bao gồm code cho phép hệ thống Drupal khởi động khi nó nhận được một yêu cầu, một thư viện các chức năng phổ biến thường xuyên được sử dụng với Drupal,
và các module cung cấp chức năng cơ bản như quản lý người dùng, phân loại, và templating như thể hiện trong Hình 1-2
Trang 13Block có một tiêu đề và mô tả và được sử dụng chủ yếu cho việc quảng cáo, code snippet, và các chỉ số trạng thái, không phải cho phần chính thức của nội dung, do đó, khối không phải là node và không tuân theo các quy tắc của node Các node có quyền kiểm soát sửa đổi, có thể comment cho nó, RSS feed, và các taxonomy term; chúng thường được dành riêng cho các phần nội dung beefier của một trang web
Regions là các phần của trang web nơi các block được đặt Region được tạo ra và cài đặt bởi giao diện (trong file info của giao diện) và không được xác định bởi các block API Block không được gán vào region nào thì không được hiển thị
Block có các tùy chọn để kiểm soát những người có thể nhìn thấy chúng và những trang mà nó được hiển thị Nếu các module điều tiết được kích hoạt, các block
Trang 14Block có thể hiển thị bất cứ thứ gì (chúng được viết bằng PHP và do đó không chỉ giới hạn ở những gì chúng có thể làm được), nhưng chúng thường đóng vai trò hỗ trợ cho các nội dung chính của trang web Ví dụ, có thể tạo ra một khối menu tùy chỉnh cho mỗi vai trò người dùng, hoặc có thể trưng bày một block liệt kê các comment đang chờ phê duyệt
1.2.3 Hook
Hook có thể được coi là sự kiện bên trong Drupal Chúng cũng được gọi là các hàm callback, vì chúng được xây dựng bằng cách đặt tên hàm theo các chuẩn và không phải bằng cách đăng ký với một listerner, chúng không thực sự được gọi trở lại Hook cho phép các module "hook into" những gì đang xảy ra trong phần còn lại của Drupal Giả sử một người dùng đăng nhập vào trang web Drupal Tại thời điểm người dùng đăng nhập, Drupal gọi hook user Điều đó có nghĩa là bất kỳ hàm nào cũng được đặt tên theo quy ước tên module cộng với tên hook sẽ được gọi Ví dụ,
comment_user() trong module Comment, locale_user() trong module Locale, node_user() trong module Node, và bất kỳ chức năng khác có tên tương tự sẽ được
gọi Nếu viết một module tùy biến gọi là spammy.module và bao gồm một hàm được
gọi là spammy_user() gửi một e-mail cho người dùng, hàm này cũng sẽ được gọi, và
người dùng không may sẽ nhận được một e-mail không mong muốn mỗi khi đăng nhập Cách phổ biến nhất để khai thác các hàm nhân của Drupal là thông qua việc thực hiện của hook trong các module
1.2.4 Node
Mọi thứ đều là node, đó là triết lý của Drupal Node là kiểu dữ liệu nhỏ nhất với hai trường dữ liệu cơ bản nhất đó là title và body để lưu thông tin Ngoài ra còn có các trường thông tin khác như: ngày tháng tạo bài, ngày cập nhật, … Hãy tưởng tượng node là một cái chung nhất trong việc lưu nội dung, với hai cái này cơ bản đã lưu đủ thông tin rồi Node giống như là dàn bài cho một bài viết vậy
Trang 1510
Hình 1-3 Mô hình dữ liệu của node
Các kiểu nội dung trong Drupal đều có nguồn gốc từ một loại cơ sở duy nhất được gọi là node Cho dù đó là một entry blog, một công thức, hoặc thậm chí một nhiệm vụ dự án, các cấu trúc dữ liệu cơ bản là như nhau Cái hay đằng sau phương pháp này chính là khả năng mở rộng của nó Những người phát triển module có thể thêm các tính năng giống như xếp hạng, comment, tập tin đính kèm, thông tin định vị, v.v cho các nút nói chung mà không cần lo lắng về việc liệu các loại nút là blog, công thức, v.v Người quản trị trang web sau đó có thể trộn và kết hợp các chức năng theo loại nội dung Ví dụ, các quản trị viên có thể chọn để cho phép các ý kiến trên blog nhưng không phải công thức nấu ăn hoặc chỉ cho phép tải lên tập tin cho các công việc
dự án
Các node cũng chứa một cơ sở tập hợp các thuộc tính hành vi mà tất cả các loại nội dung khác kế thừa Bất kỳ node nào cũng có thể đặt ở trang chủ của trang web, publish hoặc chưa được publish Và vì cấu trúc đồng bộ này, các giao diện quản trị có thể cung cấp một màn hình chỉnh sửa hàng loạt để làm việc với các node
Một trang web có thể chứa nhiều loại nội dung, chẳng hạn như các trang thông tin, các mục tin tức, các cuộc thăm dò, bài đăng trên blog, danh sách bất động sản, vv Trong Drupal, mỗi hạng mục của nội dung được gọi là một node, và mỗi node thuộc
về một kiểu nội dung duy nhất, trong đó xác định các thiết lập mặc định khác nhau cho các node của kiểu, như liệu được công bố node tự động và ở đâu cho phép
Trang 16kỳ kiểu nội dung nào cũng có thể là một phần của một cuốn sách
Comment
Comment thực sự không phải là node, do đó, comment về mặt kỹ thuật không phải là một "kiểu nội dung" Bật module Comment cho phép khách truy cập trang web thêm comment (thường là ghi chú ngắn và trả lời các ý kiến khác) vào các node trên trang web
Diễn đàn
Một node Diễn đàn xác định một chủ đề cho một cuộc thảo luận diễn đàn, mọi người có thể trả lời chủ đề này bằng cách sử dụng coment Node Diễn đàn được tổ chức thành các chủ để thông qua một Taxonomy (danh sách các loại)
Page
Kiểu nội dung page được kích hoạt trong Drupal trong cấu hình cài đặt mặc định Các page thường được sử dụng cho nội dung tĩnh, có thể (nhưng không bắt buộc phải) được liên kết vào thanh menu chính
Trang 1712
Thăm dò ý kiến
Một cuộc thăm dò là nơi mà một câu hỏi nhiều lựa chọn được hỏi, và người dùng
có thể trả lời và xem câu trả lời của người khác cho các câu hỏi
Story
Kiểu nội dung Story được kích hoạt trong Drupal trong cấu hình cài đặt mặc định Các Story thường được sử dụng cho thông tin có liên quan giảm như thời gian qua (như các mục tin tức), từ đó các Story mới hơn thường sẽ được đặt cao hơn các Story cũ trong trang
Ngoài các loại cơ bản, các loại nội dung tuỳ chỉnh cũng có thể được tạo ra bằng cách vào Administer > Content > Content types > Add content type Có thể làm điều này như một cách để tổ chức nội dung - ví dụ, có thể có "Articles" và "News flash" như hai kiểu nội dung đơn giản trên trang web, thay vì chỉ sử dụng “Story" cho cả hai Nếu muốn thêm các lĩnh vực cho các kiểu nội dung tuỳ chỉnh, cài đặt module đóng gói Content Construction Kit (CCK) Tuỳ chỉnh lĩnh vực được sử dụng để lưu trữ thông tin bổ sung vượt quá giá trị mặc định Drupal (tiêu đề, body, thông tin tác giả, thời gian tạo/cập nhật, và tình trạng xuất bản), ví dụ, trên một trang web bất động sản, một kiểu nội dung bất động sản niêm yết có thể có các lĩnh vực cho thông tin bổ sung loại tài sản, diện tích đất, vv
Cuối cùng, một số module đóng gói định nghĩa kiểu nội dung riêng của nó
1.2.5 Taxonomy
Taxonomy là cách phân loại của sự vật Drupal đi kèm với một module taxonomy cho phép phân loại các nút Taxonomy phân loại mọi thứ vào category Sự chính xác khi sử dụng các từ có liên quan đến hệ thống taxonomy của Drupal là rất quan trọng
Trang 18từ "Poor" là một từ tốt hơn so với "Bad", không vấn đề gì Bạn chỉ cần chỉnh sửa term
số 1, và thay đổi "Bad" thành "Poor", mọi thứ bên trong Drupal sẽ tiếp tục làm việc Khi xác định một term, có thể nhập từ đồng nghĩa của term, từ đồng nghĩa là một term khác cùng ý nghĩa Các chức năng phân loại bao gồm trong Drupal cho phép nhập từ đồng nghĩa và cung cấp các bảng cơ sở dữ liệu cho việc lưu trữ và một số tiện
ích như taxonomy_get_synonyms ($tid) và taxonomy_get_synonym_root ($synonym)
Trang 1914
1.2.5.2 Vocabulary
Một vocabulary gồm một tập hợp các term Drupal cho phép kết hợp một vocabulary với một hoặc nhiều loại node Sự liên hệ lỏng lẻo là rất hữu ích cho các loại qua các biên giới loại nút Ví dụ, nếu đã có một trang web mà người sử dụng có thể gửi các câu chuyện và hình ảnh về du lịch, có thể có một vocabulary chứa tên nước như các term, điều này sẽ cho phép xem tất cả các câu chuyện và hình ảnh được gắn thẻ với "Bỉ" dễ dàng
Vocabulary có thể yêu cầu hoặc không Nếu một vocabulary được yêu cầu, người dùng phải gán một term cho một node trước khi node được phép submit Nếu một vocabulary không được yêu cầu, người dùng có thể chọn term mặc định “None selected” khi submit một node
Khi một vocabulary có một số hữu hạn các term (có nghĩa là, người dùng không thể thêm term mới) nó được gọi là một vocabulary được kiểm soát Trong một vocabulary được kiểm soát, term thường được trình bày cho người sử dụng bên trong một vùng lựa chọn thả xuống Tất nhiên, người quản trị hoặc người dùng đã được phân loại quản lý có thể cho phép thêm, xóa, hoặc sửa đổi các term
Một tag là một thứ giống như term Tuy nhiên, từ "tagging" thường ngụ ý rằng người dùng của trang web tạo ra các thẻ Trái ngược với một vocabulary được kiểm soát Thay vào đó, người dùng có thể nhập các term riêng của họ khi submit một node.Nếu một term chưa nằm trong vocabulary, nó sẽ được thêm vào Khi check box Tags trên giao diện chỉnh sửa vocabulary được check, giao diện người dùng cho vocabulary được trình bày như là một trường văn bản (với JavaScript tự động hoàn chỉnh được kích hoạt), chứ không phải là vùng lựa chọn thả xuống của một vocabulary được kiểm soát
1.2.6 Path
Trong Drupal, một đường dẫn là phần cuối của URL duy nhất cho một chức năng
cụ thể hoặc một phần của nội dung Ví dụ, một trang có đầy đủ URL là http://example.com/?q=node/7, đường dẫn là node/7 Nếu trang web sử dụng Clean URL, URL đầy đủ trong ví dụ này sẽ là http://example.com/node/7; đường dẫn vẫn là node/7 Vì bí danh URL hoàn toàn có thể thay thế những gì mà người dùng nhìn thấy như là URL, các đường dẫn được thảo luận tại đây (vẫn là cách mà Drupal quyết định nội dung nào để hiển thị) đôi khi được gọi là đường dẫn nội bộ
Trang 2015
Đường dẫn trong Drupal quan trọng vì nhiều màn hình configure trong khu vực admin sử dụng chúng Ví dụ, khi đang thêm một mục mới cho một menu, cho Drupal biết trang nào mục menu phải trỏ đến bằng cách nhập đường dẫn đến trang
Đây là một số ví dụ về đường dẫn có thể tìm thấy trong một trang web Drupal:
Đối với các trang Taxonomy, có thể tìm thấy những URL trong trang quản lý Taxonomy Nếu đang xem một danh sách term cho một vocabulary đặc biệt, mỗi term nên được liên kết đến một trang phân loại của nó Di chuột qua liên kết hoặc thực hiện theo các liên kết để tìm URL của nó
URL tìm thấy có thể có nhiều hình thức:
http://example.com/?q=[something] Trong trường hợp này, các [something] sau q=? là đường dẫn Ví dụ, nếu URL là http://example.com/?q=node/7, đường dẫn là node/7
http://example.com/[something] hay http://example.com/[Drupal subdirectory] /[something] Trong trường hợp này, các [something] sau đường dẫn cơ bản của trang web Drupal là đường dẫn Ví dụ, URL có thể là http://example.com/node/7 hoặc http://example.com/mysubdir/node/7, đường dẫn ở cả hai trường hợp đều là node/7
Trang 2116
1.2.7 User
Có một vài bước liên quan đến cài đặt Drupal Trong một số bước, thông tin
"người dùng" là cần thiết cho một loại đặc biệt của "tài khoản" Một “người dùng” không liên kết với một cá nhân ở ba trong bốn kiểu người dùng được đề cập ở đây Để giúp phân loại cho từng loại người dùng, câu hỏi cần đặt ra là "Ai " để ánh xạ “người dung” đến người thực sự
1.2.7.1 Computer User
Người cài đặt Drupal phải có quyền truy cập vào máy tính, nơi đặt bộ cài Nếu cài đặt Drupal cục bộ trên máy tính của riêng mình, thì “computer user” là chính mình Nếu cài đặt Drupal tại một máy chủ từ xa như một máy chủ web công ty, thì các tài khoản computer user có thể được gọi là một trong những cái sau đây (không phải là một danh sách đầy đủ):
Tài khoản đăng nhập web hosting
Đăng nhập FTP
Đăng nhập Cpanel
Đăng nhập Secure shell (SSH)
Những người có liên quan đến computer user là ai? Trong một số trường hợp, như máy tính của riêng mình hay một số lần đăng nhập FTP, những “người dùng” này
là những cá nhân Trong trường hợp khác, chẳng hạn như một tài khoản đăng nhập web hosting hoặc Cpanel, một “người dùng” (hoặc “tài khoản”) tên/mật khẩu được sử dụng để đăng nhập vào để kiểm soát tài khoản và có thể được chia sẻ bởi nhiều người 1.2.7.2 Database User
Một cài đặt Drupal yêu cầu một cơ sở dữ liệu để chạy (MySQL và PostgreSQL
là các chương trình cơ sở dữ liệu tốt nhất hỗ trợ tương thích với Drupal) Các cơ sở dữ liệu thường có cơ chế kiểm soát truy cập và yêu cầu "người dùng" với các cho phép có quyền thay đổi cơ sở dữ liệu (thêm/xóa/sửa dữ liệu, tạo bảng biểu, vv.) Một cài đặt Drupal cần phải có toàn quyền kiểm soát cơ sở dữ liệu, do đó, khi bạn thiết lập một trang web mới của Drupal, bạn (hoặc công ty web hosting) tạo ra một database user với các đặc quyền đầy đủ và sau đó cho tên người dùng và mật khẩu để cài đặt Drupal
để Drupal sẽ có toàn quyền kiểm soát cơ sở dữ liệu Các thông tin database user được lưu trữ trong tập tin settings.php hoặc trong sites/default hoặc thư mục con khác nhau của các trang web trong trình cài đặt Drupal
Trang 22để làm với Drupal.org hoặc bất kỳ trang web khác) Tài khoản này khác với tất cả các người dùng khác trong một cài đặt Drupal bởi vì nó không có giới hạn quyền hạn ("quyền hạn" được gọi là "kiểm soát truy cập" trong Drupal 5 và trước đó) "User/1", trong Drupal 6 và trước đó, cũng là tài khoản duy nhất có thể khởi chạy các script update.php cần chạy sau khi nâng cấp phần mềm
User/1 là ai? User/1 không nên được liên kết với một cá nhân, mà là với người hoặc những người có trách nhiệm để giữ phần mềm được cập nhật trên trang web Tốt nhất là tránh việc tạo ra nội dung trang web với user/1 Sở dĩ như vậy là vì nó lúng túng khi trách nhiệm bảo trì trang web được thực hiện bởi User/1 cần phải thay đổi cho một người mới nếu User/1 ban đầu đã viết nội dung vẫn còn cần phải được liên kết với họ Các nội dung được viết bởi tác giả ban đầu sau đó được chỉ định cho một tài khoản người dùng mới Tốt hơn là tạo tài khoản thứ hai ngay sau khi cài đặt thành công các trang web
1.2.7.4 User/2 và tất cả những người dùng khác
User/2 và tất cả người dùng đăng ký khác trên trang web Drupal, mỗi người dùng nên được kết hợp với một người cá nhân Người sử dụng đăng ký có thể được giao cho vai trò, mà được quyền cho phép người dùng khác nhau truy cập khác nhau để quản lý trang web và thêm nội dung
Trang 2318
Hình 1-5 Cấu trúc thư mục mặc định của một bộ cài Drupal
Thông tin chi tiết về mỗi thành phần trong cấu trúc thư mục như sau:
Thư mục includes chứa các thư viện cho các hàm phổ biến mà Drupal sử dụng
Thư mục misc lưu JavaScript và các icon, hình ảnh cần thiết cho quá trình cài đặt Drupal
Trang 2419
Thư mục modules chứa các module nhân, với mỗi module trong thư mục của
nó Tốt nhất không nên đụng đến bất cứ thứ gì trong các thư mục này (hoặc bất
kỳ thư mục nào khác ngoại trừ profiles và sites) Thêm module trong thư mục sites
Thư mục profiles chứa những cấu hình cài đặt khác nhau cho một trang web Nếu có những cấu hình khác ngoài cấu hình mặc định trong thư mục con này, Drupal sẽ hỏi muốn cài đặt theo cấu hình nào khi lần đầu cài đặt Drupal Mục đính chính của một cấu hình cài đặt là bật các nhân mặc định và các module liên quan một cách tự động Ví dụ một cấu hình e-commerce sẽ tự động cài đặt Drupal như một nền tảng e-commerce
Thư mục scripts chứa những script cho việc kiểm tra cú pháp, tối ưu code, chạy Drupal từ dòng lệnh, và điều khiển các trường hợp đặc biệt với cron
Thư mục sites chứa những sửa đổi Drupal trong cài đặt, module và giao diện Khi thêm những module cho Drupal từ nguồn các module đóng gói hoặc tự viết, chúng sẽ được đặt trong sites/all/modules Nó giữ tất cả những thay đổi của Drupal trong một thư mục đơn Trong thư mục sites sẽ có một thư mục con
có tên là default lưu những cài đặt mặc định cho trang Drupal – default.settings.php Bộ cài Drupal sẽ sửa những cài đặt ban đầu này dựa trên thông tin cung cấp và viết trong file settings.php Thư mục mặc định thường được sao chép và đổi tên thành URL của trang web bởi người quản trị, do đó những file cài đặt cuối cùng sẽ nằm ở sites/www.example.com/settings.php
Hình 1-6 Thư mục sites có thể lưu toàn bộ sửa đổi Drupal
Thư mục sites/default/files không được tạo bởi Drupal theo mặc định, nhưng nó sẽ cần thiết cho việc lưu bất kỳ file nào được upload lên trang web và
Trang 2520
cung cấp một cách tuần tự Một vài ví dụ là sử dụng một logo tùy biến, bật chức năng user avatar, hoặc upload bất kỳ kiểu dữ liệu media khác Thư mục con này yêu cầu quyền đọc và ghi bởi web server mà Drupal đang chạy trên nó Bộ cài đặt Drupal sẽ tạo ra thư mục con này nếu có thể và sẽ kiểm tra quyền truy cập chính xác đã được thiết lập hay chưa
Thư mục themes chứa các template engine và các giao diện mặc định cho Drupal Các giao diện tải về hoặc tự tạo không nên để ở đây, nên để trong sites/all/themes
cron.php được sử dụng để thực hiện nhiệm vụ định kỳ, chẳng hạn như các bảng cơ sở dữ liệu và cắt tỉa tính toán thống kê
index.php là điểm chính phục vụ yêu cầu
install.php là điểm chính cho trình cài đặt Drupal
update.php cập nhật mô hình cơ sở dữ liệu sau khi một phiên bản Drupal được cập nhật
xmlrpc.php nhận yêu cầu XML-RPC và có thể xóa một cách an toàn việc triển khai mà không có yêu cầu XML-RPC
robots.txt là bộ thực thi mặc định của robot loại trừ tiêu chuẩn
Sự bổ sung các loại nội dung mới như công thức nấu ăn, blog post, hoặc các file,
và thêm các hành vi mới như e-mail thông báo, peer-to-peer publishing, tập hợp và được xử lý thông qua các module Drupal làm cho việc sử dụng đảo ngược của mẫu thiết kế điều khiển, trong đó chức năng module được gọi bởi framework tại thời điểm thích hợp
Trang 26 Block : Block (danh từ) là một phần trong Drupal, chúng ta có thể xem, mỗi block là một khối nội dung bao gồm các thuộc tính:
Blog : Khi module này được webmaster kích hoạt, người sử dụng website có thể tạo các blog entry cho mình Thí dụ, user 'ABC' có mã số thành viên là 13, thì http://your-website.com/?q=blog/13 sẽ liệt kê các blog entries của user 'ABC' này
Trang 2722
BlogAPI: Khi người dùng website của bạn dùng một công cụ nào đó để tạo một blog entry từ xa (qua Google Docs chẳng hạn) BlogAPI sẽ đứng ra đảm nhận vai trò trung gian nhận dữ liệu, lưu vào CSDL
Book: Với module này, người dùng có thể tạo các trang nội dung có đánh chỉ mục rõ ràng Module này rất thích hợp để làm brochure, tài liệu hướng dẫn, Hiện tại module này cần được cải tiến nhiều để đáp ứng nhu cầu thực tế
Color: Được giới thiệu trong Drupal phiên bản 5.x với mục đích tạo ra bộ theme Garland uyển chuyển
Comment: Khi xem một trang nội dung (node, như một blog entry, một article chẳng hạn), người xem có thể gửi ý kiến phản hồi của mình Module này rất cần cho các website cần tương tác từ phía người dùng
Contact: Người dùng có thể gửi mail cho người quản lý website hay cho một thành viên nào đó của website nhờ chức năng mà module này cung cấp
Drupal: Module này cung cấp khả năng đăng nhập liên website Giả sử website
1 và website 2 cùng sử dụng module Drupal, thì thành viên của website 1 có thể đăng nhập ở website 2 và ngược lại
Filter: Module này cung cấp các phương thức trình bày khác nhau trên cùng một trường dữ liệu
Forum: Tạo diễn đàn thảo luận cho website
Help: Các module có phần trợ giúp người dùng, tuy nhiên chỉ khi bật module help lên thì người điều hành mới có thể xem được phần này
Legacy: Module legacy cung cấp cho việc nâng cấp từ bản cài đặt cũ Những xử
lý giúp các tham chiếu tự động chuyển hướng đến các trang từ bản cài đặt cũ và ngăn chặn trang không tìm thấy lỗi cho trang web của bạn
1.3.2 Các module đóng gói quan trọng
1.3.2.1 CCK (Content Construction Kit)
Trong Drupal mọi thứ đều là node Tuy nhiên thực tế có những thứ cần lưu nhiều
thông tin hơn node và vì thế có một khái niệm mới đó là kiểu nội dung Kiểu nội dung
là node nhưng có bổ xung thêm một số trường để lưu thêm thông tin Ví dụ trong bài viết bình thường có tiêu đề và nội dung Tuy nhiên trong một số bài viết cấp cao hơn như trang tin tức cần đưa thêm ảnh cho bài viết, rồi trường video quảng cáo, câu hỏi
Trang 2823
thăm dò, … lúc này có được một kiểu nội dung mới tên là trang tin chẳng hạn Thì trang tin chính là một kiểu nội dung và đi tới hai kết luận:
Kiểu nội dung là node nhưng bổ sung thêm một số trường thông tin khác Việc
bổ xung thêm trường thông tin khác này người ta gọi là mở rộng kiểu nội dung
Dễ thấy mô hình node và kiểu nội dung giống như kế thừa trong lập trình hướng đối tượng Chúng ta có lớp cha cơ bản nhất và lớp con chỉ cần bổ xung thêm thông tin
từ cha là có một kiếu lớp mới Các kiểu nội dung bản chất là node Tuy nhiên trong node có một trường khá quan trọng đi cùng với title và body đó là trường “type” Trường “type” này giúp phân biệt các kiểu nội dung và node với nhau
Giữa node và kiểu nội dung khác nhau bởi các trường dữ liệu bổ xung do đó việc
bổ xung này gọi là mở rộng kiểu nội dung Và chúng ta cần có cơ chế mở rộng kiểu nội dung Thực tế có hai cách cơ bản:
Cách thứ nhất là viết code mở rộng cho kiểu nội dung này Cách này chính là cách viết module cho việc thực hiện việc này
Cách thứ hai là có một module thực hiện việc làm này một cách trực quan mà chỉ cần khai báo mà thôi đó chính là CCK CCK giúp kiến tạo ra các nội dung khác nhau Trong Drupal các CCK có rất nhiều Ví dụ: trường ảnh, trường video, trường link, … Có rất nhiều các loại CCK giúp tạo ra đủ các loại nội dung khác nhau theo ý thích
Đó là vai trò của CCK, CCK giúp mở rộng kiểu nội dung
1.3.2.2 Views
Views là một bộ lọc có vai trò lọc và trình bày nội dung Vai trò của Views gồm hai phần đó là lọc và trình bày nội dung
Lọc nội dung: View giúp lọc các kiểu nội dung theo một số điều kiện đặt ra Ví
dụ cần lấy ra 6 bài viết mới nhất hoặc lấy ra các bài viết thuộc chủ đề “tin thế giới’ Đó là vai trò chính của Views
Hiển thị nội dung: Sau khi lọc các nội dung ra, có được danh sách các nội dung cần hiển thị Tuy nhiên muốn trình bày các kiểu nội dung này theo các cách khác nhau Ví dụ muốn trình bày dạng bảng các nội dung, hoặc danh sách các nội dung Vai trò thứ hai của Views là trình bày các nội dung đã lọc ra được Việc lọc các nội dung thì module Views đã hỗ trợ đầy đủ và việc hiển thị module này cũng đã hỗ trợ 4 dạng hiển thị cơ bản Tuy nhiên để tạo cách trình bày nội dung
Trang 2924
phong phú có thể tải thêm các module Views bổ xung khác phục vụ việc trình bày nội dung thật đẹp ví dụ như module Views Slideshow, Views Tab, …
1.3.2.3 Panels
Panels giúp chia nhỏ phần nội dung thành các vùng bé hơn
Drupal trình bày giao diện thành các vùng để chứa các block - block là các phần nội dung Thường thì một theme của drupal có một số vùng cơ bản: header, footer, content, sidebar left, sidebar right Các vùng này bao quanh vùng nội dung Ngoài ra
có thể thêm nhiều vùng vào theme tùy ý đó chính là sự uyển chuyển của Drupal Tuy nhiên, như các trang báo chia vùng nội dung (vùng content) thành các phần nhỏ hơn để tiện trình bày Ví dụ họ chia vùng content thành cột trên đầu chứa tin nóng, hai cột hai bên chứa các block có các bài viết được phân loại Panels giúp chia phần nội dung thành các phần nhỏ hơn và trên mỗi phần đó chứa các block nội dung
1.4 Hệ thống giao diện
1.4.1 Tổng quan về phát triển giao diện
Từ phiên bản 4.5, hệ thống giao diện của Drupal đã trở nên rất uyển chuyển Cấu trúc mới được giới thiệu, giúp cho việc kết hợp các thành phần tạo nên một giao diện, trở nên rất đơn giản: bộ máy giao diện, các khuôn mẫu, các mảng định dạng và các đoạn mã PHP
Từ phiên bản Drupal 4.7, bộ máy giao diện được mặc định kèm theo với Drupal
Trang 30Có thể tạo ra những giao diện chỉ bao gồm CSS bằng cách tạo ra thư mục con trong một thư mục của một giao diện nào đó, sau đó, tạo một tập tin style.css ở trong thư mục con vừa tạo Đây là cách mà hai giao diện Minelli và Marvin được xây dựng Mỗi giao diện cần có một tập tin screenshot.png trong thư mục của nó, Drupal sẽ trình bày ảnh chụp này ở màn hình quản lý giao diện
- Left sidebar và Right sidebar: thường là vị trí của các block
- Content: nội dung của các node
- Footer: thường gồm thông tin về bản quyền hay các liên kết hữu ích khác
Trang 31- Xác định cách hiển thị các văn bản cố định hoặc thay đổi
- Xác định các thuộc tính của phông chữ và đồ họa
- Ghi đè (thay đổi) output của các module
Một giao diện có thể được cấu hình để tự động đáp ứng với những thay đổi trong nội dung, các loại nội dung, người sử dụng, quyền của người sử dụng vv
Một giao diện cũng có thể được sử dụng để ghi đè (sửa đổi hoặc thay thế) các văn bản và các biến được tạo ra bởi các module Ví dụ, một giao diện có thể được sử dụng để thay thế các nhãn mặc định vào nút Tìm kiếm hoặc để ẩn và hiển thị các lĩnh vực nhất định là một phần của một loại nội dung cụ thể Có thể ghi đè lên các lớp CSS mặc định mà có thể xuất hiện trong nội dung của trang web
Trang 3227
Thường thì một giao diện được sử dụng đơn giản chỉ để xác định look and feel của toàn bộ trang web, nhưng nó cũng có thể được sử dụng để tùy chỉnh giao diện của một phần nhất định của trang web, một số loại nội dung, và thậm chí cả các nút riêng
lẻ hoặc các trang Ví dụ, giao diện có thể chỉ định một giao diện khác cho trang chủ
Hình 1-9 Các file trong một giao diện thông thường và giao diện con
1.4.4 Các file template
1.4.4.1 page.tpl.php
page.tpl.php là cha của tất cả các file template và cung cấp cách bố trí tổng thể của trang web Những file template khác được chèn vào page.tpl.php như sơ đồ sau: