T NG QUAN V DRUPAL
Khái ni m
Drupal là một khung phát triển phần mềm mã nguồn mở, cho phép người dùng quản lý và tổ chức nội dung một cách linh hoạt Khác với các hệ thống quản trị nội dung hiện đại khác, Drupal cung cấp khả năng tùy chỉnh cao về cách trình bày và quản lý dữ liệu Với cấu trúc lập trình tinh vi, Drupal hỗ trợ các tác vụ phức tạp mà không cần phải viết mã từ đầu, giúp người dùng dễ dàng tùy chỉnh và mở rộng hệ thống của mình.
"khung s n phát tri n ng d ng web", vì ki n trúc thông minh và uy n chuy n c a Drupal
Drupal đ c ch y trên r t nhi u môi tr ng khác nhau, bao g m Windows, Mac
Hệ điều hành như OS X, Linux, FreeBSD và OpenBSD, cùng với các máy chủ web như Apache (phiên bản 1.3+) và IIS (phiên bản 5+), đều hỗ trợ ngôn ngữ lập trình PHP (phiên bản 4.3.3+) Drupal kết nối với cơ sở dữ liệu MySQL hoặc PostgreSQL để quản lý nội dung và các thiết lập.
L ch s
Drupal được sáng lập bởi Dries Buytaert và Hans Snijder tại Đại học Antwerp, ban đầu được phát triển dưới dạng một hệ thống bảng tin (Bulletin board system) Đến năm 2001, Drupal đã trở thành một dự án mã nguồn mở quan trọng.
"druppel" c a ti ng Hà Lan, ngh a là "gi t n c" Hi n nay, có m t c ng đ ng r ng l n đang giúp đ phát tri n Drupal.
N n t ng
ng d ng
Drupal cho phép xây dựng nhiều ứng dụng mà không cần tốn quá nhiều thời gian phát triển, nhờ vào các module phong phú Các ứng dụng này có thể được phát triển dựa trên nền tảng Drupal một cách dễ dàng và hiệu quả.
− H ng cá nhân/ t ch c: Blog, Calendar, Dicussing forum,…
− H ng c ng đ ng: Multi blog site, Organic Groups, Voting,…
− H ng doanh nghi p: Webservice, Brochure, Newsletter, News site,…
u đ i m
14 ơ H th ng module linh ho t
Drupal phát triển theo hướng mô-đun, cho phép người dùng dễ dàng thêm hoặc gỡ bỏ các mô-đun tùy theo nhu cầu Điều này giúp tích hợp với các mô-đun khác để tạo thành một hệ thống linh hoạt và đa dạng Ngoài ra, việc tùy chỉnh giao diện (theme) cũng rất đơn giản, giúp người dùng cá nhân hóa trang web của mình một cách hiệu quả.
Drupal h tr PHPTemplate cho phép t o ra giao di n phong phú, linh đ ng ơ T o n i dung m r ng
Drupal cho phép tạo ra nhiều loại nội dung phong phú như Page, Story, Forum và Blog Ngoài ra, người dùng có thể mở rộng hệ thống bằng cách thêm các kiểu nội dung mới thông qua Taxonomy hoặc tích hợp các module tùy chỉnh để đáp ứng nhu cầu tìm kiếm.
Drupal qu n lý trang b ng s node và có th thay th sao cho URLs tr nên thân thi n v i ng i dùng khi tìm ki m ơ Quy n truy c p theo vai trũ
H th ng phân quy n, c b n d a trên b ba: module + thao tác + vai trò Do đó d dàng m r ng thêm.
Nh c đ i m
Do không tương thích ngược, các module phải được phát triển riêng cho từng phiên bản 4.x, 5.x, 6.x và 7.x của Drupal, vì hệ thống chỉ hỗ trợ hai phiên bản mới nhất Điều này khiến người dùng gặp khó khăn khi phải nâng cấp liên tục.
CÁCH HO T NG C A DRUPAL
Technology Stack
M c đích thi t k c a Drupal có th ch y t t trên các máy ch web và có th đ m b o v hi u n ng và đ an toàn b ng vi c s d ng các công ngh ph bi n
Drupal là một hệ điều hành linh hoạt, có thể chạy trên nhiều nền tảng như Linux, BSD, Mac OS X, Windows và Solaris Về máy chủ web, Drupal hỗ trợ nhiều máy chủ khác nhau, trong đó phổ biến nhất là Apache, cùng với sự hỗ trợ cho IIS Đối với cơ sở dữ liệu, Drupal tương thích với MySQL và PostgreSQL, cho phép người dùng lựa chọn giải pháp phù hợp với nhu cầu của họ.
PostgreSQL là h qu n tr c s d li u) L p trên cùng là Language (l p ngôn ng ): Drupal s d ng ngôn ng PHP có h tr l p c s d li u tr u t ng (Database
Abstraction Layer) Nh l p này, làm cho PHP có th k t n i và truy v n đ n c s d li u d dàng và an toàn h n.
Core
Mô hình khung sản phẩm được tích hợp thành nhân của Drupal cung cấp các chức năng quản lý người dùng, quản lý nội dung với hỗ trợ phân loại kiểu nội dung (taxonomy) và các template (mẫu giao diện) Hệ thống thực hiện các yêu cầu của người dùng và một thư viện dùng chung sẽ được sử dụng cùng với các thành phần.
Hình 1-2 T ng quan v Drupal core (không bao g m t t c ch c n ng)
Module
Module là phần mềm mở rộng có thể cài đặt vào Drupal để bổ sung các tính năng hoặc chức năng mới cho nền tảng này Người dùng có thể dễ dàng bật hoặc tắt các module đã có sẵn trong Drupal Ngoài ra, họ cũng có thể tìm kiếm các module mở rộng tích hợp vào Drupal tại http://api.drupal.org/ hoặc phát triển các module mới cho trang web của mình.
Hình 1-3 Module có th đ c thêm vào đ t ng c ng các ch c n ng.
Hooks
Hook trong Drupal được coi là các sự kiện (event) hoặc các hàm gọi lại (callbacks) cho phép lập trình viên can thiệp vào mọi hoạt động mà không cần sửa đổi mã nguồn của nhân hoặc các phần khác Hệ thống hook đa dạng giúp tối ưu hóa và tùy chỉnh chức năng của trang web một cách linh hoạt và hiệu quả.
Themes
Khi tạo ra một trang web để trình duyệt, có hai phần chính: một nhóm dữ liệu tĩnh (nội dung) và đánh dấu dữ liệu trên web Trong Drupal, lập trình viên chịu trách nhiệm tạo ra HTML cung cấp cho trình duyệt web Drupal khuyến khích việc tách biệt giữa nội dung và đánh dấu nội dung.
Drupal cho phép người quản trị giao diện tùy chỉnh và thay đổi giao diện cho trang web Một cách đơn giản để thực hiện điều này là sử dụng CSS (Cascading Style Sheet) để thay đổi các mẫu giao diện có sẵn.
Nodes
Trong Drupal, các kiểu nội dung cơ bản được gọi là node, và có thể nói rằng toàn bộ cấu trúc của Drupal xoay quanh node với thiết kế đơn giản Việc phát triển các kiểu nội dung phức tạp cho phép mỗi node được liên kết với nhiều nội dung khác nhau Node được quản lý thông qua hệ thống phân loại kiểu nội dung (taxonomy), đây cũng là đặc trưng nổi bật của Drupal Node chứa đựng tất cả các mục đích, nội dung, ngày tháng, và nhiều thông tin khác.
Cách t ng tác v i node là m r ng chúng Có th thêm vào các node các ch c n ng m r ng nh : đánh giá bài vi t, bình lu n, đính kèm file, …
M i node có m t đa ch URL xác đ nh, d a vào node_id, c u trúc nh sau:
?q=node/node_id N u node_id không đ c xác đ nh thì h th ng s chuy n v trang ch
Blocks
Block là thông tin có thể được kích hoạt hoặc vô hiệu hóa tại các vị trí xác định trên giao diện của trang web Các vị trí thường gặp của Block bao gồm: left sidebar, right sidebar, header và footer.
Các block trên trang web thường được sử dụng để mô tả thông tin và điều chỉnh trải nghiệm người dùng hiện hành Ví dụ, block điều hướng chứa các liên kết tới các phần quan trọng mà người dùng có thể truy cập Sắp xếp và hiển thị các block được quản lý thông qua giao diện quản trị của trang web.
MODULE CHU N C A DRUPAL
Aggregator
RSS là một định dạng dữ liệu dựa trên XML, được sử dụng để chia sẻ nội dung trên web (Web syndication), phổ biến trong các website tin tức và weblog Định dạng RSS cho phép cung cấp nội dung web và tóm lược nội dung cùng với các liên kết đến phiên bản gốc của thông tin, cũng như các siêu dữ liệu khác Thông tin này được cung cấp dưới dạng một tệp tin XML gọi là RSS feed, webfeed, RSS stream, hoặc RSS channel Aggregator có khả năng thu thập tin RSS từ các website khác và lưu trữ chúng.
CSDL, r i trình bày ra giao di n ng i dùng Các ngu n tin RSS có th đ c phân m c theo 'Category'.
Blog
Drupal là hệ thống tiên phong trong lĩnh vực blog đa người dùng, cho phép mỗi người dùng tạo blog riêng với URL cá nhân Tính năng này biến Drupal thành lựa chọn tuyệt vời cho blog cá nhân và cộng đồng trực tuyến Người quản trị có thể thiết lập quyền cho từng người dùng, đồng thời có khả năng tạo danh mục cho blog thông qua Taxonomy Module Ngoài ra, người dùng còn có thể tải lên file, lưu trữ nội dung và bình luận trên blog.
M i blog có th tùy ch nh theme khác nhau b ng cách cài đ t thêm module Blog Theme t i đa ch http://drupal.org/node/19248.
Blog API
Ng i dùng website có th 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
Blog API h tr nhi u XML-RPC d a trên blogging APIs nh là new Blogger Data API, Meta Weblog API và Movable Type API
Book
Trong module này, người dùng có thể tạo các trang nội dung với đánh dấu mục rõ ràng, rất phù hợp cho việc làm brochure và tài liệu hướng dẫn Hiện tại, module này đã được cải tiến để đáp ứng nhiều nhu cầu thực tế, giúp người dùng đóng góp hiệu quả vào việc xây dựng các trang sách Tuy nhiên, cần đảm bảo rằng các đóng góp mang mục đích đúng và tích cực để tránh những vấn đề không mong muốn.
18 hành vi ch nh s a, xóa b , vi t sai n i dung, các trang ph i thông qua s ch p thu n c a ng i qu n tr m i đ c bi u di n trên website
Module cung c p ba quy n sau: Create Book Pages, Edit Own Book Pages,
Maintain Books o Create Book Pages: Cho phép t o trang o Edit Own Book Pages: Cho phép ch nh s a các trang do b n thân s h u o Maintain Books: Cho phép ch nh s a toàn b
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
Module này cung c p 2 hình th c liên h : Personal Contact Form, Sitewide
Biểu mẫu liên hệ cá nhân cho phép người dùng chia sẻ email của mình và gửi mail qua tab Liên hệ Trong khi đó, biểu mẫu liên hệ toàn trang cho phép tạo các nhóm người liên hệ, giúp gửi email đến nhiều người cùng lúc.
Filter
Module này cung cấp nhiều phương thức trình bày khác nhau trên cùng một môi trường dữ liệu, giúp người dùng nhận diện các đoạn code, script nguy hiểm, lỗi cú pháp và các thẻ HTML một cách hiệu quả.
Module này đ c b t m t cách t đ ng và có th c u hình b ng cách truy c p Administer / Input format
Forum
Module cho phép t o di n đàn th o lu n Ng òi qu n tr c n t o các Container tr c khi t o các ch đ i u này giúp cho vi c t ch c và qu n lý d dàng h n.
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 dùng m i có th xem đ c ph n này
Chú ý rằng module Help không cung cấp thông tin chính xác và chi tiết về hướng dẫn người dùng Do đó, cần thực hiện các chỉnh sửa cần thiết để cải thiện nội dung của module này Tham khảo thêm thông tin tại http://drupal.org/node/18031.
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 trang web
Module legacy phân loại xử lý kiểu cách trang taxonomy, nguồn cấp dữ liệu phân loại, và định danh nguồn cấp dữ liệu cho blog Nó cũng xử lý nâng cấp URL từ Drupal 4.1 và ghi đè URL kiểu cũ sang các URL kiểu mới, rõ ràng.
Node
Các n i dung mà ng i l u tr đa s đ c l u d i d ng node (blog entry, book page, forum topic, page content, article, ) M i m t node có các thu c tính c b n:
− Ki u n i dung (content type): Thu c tính này nh m phân bi t node nào là 'forum topic', node nào là 'book page',
− Quy n h n: ng v i m i ki u n i dung, webmaster có th gi i h n 'quy n t o ra', 'quy n ch nh s a' cho m t s nhóm ng i dùng nh t đnh
− Tác gi : M i m t node s có m t và ch m t tác gi
− Th i đi m t o: Th i đi m mà node đ c t o ra
− Th i đi m ch nh s a cu i cùng
− Tiêu đ : Tiêu đ c a node Thí d , tiêu đ c a m t forum node c ng là tiêu đ c a 'lu ng th o lu n' đó
Workflow của node là một dòng chảy quan trọng, giúp hệ thống xác định trạng thái của node, cho biết node đã được xuất bản hay chưa Khi node đã được xuất bản, nó có thể được hiển thị trên trang chính và xác định vị trí so với các node khác.
CÁC MODULE H TR THÊM
Views
Views là m t b l c có vai trò 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 c n 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 Views giúp l y ra các n i dung mà ng i dùng c n
Sau khi lọc các nội dung, người dùng có thể tạo danh sách các nội dung cần hiển thị Họ có thể trình bày chúng theo nhiều cách khác nhau, chẳng hạn như dạng bảng hoặc danh sách Ngoài ra, việc trình bày theo kiểu slide cũng là một lựa chọn, cho phép nội dung xuất hiện lần lượt thay vì hiển thị cùng lúc Vai trò chính của Views là giúp người dùng trình bày các nội dung đã được lọc một cách hiệu quả.
Panels
Các panel trong Drupal giúp chia nhỏ nội dung thành các vùng nhất định, với giao diện được tổ chức thành các vùng chứa block - các phần nội dung Thông thường, một theme của Drupal có các vùng cơ bản như header, footer, content, sidebar trái và sidebar phải, bao quanh vùng nội dung chính Người dùng có thể tùy ý thêm nhiều vùng vào theme, thể hiện sự linh hoạt của Drupal Các trang báo thường chia vùng nội dung thành các phần nhỏ để trình bày một cách hiệu quả.
Việc sử dụng layout trong Word để chia nội dung thành các phần giúp trình bày thông tin một cách rõ ràng và mạch lạc Các block bài viết được phân loại và sắp xếp theo từng khối, tạo nên sự dễ dàng trong việc tiếp cận thông tin nóng Panels đóng vai trò quan trọng trong việc tổ chức nội dung của theme, giúp chia nhỏ phần nội dung thành các phần nhỏ hơn, mỗi phần chứa các block nội dung riêng biệt, từ đó nâng cao trải nghiệm đọc cho người dùng.
Content Construction Kit (CCK)
Drupal hỗ trợ hai loại nội dung cơ bản là Page và Story, nhưng chúng chỉ có hai trường: Title và Body, không đáp ứng đủ cho việc phát triển nội dung website Do đó, CCK đã ra đời để giúp mở rộng nội dung một cách dễ dàng hơn Người quản trị có thể thêm các trường mới vào kiểu nội dung như Text field, Image field, File field, và Radio button Để sử dụng File field và Image field, cần phải cài đặt thêm module File Field và Image Field để sử dụng chung với CCK.
Sau khi đã t o thêm field m i, CCK t đ ng l u tr nh ng thông tin vào c s d li u và bi u di n trong nh ng cách khác nhau.
Ckeditor
Ckeditor là trình so n th o mã ngu n m theo ki u WYSIWYG (“What You See
CCK là một công cụ dễ sử dụng, không yêu cầu người dùng có kiến thức về HTML để thực hiện các thao tác cần thiết Giao diện của CCK thân thiện, cho phép người dùng thao tác như trên trình soạn thảo Word Tuy nhiên, người quản trị cần phải kích hoạt chức năng Filter HTML để người dùng thông thường có thể chọn các mã được phép sử dụng.
Ngoài ra c n ph i tích h p module IMCE vào Ckeditor đ có th s d ng ch c n ng tìm và chèn hình nh m t cách d dàng h n.
XÂY D NG MODULE CHO DRUPAL
File info và module
Cấu trúc của module cam kết có thể chứa nhiều tập tin khác nhau, nhưng tối thiểu phải có hai tập tin: .info và .module, trong đó là tên của module được tạo ra Tên này không được trùng với các module đã tồn tại trong hệ thống.
Trước khi thực hiện cài đặt cho một module, cần tạo ra một file văn bản chứa các thông tin cần thiết về module đó Một số thành phần của Drupal sẽ sử dụng thông tin trong file này để quản lý module hiệu quả.
File info được viết theo cấu trúc của file PHP ini, với định danh file được xác định cho việc thiết lập Nội dung của một file info bao gồm các thông tin như: name = “Xem điểm”, description = “Xem điểm sinh viên”, 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 ng i qu n tr Tr ng description ch a thông tin v module, mô
21 t ch c n ng nhi m v mà module s th c hi n name và description là hai tr ng b t bu c ph i có trong file info
Trạng thái ba là core, và module này hoạt động trên tất cả các phiên bản của Drupal Giá trị 6.x yêu cầu phiên bản Drupal 6, bao gồm cả các phiên bản nâng cấp từ 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 các nhà phát triển làm việc với CVS (Hệ thống quản lý phiên bản đồng thời) được khuyến cáo nên tự mình đặt giá trị cho trạng thái 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
Các module phụ thuộc không chỉ chứa các chức năng chính mà còn đi kèm với thông tin quan trọng trong file info Trong đó, trường "Package" xác định nhóm chức năng của module; nếu không khai báo, module sẽ thuộc nhóm "other" Ngoài ra, trường "Dependencies" liệt kê các module phụ thuộc, cách nhau bằng khoảng trắng; nếu module yêu cầu một phụ thuộc không có sẵn trong hệ thống, nó sẽ không thể hoạt động.
File module là tệp quan trọng trong một module, chứa các đoạn mã PHP thực hiện chức năng của module đó Tệp này thường sẽ định nghĩa một số hàm hook mà Drupal gọi tại các thời điểm nhất định để đáp ứng các yêu cầu.
C ng gi ng nh file info, file module đ c đ t tên theo quy t c
.module, trong đó là tên th m c ch a module
File module trong Drupal bắt đầu bằng Điều này giúp ngăn chặn việc in những ký tự lạ trong đầu ra của mã khi gặp một số trường hợp Ví dụ, nếu các ký tự này được xuất ra trước khi phần thông tin header của HTML được gửi đi, trình duyệt máy khách sẽ hiển thị thông báo lỗi ở đầu trang web.
M t s hook c b n
Hook này đ c s d ng đ t o m t block hi n th thông tin Khi hook_block đ c g i, Drupal s truy n 3 tham s vào hàm: $op, $delta, $edit
Tham số $op chứa thông tin về loại thao tác mà module sẽ thực hiện, có thể nhận một trong bốn giá trị sau: "list" được sử dụng khi module cung cấp thông tin về chính nó; "view" được truyền vào khi Drupal muốn hook block cung cấp thông tin hiển thị cho người dùng; "configure" dùng để điều chỉnh các thiết lập cho block; và "save" được sử 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ó tr là view thì $delta s đ c đ t Tham s này ch a các thông tin thêm v n i
Hàm hook_block() cho phép hiển thị nhiều block khác nhau trong hệ thống, với nội dung của mỗi block được xác định dựa trên giá trị của biến $delta được truyền vào.
Cuối cùng, 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 lưu được thực hiện Tham số $edit thực chất là một mảng 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 thông tin c a block (info), tiêu đ (subject) và n i dung
Hàm hook_help() được sử dụng để cung cấp thông tin hữu ích cho người sử dụng Hàm này nhận hai tham số: $path chứa đường dẫn URL để xác định trang trợ giúp nào sẽ được hiển thị và $arg chứa các thông tin bổ sung cần thiết.
Trong lập trình viên, việc sử dụng biểu thức switch để xử lý giá trị của $path giúp phân biệt các vấn đề khác nhau liên quan đến module Giá trị này tuân theo định danh admin/help#, trong đó được thay thế bằng tên của module tương ứng Kết quả của hàm này được hiển thị trong mục Administer.
Mọi người dùng đã đăng ký có thể truy cập trang "Tài khoản của tôi" để xem thông tin tài khoản của họ Địa chỉ URL của trang này như sau: http://example.com/drupal/?q=user/3.
Trang thông tin người dùng có thể truy cập bởi một module quản trị có quyền tự độ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, nhà phát triển có thể liên kết với giao diện quản lý người dùng.
Hook ng là một công cụ quan trọng trong Drupal 6, cho phép người dùng thực hiện nhiều thao tác khác nhau liên quan đến trang tài khoản Cụ thể, hook này hỗ trợ 13 thao tác, bao gồm thêm, sửa chữa và xóa bản ghi nh đ ng nh p.
M t b n tri n khai c a hook_user() s nh n 4 tham s sau: o $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
Trong bài viết này, chúng tôi sẽ trình bày 13 giá trị quan trọng liên quan đến 13 thao tác như xem, đăng nhập, xóa, và các thao tác khác Đầu tiên, biến `$edit` chứa các giá trị được gán từ một form và được truyền vào qua tham chiếu `&$edit`, sử dụng cho các thao tác xử lý dữ liệu như chèn Tiếp theo, biến `$account` được sử dụng để đại diện cho thông tin tài khoản của người dùng, cũng được truyền qua tham chiếu `&$account` Cuối cùng, biến `$category` được sử dụng trong một số thao tác để xác định phần thông tin người dùng sẽ được trích xuất theo yêu cầu.
Chi ti t v hook này xem t i đ a ch http://api.drupal.org/api/function/hook_user/6 ơ Hook mail
Ph n l n các yêu c u v vi c g i mail trong Drupal đ u đ c h tr b i các hàm có trong Mail API nên ng i phát tri n không c n ph i vi t mã cho nh ng thao tác này
Tùy theo yêu cầu, người phát triển có thể tùy chỉnh định dạng của thông điệp thông qua hook_mail() Việc triển khai hook này cho phép điều chỉnh các phần đầu và thân của thông điệp trước khi gửi đi.
Khi hàm triển khai hook mail được thực thi, nó sẽ truyền ba tham số sau: $key, là một khóa dạng chuỗi dùng để xác định thông tin và việc thông điệp sẽ được định danh như thế nào; $message, là cấu trúc dữ liệu thể hiện thông điệp mà Drupal đã khởi tạo trước đó, tham số này phải được truyền dưới dạng tham chiếu &$message nếu muốn thay đổi giá trị; và $params, là một tập hợp các tham số được truyền vào từ lệnh gọi hàm drupal_mail() của module trong Hook view.
Trước khi một node được hiển thị đến người dùng, thông tin của nó có thể được cập nhật bằng cách sử dụng hook_view() Hook này được gọi khi hệ thống nhận một đòi hỏi từ node, ngay vào thời điểm trước khi node được hiển thị Hàm này sẽ cần thiết trong một số trường hợp mà nội dung của node có thêm một số trường thông tin Drupal chưa xử lý Đồng thời, hook này cung cấp thêm thông tin cho hệ thống giao diện để có thể biểu diễn nội dung như mong muốn của người dùng.
Hàm triển khai của hook này nhận 3 tham số: $node, chứa đối tượng node cần hiển thị; $teaser, xác định xem bài viết sẽ được hiển thị đầy đủ hay chỉ có bản tóm tắt, với giá trị logic True hoặc False; và $page, cho biết node này sẽ hiển thị trên trang riêng hay không Nếu $page có giá trị True, tiêu đề của node sẽ không được hiển thị.
Giá trị trả về của hàm khai triền hook_view() là $node, tham số này sẽ được thay đổi nhằm thể hiện nội dung một cách chính xác Các node được chuẩn bị cho việc hiển thị bằng cách tập hợp một mảng có cấu trúc trong $node→content, thay vì thao tác với từng thành phần riêng lẻ như $node→body và $node→teaser.
Chi ti t c a hook này xem thêm t i đa ch http://api.drupal.org/api/function/hook_view/6 ơ Hook menu
Hook_menu() cho phép người phát triển module đăng ký một URI tự định (hoặc chi tiết hơn là một đường dẫn URL tùy chỉnh) và ánh xạ URI đó với một hàm xử lý Hook này thường được sử dụng để tạo các thực thể cho trang quản lý của module.
nh ngh a m t hook m i
M c đích c a vi c đnh ngh a hook riêng là giúp ng i phát tri n module có th ch đ nh n i dung s đ c đ a vào b n tin và cách hi n th chúng
Việc định nghĩa một hook mới rất đơn giản, thậm chí chỉ cần một dòng mã Tuy nhiên, điều này cần được thực hiện một cách chi tiết để đảm bảo rằng các nhà phát triển sử dụng sau này có thể hiểu rõ và áp dụng hiệu quả.
Có nhiều cách để làm cho hook được sử dụng hiệu quả và triển khai Cách đầu tiên là thêm các thông tin chi tiết về hook vào trong khi tài liệu của đoạn mã Cách thứ hai là tạo ra một hàm hook trong mã nguồn, hàm này sẽ không được gọi đến mà chỉ đóng vai trò làm mẫu.
V.3.2 S d ng hook vào các module khác
Vi c s d ng hàm hook t đ nh ngh a vào trong module c ng gi ng nh đ i v i các hook có s n c a Drupal B n tri n khai c a m t hook ph i đ c đ t theo quy t c
_( ) và có các tham s trùng v i ph n khai báo c a hook
Các hook đ c đnh ngh a trong m t module có th đ c tri n khai trong module khác và module ch a khai báo hook ph i đ c b t.
jQuery trong Drupal
jQuery là một trong những thư viện JavaScript phổ biến hiện nay, sử dụng mô hình thiết kế giao diện mượt mà (Fluent Interface) Thư viện này cho phép kết nối các lệnh hàm với nhau, giúp thực hiện các truy vấn phức tạp một cách dễ dàng và hiệu quả.
Thông th ng, jQuery truy v n t i cây DOM (Document Object Model) là m t c u trúc d li u đnh ngh a nên c u trúc c a m t v n b n, th ng là HTML ho c XML
V n b n này s đ c bi u di n d i d ng cây v i thành ph n đ u tiên là g c DOM đ c bi t đ n là m t mô hình đ i t ng ph c t p jQuery cung c p m t API nh h n và d s d ng h n cho ng i l p trình
Tuy nhiên, jQuery đ c s d ng trong nhi u tr ng h p không ch riêng truy v n
Nó có m t b công c AJAX, công c x lý s ki n, hi u ng o và m t s hàm ti n ích khác
Thông tin thêm v jQuery có t i đa ch http://jquery.com
M c đnh jQuery s cài đ t cùng v i Drupal vì th vi c s d ng là khá d dàng
Mã nguồn của jQuery được chứa trong file jQuery.js nằm trong thư mục misc File này sẽ được nạp khi có lệnh gọi hàm drupal_add_js() Hàm này có nhiệm vụ nhúng mã JavaScript và thêm vào mã nguồn của trang web.
Tham s đ u tiên c a hàm drupal_add_js( ) là đo n mã JavaScript s đ c th c thi Tham s th hai (inline) cho bi t Drupal s ghi đo n mã vào gi a hai th
trong th c a trang HTML
Để đảm bảo module hoạt động như mong đợi, cần sử dụng các truy vấn jQuery chạy trên trình duyệt hỗ trợ JavaScript và AJAX Nếu trình duyệt không hỗ trợ, các thay đổi đối với HTML phía máy khách sẽ không được thực hiện.
Th vi n JavaScript c a Drupal có hàm Drupal.jsEnabled( ) s ki m tra đi u ki n này Giá tr tr v c a hàm này là TRUE ho c FALSE t ng ng v i k t qu ki m tra.
Form API
Drupal phiên bản 4.7 cung cấp API hỗ trợ việc tạo, xác thực và xử lý form trong HTML API này biểu diễn các form dưới dạng một mảng chứa các thuộc tính và giá trị Một số ưu điểm nổi bật bao gồm khả năng tùy biến cao và dễ dàng tích hợp vào các ứng dụng web.
− Không c n ph i vi t mã HTML mà ch c n khai báo các thu c tính và giá tr c a form
− D dàng thêm, xóa, đ o th t và thay đ i các form i u này thu n ti n khi mu n ch nh s a m t form đ c t o b i module khác
− M t thành ph n trong m t form có th đ c liên k t v i m t hàm giao di n riêng
− Có th thêm các b c xác th c và x lý riêng cho t ng form
− Các thao tác liên quan đ c b o v tránh vi c t n công b ng cách th c hi n nh ng thay đ i nh h ng x u đ n h th ng
Các thành phần của form được khai báo trong một mạng có cấu trúc phân cấp và có thể ghép lồng nhau Mỗi thành phần gồm có các cấp thuộc tính/giá trị Ví dụ, sau đây định nghĩa một thành phần textfield:
'#type' => 'textfield', '#title' => t('bar'), '#default_value' => $object['foo'], '#size' => 60,
− Thu c tính name c a thành ph n đ c khai báo trong m ng $form và n m cu i m ng
− Ki u c a thành ph n form đ c khai báo qua thu c tính #type
− Các khóa thu c tính đ c khai báo trong d u [], giá tr c a khóa có ki u xâu
− Th t khai báo các thu c tính không quan tr ng M t s thu c tính có giá tr m c đnh
− Không nên s d ng thu c tính #value cho các thành ph n có th thay đ i b i ng i dùng thay vào đó nên s d ng thu c tính #default_value
Form API cho phép tùy chỉnh giao diện của từng form, bao gồm cả việc thay đổi riêng lẻ các thành phần trong form Việc tùy chỉnh này có thể được thực hiện bằng cách nhập các thành phần giao diện tại thời điểm tạo form.
Thêm thu tính #theme vào form nhằm tạo thành phần cho form đó Các th đánh dấu có thể là #prefix, #suffix hoặc #markup Điều này được sử dụng để xác định vị trí các đoạn mã thiết lập giao diện trong form.
'#type' => 'fieldset', '#title' => t('Access log settings'), '#prefix' => '', '#suffix' => '',
Ghép các đo n mã c a t ng thành ph n trong form đ hi n th ra trang web b c này hàm drupal_render( ) đ c g i
API Form có chức năng kiểm tra dữ liệu đầu vào và thực hiện trên tất cả các form đã được định nghĩa Ngoài các hàm có sẵn, nhà phát triển còn có thể tạo ra các hàm kiểm tra theo ý muốn Tên hàm cần được đặt theo nguyên tắc _validate, với hai tham số là $form và $form_state Trong đó, $form là mảng chứa khai báo của form.
$form_state[‘value’] ch a giá tr c n ki m tra Ví d : function test_form_validate($form, &$form_state) { if ($form_state['values']['name'] == '') { form_set_error('', t('You must select a name.'));
To process a form in Drupal, you utilize a function A form is submitted via a submit button with the attribute type set to 'submit', which triggers the associated function For example, the function `test_form_submit($form, &$form_state)` can be used to execute a database query that inserts data into a specified table.
$form_state['values']['access']['log'],
$form_state['values']['hidden']); drupal_set_message(t('Your form has been saved.'));
Hàm g i d li u ch đ c g i khi nh n l nh t nút b m submit có ph ng th c POST và d li u đ c ki m tra h p l
T CH C L U TR C A DRUPAL
Trong Drupal, một node được xem là một đơn vị nội dung, và mỗi node riêng lẻ được coi là một thể hiện của đơn vị nội dung đó Node cũng được xem như một điểm đến dữ liệu, vì vậy mọi thông tin đều được lưu trữ trong node (ngoài trừ users, blocks, comments) Có nhiều loại node khác nhau, bao gồm các loại phổ biến như blog, poll, page, story và book Mặc dù mỗi loại nội dung được sử dụng là một loại node, nhưng thực chất, mỗi loại node đều là một kiểu trừu tượng của đơn vị nội dung.
T t c ki u n i dung đ u là node, chúng d a trên cùng ki n trúc d li u Do v y, giúp d dàng thao tác nh tìm ki m, t o m i, đi u ch nh, xóa và qu n lý n i dung trên node
Hình 1-4 Ki u node đ c b t ngu n t m t node c b n và có th thêm các tr ng
Các kiểu node được mở rộng trên một node cơ bản, cho phép thêm các thuộc tính dữ liệu riêng biệt Cụ thể, một node kiểu poll chứa các thuộc tính như số lượng phiếu bầu và ngày hết hạn của cuộc thăm dò Trong khi đó, một node kiểu book bao gồm thuộc tính parent, với node ID để xác định nội dung phù hợp cho mỗi node.
Mạng xã hội khác với blog ở chỗ không bổ sung thêm thuộc tính nào khác Thay vào đó, nó cung cấp các khung nhìn khác nhau cho dữ liệu bằng cách tạo ra các blog cho từng người dùng và cung cấp nguồn cấp dữ liệu RSS cho mỗi blog.
Hình 1-5 M i quan h gi a các b ng trong c s d li u c a Drupal
T t c các node có các thu c tính bên d i đ c ch a trong b ng c s d li u node và node_revisions:
− “nid”: Là unique ID (duy nh t) cho m t node
− “vid”: Là thu c tính khóa duy nh t cho m t node, giúp xác đ nh n i dung c a node_revisions vid là unique cho c node và node_revisions
− “type”: M i node có m t ki u node Ví d : blog, story, article, image, …
− “title”: Tiêu đ c a m t node cho phép chu i dài 128 ký t
− “uid”: Thu c tính khóa cho tác gi (author) M c đnh, m t tác gi có nhi u node
Giá trị bằng 0 có nghĩa là nội dung chưa được công bố và không thể truy cập bởi người dùng Trong khi đó, giá trị bằng 1 cho biết node đã được công bố và nội dung đó có thể được hiển thị và truy cập bởi người dùng.
− “created”: Cho bi t th i gian khi m t node đ c t o
− “changed”: Ghi nh n th i gian khi có s đi u ch nh cu i cùng
− “comment”: Có ki u integer, mô t tr ng thái các comment c a node, có 3 giá tr :
+ 0: Các comment b vô hi u hóa cho node hi n hành ây là giá tr m c đnh khi module comment đ c kích ho t
+ 1: Không cho phép thêm comment vào node hi n hành
+ 2: Các comment đ c hi n th và có th t o ra comment m i
− “promote”: M t tr ng ki u integer, xác đnh cho phép mô t node trên trang đ u hay không, v i 2 giá tr :
+ 1: Cho phép node hi n th trên trang đ u c a trang web Trang s ch a t t c các node mà có tr ng promote b ng 1, http:// example.com/?q=node là trang đ u m c đ nh
+ 0: Node s không đ c hi n th trang http://example.com/?q=node
− “moderate”: Có ki u integer, n u giá tr b ng 0 là moderate b vô hi u hóa và giá tr b ng 1 là cho phép moderate
Trong Drupal, tính năng "sticky" cho phép các node được đánh dấu xuất hiện đầu tiên trong danh sách trên trang hành vi Các node này sẽ được hiển thị trước, trong khi những node không được đánh dấu (unsticky) sẽ được sắp xếp theo ngày tạo ra.
1 là sticky và b ng 0 là unsticky Có th có nhi u node sticky v i m t danh sách gi ng nhau.
TÍNH AN TOÀN C A DRUPAL
An toàn đ i v i ng i dùng
Quản trị có thể quản lý người dùng thông qua việc cài đặt vai trò và quản lý tài khoản Vai trò cho phép điều chỉnh, bảo mật và quản trị hệ thống Mỗi vai trò có thể xác định một nhóm người dùng với các đặc quyền cụ thể, giúp định nghĩa trang điều khiển khi truy cập.
M c đnh h th ng có hai vai trò ng i dùng:
− Ng i dùng n c danh: Vai trò này đ c s d ng cho nh ng ng i dùng không có tài kho n ng i dùng ho c ch a đ c xác th c
− Ng i dùng đã xác th c: Vai trò này đ c t đ ng gán cho t t c nh ng ng i dùng đã đ ng nh p
Vim đóng vai trò quan trọng trong việc điều khiển truy cập tạng ngữ, cho phép quản lý các quyền hạn mà người dùng có thể thực hiện trong hệ thống Mỗi vai trò người dùng sẽ có một tập hợp các quyền hạn riêng biệt.
An toàn đ i v i mã ngu n
M c dù mã ngu n c a Drupal hoàn toàn có th xem và ch nh s a m t cách d dàng nh ng c ng có nh ng cách riêng đ ng n ch n nh ng m i nguy h i chính:
− Vi t đo n mã t n công b ng cách ki m tra d li u xu t h p l
− a câu truy v n SQL đ t n công b ng cách s d ng l p tr u t ng (database abstraction layer)
− Gi i h n truy c p node b lo i b b ng cách s d ng db_rewrite_sql
Cần sử dụng lớp trừu tượng cơ sở dữ liệu để bảo vệ mã SQL Không bao giờ nên trực tiếp sử dụng dữ liệu người dùng trong câu lệnh SQL Ví dụ, câu lệnh SQL không an toàn như: db_query('SELECT foo FROM {table} t WHERE t.name = ' $_GET['user']); cần được thay thế bằng phương pháp an toàn hơn.
30 db_query("SELECT foo FROM {table} t WHERE t.name = '%s' ", $_GET['user']);
Tính an toàn đ i v i d li u
Khi xử lý và xuất dữ liệu trong HTML, cần chú ý đến việc sàng lọc dữ liệu đầu vào Việc này rất quan trọng vì nếu không, người dùng có thể sử dụng các ký tự đặc biệt như nid;$result = db_query(db_rewrite_sql($sql)); while($linkfetch_array($result))
{ print "" $link['title']
B c 3: Ch n Style hi n th là Bulk Operations
111 Hình 4-57 Hi n th theo Bulk Operations
B c 4: T o Menu qu n tr (Site building / Menus / Navigation / Add item)
III.3.2.1 Xây d ng khóa h c ơ T o khúa h c
− B c 1: T i ph n qu n tr h th ng Click ch n Khóa h c → Thêm/s a các khóa h c
− B c 2: T o chuyên m c m i Click ch n Thêm m c m i T o khóa h c m i
114Hình 4-61 Khai báo và mô t m c m i
Khóa học B c 3 tại ĐH D ng được thiết kế theo chương trình học tập có hệ thống, cho phép sinh viên tiếp tục học các môn học nâng cao sau khi hoàn thành các môn học trước đó.
Hình 4-63 mô tả cách thiết lập khóa học theo điều kiện tiên quyết: Chương 2 chỉ có thể được truy cập khi Chương 1 đã hoàn tất Để thực hiện điều này, cần chỉnh sửa Restrict Access và điều kiện hoàn thành hoạt động, yêu cầu Chương 1 phải được đánh dấu là đã hoàn thành.
117 Hình 4-64 Activity completion condition o D ng theo tu n h c: Ch đ ng th i gian h c theo quy đnh c a giáo viên
Hình 4-65 cho thấy cách thiết lập khóa học theo tuần, cho phép các học viên tiếp cận nội dung học tập dựa trên ngày quy định Việc này được thực hiện thông qua việc chỉnh sửa trong phần Restrict Access với tùy chọn Allow Access From: Ngày quy định.
Hình 4-66 Allow access form o D ng theo chu n SCORM: H tr h c theo gói SCORM
Hình 4-67 M t khóa h c theo chu n SCORM
120 thêm các tài nguyên c ng nh ho t đ ng cho khóa h c tr c tiên ph i bât ch đ ch nh s a
Hình 4-69 Sau khi b t ch đ ch nh s a ơ T o n i dung khúa h c
3.2.1.1 Tài nguyên khóa h c
Bao g m các hình th c th hi n n i dung d i đây:
− Label: Dùng đ so n th o tiêu đ c a m t ch ng, m t bài h c, hay m t n i dung nào đó…
− Page: Cho phép t o ra m t trang v i đnh d ng màu ch , font, b ng,…dùng đ ch ng trình khóa h c, th i gian h c, h ng d n h c t p, m c tiêu,…
− File: Cho phép upload file lên khóa h c
− URL: Cho phép t o các liên k t đ n m t file nào đó trong h th ng ho c liên k t t i m t đ a ch web
− Folder: Cho phép hi n th th m c tài nguyên
− IMS Content Package: Cho phép upload các gói h c chu n SCORM,… ơ Page: Gi i thi u v khúa h c, c ng, L ch h c
Hình 4-70 Tài nguyên d ng Page ơ Folder: Tài li u tham kh o, Nhi m v cho sinh viờn
Hình 4-71 Tài nguyên d ng Folder
Th m c s ch a các file dành cho sinh viên download
Hình 4-72 Bài t p cho sinh viên ơ IMS Content Package (gúi SCORM)
3.2.1.2 Ho t đ ng khóa h c
N i trao đ i, th o lu n các v n đ h c t p, gi i đáp các th c m c c a sinh viên và nh m t o môi tr ng h c t p n ng đ ng cho sinh viên
Hình 4-74 Di n đàn th o lu n thêm m t ch đ m i, Click ch n Thêm m t ch đ m i và cung c p thông tin ch đ c n th o lu n: Tiêu đ , n i dung, file đính kèm
Hình 4-75 T o ch đ th o lu n m i ơ H i đỏp tr c tuy n
Vi c t ng tác gi a ng i dùng v i nhau trong m t th i gian th c
T o m t ho t đ ng th m dò ý ki n ng i dùng đ giáo viên có th thu th p thông tin và làm cho khóa h c hoàn thi n h n
Hình 4-79 K t qu th m dò ơ N p bài
Giáo viên t o m c N p bài cho sinh viên và thi t l p các thông s sau: T i gian n p, Có cho phép n p tr hay không, i m cho bài t p, Dung l ng upload file…
127Hình 4-80 Thi t l p thông tin n p bài t p Sinh viên n p bài t p b ng cách Click ch n n p bài Sau đó Upload file bài t p
3.2.1.3 Các block c a khóa h c
3.2.2.1 T o câu h i
− Giáo viên có th t ch c thi c b ng cách thêm m t ho t đ ng “ thi”
− Sau đó s xu t hi n màn hình sau, giáo viên có th thêm câu h i b ng cách “Add a question” ho c có th thêm câu h i t “Ngân hàng câu h i” vào “đ thi”
− thêm câu h i vào đ thi ta nh n bi u t ng “