Phân tích và thiết kế
Khảo sát hiện trạng
Magenweb là một công ty kinh doanh lĩnh vực thiết kế website và cung cấp các giải pháp Digital Marketing: Seo, Google Ads, Facebooks Ads, PR online, Forum Seading … và các sản phẩm công nghệ thông tin khác Magenweb đã cung cấp dịch vụ tới rất nhiều khách hàng trong nước và khách hàng nước ngoài như Hoa Kỳ, Pháp, New Zealand Website công ty:http://www.magenweb.com/
Công ty Magenweb tổ chức thành nhiều phòng ban Mỗi phòng đảm nhận nhiệm vụ, chức năng riêng Phòng kinh doanh có chức năng tìm kiếm khách hàng, thuyết phục khác hàng sử dụng các dịch vụ mà công ty cung cấp Phòng dự án có chức năng triển khai các dự án của công ty đã ký hợp đồng Phòng hành chính có chức năng quản lý nhân sự, giải quyết các thủ tục hành chính liên quan chính sách của công ty
Qui trình hoạt động trong việc tìm kiếm khách hàng và lập dự án như sau: công ty có đội ngũ nhân viên đảm nhiệm công việc liên hệ và trao đổi thông tin với khách hàng, tìm hiểu yêu cầu của bên khách hàng, lập danh sách các thông tin về khách hàng để dễ dàng cho việc trao đổi Khi khách hàng có nhu cầu thì đội ngũ nhân viên cùng với ban lãnh đạo sẽ để xuất dự án khả thi để cho khách hàng nắm tương đối công việc của hai bên cần phải làm, khi thấy dự án khả quan, và khách hàng đồng ý với chất lượng làm việc của công ty thì cả hai bên sẽ tiến hành tiến tới ký hợp đồng và đưa dự án chính thức vào thực hiện Khi dự án đã được hoàn thành và nghiệm thu mà không phát sinh ra bất cứ lỗi gì thì nhân viên kinh doanh có nhiệm vụ chăm sóc và hỗ trợ cho khách hàng để đảm bảo quá trình hợp tác giữa hai bên sẽ lâu dài hơn
Những khó khăn công ty Magenweb đang gặp phải:
Công ty thường sẽ chạy tại một thời điểm rất nhiều dự án Vì vậy làm sao để người quản lý có thể kiểm soát được tình hình dự án đang đến giai đoạn nào, chi phí và nhân sự tham gia dự án ra sao, một nhân viên có thể thực hiện được bao nhiêu dự án trong một khoảng thời gian…v.v
Khi có một yêu cầu báo cáo về dự án được đặt ra, làm sao để nhân viên có được những thông tin nhanh nhất và chính xác phục vụ cho yêu cầu báo cáo của cấp trên
Làm sao kiểm soát hoạt động của nhân viên tham gia dự án? Làm sao để biết được nhân viên đó đã tham gia một dự án hay nhiều dự án
Trước những vấn đề trên cần một phần mềm có thể giải quyết các khó khăn đó
Sau khi khảo sát hiện trạng, phân tích nắm được những thông tin như sau:
- Trong công ty có những nhân viên bán hàng làm nhiệm vụ tìm kiếm liên hệ với các khách hàng, sau khi có được thông tin của khách hàng cũng như các yêu cầu của khách hàng, nhân viên bán hàng sẽ tiến hành tổng hợp lại các thông tin về hợp đồng mà khách hàng yêu cầu để đưa lên cấp trên
- Cấp trên khi nhận thấy có thể ký kết được hợp đồng sẽ tiến hành lập các thông tin về dự án sắp tới lên hệ thống của công ty
- Khi bắt đầu triển khai dự án thực tế, người quản lý sẽ vào phần mềm và tạo các thông tin về dự án sắp được triển khai Khi lên dự án mới có thể dự tính được chi phí cho dự án đó, cũng như có thể quản lý thời gian làm việc của các nhân viên trong dự án đó, thêm các nhân viên để tham gia dự án Người quản lý cùng với nhân viên kế toán đưa ra các hóa đơn dự tính cho dự án đang được triển khai
Chương trình xây dựng nhằm mục đích phục vụ công việc quản lý khách hàng
Bao gồm nghiệp vụ chính sau:
- Phân quyền đến từng vai trò của nhân viên Đây là một chương trình có nhiệm vụ xây dựng hệ thống quản lý quan hệ khách hàng nhằm tin học hóa các nhiệm vụ cho công ty magenweb
Trong phần này, xây dựng một hệ thống lưu trữ cơ sỡ dữ liệu phù hợp với nhu cầu, hỗ trợ các công việc trên.
Yêu cầu tin học hóa
Quy mô công ty ngày càng mở rộng, việc quản lý và tìm kiếm các thông tin về khách hàng, dự án, công việc… càng phức tạp Nhu cầu tương tác giữa các nhân viên, nhân viên với quản lý thường xuyên, bất cứ khi nào, ở đâu Ngoài ra, chương trình phải tiện lợi, đơn giản, dễ hiểu, dễ thao tác
- Quản lý tất cả khách hàng của công ty, các giao dịch với khách hàng của từng nhân viên
- Quản lý các dự án, nhân viên tham gia dự án, tiến độ từng dự án
- Quản lý công việc đã giao, xem báo cáo từng công việc, tiến độ từng công việc
- Quản lý danh sách hợp đồng, tình trạng thanh toán
- Quản lý tập khác hàng của mình chăm sóc, xem lịch giao dịch với từng khách hàng
- Các nhân viên liên quan có thể theo dõi tiến độ dự án
- Lên lịch thực hiện các công việc được giao
- Chia sẻ thông tin, tài liệu giữa các nhân viên, quản lý
Khách hàng: Tìm kiếm thông tin khách hàng, các giao dịch đã thực hiện, lịch hẹn với khách hàng
Dự án: Thông tin về dự án, thời gian hoàn thành
Công việc: Các thông tin về công việc được giao, đã giao, tình trạng công việc
Khác: Các thông tin về hợp đồng, nhân sự, tài liệu, tin tức nội bộ …
Khách hàng: Hệ thống lưu trữ tất cả thông tin về khách hàng như họ tên, địa chỉ, số điện thoại …
Dự án: Dữ liệu thông tin về dự án như tên dự án, loại dự án, nhân viên phụ trách
Trong đó các thao tác trên dự án như thêm khách hàng, thêm nhân viên phụ trách
Công việc: Hệ thống lưu trữ công việc được giao của từng nhân viên Bao gồm các thông tin tên công việc, loại công việc, người thực hiện, thời gian giao việc, thời gian hoàn thành, tình trạng công việc …
Hợp đồng: Dữ liệu quản lý các thông tin về hợp đồng Khác: Hệ thống lưu trữ thông tin về nhân sự, tin tức, tài liệu chia sẻ, tài liệu liên quan dự án, hợp đồng …
Quyền: Hệ thống lưu trữ các thông tin về quyền của nhân viên khi đăng nhập hệ thống
Tính toán Kết xuất Hiển thị khách hàng theo phân loại, theo khu vực
Hiền thị hợp đồng theo tình trạng, loại hợp đồng
Hiển thị danh sách dự án theo năm, tình trạng, nguồn vốn
Báo cáo thanh toán theo từng hợp đồng, từng giai đoạn.
Cách tiếp cận và giải quyết vấn đề
Dùng phương pháp hướng đối tượng để tiếp cận vấn đề rõ hơn, tạo khung nhìn tổng thể của vấn đề
Có nhiều cách để giải quyết vấn đề Nhưng ở đây, luận văn chọn phân tích thiết kế hướng đối tượng bằng ngôn ngữ UML – Unified Modeling Language để giải quyết vấn đề đặt ra Gồm các bước sau:
Bước 1: Mô hình hóa nghiệp vụ:
Dựa trên khảo sát thực trạng, luận văn sử dụng các công cụ của UML để mô hình hóa các nghiệp vụ
Bước 2: Phân tích: Ở bước này, luận văn phân tích để đưa ra những mô hình tổng quát quan sát trạng thái tĩnh của các nghiệp vụ, quy trình của mỗi nghiệp vụ và các Actor (tác nhân) Sử dụng các công cụ của UML
Từ kết quả ở mức phân tích, triển khai thiết kế để đạt được các kết quả sau:
Thiết kế cơ sở dữ liệu
Phân tích thiết kế
Người sử dụng thuộc nhóm quyền này có quyền tạo user, tạo role, phân quyền, quản trị danh mục hệ thống (xem, sửa, xóa danh mục)
Người thuộc nhóm quyền này có toàn quyền truy xuất những chức năng trong hệ thống
Người dùng đăng nhập chương trình thuộc nhóm này chỉ có thể thấy và truy xuất được chức năng sau:
- Đổi mật khẩu của mình
- Xem danh sách nhân sự
- Sửa thông tin khách hàng
- Xem các khách hàng do mình nhập
- Thêm giao dịch với khách hàng
- Thêm tin tức nội bộ
- Xem tài liệu được chia sẻ
- Gửi tin nhắn tới tất cả user trong hệ thống
Người dùng đăng nhập chương trình thuộc nhóm này chỉ có thể thấy và truy xuất được chức năng sau:
- Đổi mật khẩu của mình
- Xem danh sách nhân sự
- Xem danh sách cv của mình
Người dùng đăng nhập chương trình thuộc nhóm này chỉ có thể thấy và truy xuất được chức năng sau:
- Xem danh sách hợp đồng
- Xem danh sách thanh toán
- Xem danh sách nhân sự
2.4.2 Use Case Diagram và các sơ đồ hoạt động
Biểu đồ use case diagram của nhân viên quản trị hệ thống
Hình 2 1 : Biểu đồ use case của quản trị hệ thống
Đăng nhập Đặc tả use case:
Tác nhân: Nhân viên của công ty Mục đích: Cho phép nhân sự đăng nhập vào hệ thống Tiền điều kiện: Nhân viên đã được cấp tài khoản truy cập vào hệ thống
Hậu điều kiện: Use case thực hiện xong sẽ cho đăng nhập vào hệ thống
Hành động của tác nhân : Nhân viên
Hành động của hệ thống
1 Nhân viên nhập tên và mật khẩu
2 Hệ thống kiểm tra tên đăng nhập và mật khẩu đã hợp lệ hay chưa
A1 Đăng nhập không thành công quay về bước 1
A2 Đăng nhập thành công Hiển thị màn hình làm việc của nhân viên
Hình 2 2: Biểu đồ lớp tham gia UC “DangNhap”
Hình 2 3: Biểu đồ trình tự UC “DangNhap”
Tác nhân: Nhân viên Mục đích: Nhân viên có thể thay đổi mật khẩu đăng nhập Tiền điều kiện: Đã đăng nhập thành công vào hệ thống Hậu điều kiện: Mật khẩu được cập nhật lại
Hành động tác nhân: Nhân viên Hành động của hệ thống
1 Nhân viên chọn chức năng đổi mật khẩu
2 Hệ thống yêu cầu nhập mật khẩu mới
3 Nhân viên nhập mật khẩu mới và click vào lưu thông tin 4 Hệ thống xác nhận mật khẩu mới lưu thành công
Hình 2 4: Biểu đồ trình tự UC “đổi mật khẩu”
Tác nhân: admin Mục đích: Tạo tài khoản và lưu thông tin của nhân viên mới
Tiền điều kiện: Đã đăng nhập vào role admin Hậu điều kiện: User mới được khởi tạo Luồng sự kiện chính:
Hành động tác nhân: admin Hành động của hệ thống
1 Admin chọn tác vụ thêm nhân sự trên menu
2 Hệ thộng hiển thị form thêm mới nhân sự
3 Admin điền các thông tin yêu cầu: Họ tên, ngày sinh, tên đăng nhập, mật khẩu, chọn role tương ứng cho nhân viên
Admin click vào save để lưu thông tin nhân sự
4.Hệ thống kiểm tra các thông tin được nhập
A1 Thông tin hợp lệ Hệ thống thông báo tác vụ thành công
A2 Thông tin không hợp lệ Hệ thống thông báo những trường nhập sai hoặc thiếu thông tin
Hình 2 5: Biểu đồ lớp tham gia ca sử dụng “Thêm mới người dùng”
Hình 2 6: Biểu đồ trình tự “Thêm người dùng”
2.4.3 Biểu đồ use case diagram của quản lý
Hình 2 7: Biểu đồ ca sử dụng của quản lý
2.4.4 Biểu đồ use case diagram của nhân viên bán hàng
Hình 2 8: Biểu đồ ca sử dụng nhân viên bán hàng
Tác nhân: Nhân viên bán hàng Mục đích: Lưu trữ thông tin khách hàng trên hệ thống Tiền điều kiện: Đã đang nhập vào hệ thống và quyền là sale Hậu điều kiện: Một khách hàng được thêm mới vào hệ thống Luồng sự kiện chính:
Hình động: Nhân viên bán hàng Hành động của hệ thống
1 Nv chọn chực năng thêm mới
2 Hệ thống hiển thị form thêm mới
2 NV nhập đầy đủ các trường yề cầu
3 Hệ thống kiểm tra A1 Thông tin hợp lệ -> KH được thêm mới vào hệ thống
A2 Thông tin không hợp lệ -> HT báo lỗi các trường không đúng
Hình 2 9: Biểu đồ lớp tham gia ca sử dung thêm mới khách hàng
Hình 2 10: Biểu đồ trình tự thêm mới khách hàng
Tác nhân: Nhân viên bán hàng
Mục đích: Cho phép nhân viên bán hàng lưu trữ thông tin giao dịch với khách hàng trên hệ thống
Tiền điều kiện: Đã đăng nhập vào hệ thống với vai trò nhân viên bán hàng Hậu điều kiện: Thông tin giao dịch khách hàng được lưu trên hệ thống Luồng sự kiện chính:
Hành động: NV bán hàng Hành động của hệ thống
1 NV chọn chức năng quản lý khách hàng
2 Màn hình danh sách khách hàng hiển thị
3 NV tìm kiếm khách hàng cần giao dịch
4 Hiển thị kết quả tìm kiếm
5 NV chọn tác vụ thêm giao dịch cho khách hàng được chọn
6 Hiển thị màn hình thêm giao dịch với khách hàng
7 Nv nhập các thông tin : thời gian hẹn, hình thức giao dịch …và click save
8 Hệ thống lưu lại cuộc giao dịch
Hình 2 11: Biểu đồ lớp tham gia ca sử dụng “thêm giao dịch”
Hình 2 12: Biểu đồ trình tự thêm mới giao dịch
8 hienThi : W_KH : TimKiem_KH : TimKiem_KH 16 thongBao() :
16 thongBao() : W_GiaoDich : QL_GiaoDich : QL_GiaoDich 14 Luu() : GiaoDich 14 Luu() : GiaoDich
4 Chon TK(maKH, dienthoai, loaiKH)
2.4.5 Biểu đồ use case diagram của nhân viên kỹ thuật
Hình 2 13: Biểu đồ ca sử dụng của nhân viên kỹ thuật
Tác nhân: Nhân viên kỹ thuật Tiền điều kiện: Đăng nhập vào hệ thống vai trò kỹ thuật Hầu điều kiện: Công việc được giao cho một nhân viên Thông tin công việc được lưu trữ trên hệ thống
Hành động : NV kỹ thuật Hành động của hệ thống
1 Chọn thêm mới công việc 2 Hệ thống hiển thị màn hình thêm mới công việc
3 Nhập thông tin công việc (tên công viêc, loại công việc, ngày hoan thành …)
4 Hệ thống kiểm tra thông tin A1: Thông tin hợp lệ
Công việc được lưu lại Hiển thị thông báo đã thêm mới công việc A2: Thông tin không hợp lệ Màn hình hiển thị thông báo lỗi
Hệ thống quay về bước 3
Hình 2 14: Biểu đồ lớp tham gia ca sử dụng “thêm mới công việc”
Hình 2 15: Biểu đồ trình tự thêm mới công việc
: Technical : Technical : W_Main : W_Main : W_CongViec : W_CongViec : QL_CongViec : QL_CongViec : CongViec : CongViec
1 Chon them moi cong viec
3 Nhap thong tin cong viec
2.4.6 Biểu đồ use case diagram của kế toán
Hình 2 16: Biểu đồ ca sử dụng nhân viên kế toán
Tác nhân: Nhân viên kế toán Tiền điều kiện: Đăng nhập vào hệ thống Hậu điều kiện: Thông tin hợp đồng được lưu trữ trên hệ thống Luồng dữ liệu chính:
Hành động : NV kế toán Hành động của hệ thống
1 NV chọn thêm mới hợp động 2 Hiển thị màn hình thêm mới hợp đồng
3 NV điền thông tin yêu cầu 4 Kiểm tra thông tin vừa nhập
- Hợp đồng lưu lại hệ thống
- Hiển thị thông báo thành công A2 Thông tin không hợp lệ
- Hiển thị thông báo lỗi
Hình 2 17: Biểu đồ lớp tham gia ca sử dụng “thêm mới hợp đồng”
Hình 2 18: Biểu đồ lớp chi tiết
Tổng quan về drupal
Lịch sử Drupal
Drupal được lập trình bởi Dries Buytaert, một lập trình viên mã nguồn mở, tạo ra theo dạng một hệ thống bảng tin vào năm 2000 Đến năm 2001, Drupal trở thành một công trình nguồn mở Hiện nay, Drupal có một cộng đồng rộng lớn đang giúp đỡ phát triển Drupal
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
Drupal có thể được sử dụng để xây dựng hầu hết các loại website, từ website cá nhân cho đến những ứng dụng bán hàng phức tạp
Drupal giúp người dùng có thể phát triển tính năng cách độc lập, đóng gói trong các module Hiện nay, ở drupal.org, cộng đồng đã đóng góp rất nhiều module với tập các tính năng đồ sộ Nếu sử dụng thành thạo các module được cộng đồng đóng góp, các ứng dụng web sẽ được phát triển nhanh hơn trên nền tảng Drupal
Ngoài ra, với kiến trúc module, người dùng có thể xây dựng các bản phân phối bằng cách liên kết các module, cung cấp các thiết lập mặc định để xây dựng nên các ứng dụng chạy trên nền Drupal đáp ứng được các nhu cầu cụ thể.
Bản quyền
Được cấp giấy phép GNU General Public Licece (GLU hay GPL)
3.3 Ƣu điểm và nhƣợc điểm a Ưu điểm
- Miền phí theo bản quyền GPL
- Nền tảng mạnh mẽ, ổn định, mã nguồn được tối ưu nâng cao hiệu suất hoạt động giúp tiết kiệm tài nguyên của hệ thống Là nền tảng vững chắc cho các website có lượng truy cập lớn như BBC England, MTV, website nhà trắng…Một trang báo công nghệ sử dụng Drupal khá thành công là trang Thông Tin Công Nghệ
- Cấu trúc linh hoạt giúp các lập trình viên mở rộng chức năng không hạn chế theo nhu cầu sử dụng
- Tính năng Multiple giúp bạn có nhiều website với một lần cài đặt Drupal Giúp bạn điều khiển và quản lý dễ dàng hơn
- Drupal chạy được cả trên server Linux và Windows b Nhược điểm
- Khó sử dụng với người dùng mới
- Triết lý “không tương thích ngược” của Drupal làm cho module phải được viết riêng cho từng phiên bản 4.x, 5.x, 6.x, 7.x và 8.0 tại cùng một thời điểm, Drupal chỉ hỗ trợ 2 phiên bản mới nhất Điều này làm cho người sử dụng e ngại phải nâng cấp liên tục khi dùng Drupal Cách bố trí của website Drupal khiến người mới sử dụng khó tìm kiếm và đánh giá nên dùng module nào
Drupal là hệ quản trị nội dung viết bằng ngôn ngữ PHP và sử dụng ngôn ngữ cơ sở dữ liệu quan hệ để lưu trữ (thông thường MySql) Mặc dù Drupal viết bằng ngôn 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 hướng đối tượng Tuy nhiên, nhìn một cách tổng quát thì Drupal vẫn áp dụng nguyên lý lập trình hướng đối tượng: tính đóng gói, kế thừa, đa hình … Kiến trúc Drupal có thể mô tả như hình sau:
Hình 3 1: Kiến trúc Drupal Ở trung tâm của kiến trúc là phần nhân gồm một tập các file chứa các đoạn mã nạp chương trình và các thư viện quan trọng Thư viện nhân drupal đóng vai trò như lớp kết nối các module Phần này cung cấp các dịch vụ như lớp kết nối và quản lý cơ sở dữ liệu, quản lý bộ khung hook, thư viện trừu tượng phục vụ mail và hình ảnh, hỗ trợ Unicode … Mặc dù thư viện 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
Module là bộ gồm mã PHP và các file hỗ trợ sử dụng API và kiến trúc của Drupal tích hợp các thành phần mới vào trong framework của Drupal
Cơ chế module của Drupal được thiết kế để cung cấp một cách thức đồng nhất giúp người phát triển mở rộng khả năng của hệ thống Những tệp tin tạo nên module được gộp vào một vị trí nhất định trong cấu trúc thư mục của Drupal Khi Drupal cần thông tin về module nào đó, nó sẽ tìm trong những thư mục này Mỗi module nằm ở một thư mục riêng và có ít nhất hai file: một file cung cấp thông tin về module và một file khác chứa mã PHP thực hiện chức năng của module đó Để một module sử dụng được thì nó phải được bật bởi người quản trị web Drupal sẽ chuyển các yêu cầu của người dùng tới module cần thiết
Là tập hợp các module được tích hợp sẵn trong Drupal 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ẽ làm mất các chức năng thiết yếu của Drupal 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
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
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 biến và các hàm cần 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ế
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 tạp Sử dụng hook thực chất là cách để người phát triển tương tác gián tiếp với bộ nhân của Drupall
3.4.4 Giao diện Đối với một hệ quản trị nội dung (CMS) trên nền web, sức mạnh xử lý không phải là tất cả Một CMS ở cấp độ thương mại cần phải cho phép người thiết kế có khả năng tùy chỉnh web với chế độ xem và cảm nhận mà họ mong muốn Drupal cung cấp một hệ thống giao diện mạnh mẽ để phục vụ mục đích này
Hệ thống giao diện Drupal khá phức tạp Giống như các module, giao diện được thiết kế sao cho nó 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 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 druapl 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 thời gian
Kiến trúc của Drupal
Drupal là hệ quản trị nội dung viết bằng ngôn ngữ PHP và sử dụng ngôn ngữ cơ sở dữ liệu quan hệ để lưu trữ (thông thường MySql) Mặc dù Drupal viết bằng ngôn 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 hướng đối tượng Tuy nhiên, nhìn một cách tổng quát thì Drupal vẫn áp dụng nguyên lý lập trình hướng đối tượng: tính đóng gói, kế thừa, đa hình … Kiến trúc Drupal có thể mô tả như hình sau:
Hình 3 1: Kiến trúc Drupal Ở trung tâm của kiến trúc là phần nhân gồm một tập các file chứa các đoạn mã nạp chương trình và các thư viện quan trọng Thư viện nhân drupal đóng vai trò như lớp kết nối các module Phần này cung cấp các dịch vụ như lớp kết nối và quản lý cơ sở dữ liệu, quản lý bộ khung hook, thư viện trừu tượng phục vụ mail và hình ảnh, hỗ trợ Unicode … Mặc dù thư viện 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
Module là bộ gồm mã PHP và các file hỗ trợ sử dụng API và kiến trúc của Drupal tích hợp các thành phần mới vào trong framework của Drupal
Cơ chế module của Drupal được thiết kế để cung cấp một cách thức đồng nhất giúp người phát triển mở rộng khả năng của hệ thống Những tệp tin tạo nên module được gộp vào một vị trí nhất định trong cấu trúc thư mục của Drupal Khi Drupal cần thông tin về module nào đó, nó sẽ tìm trong những thư mục này Mỗi module nằm ở một thư mục riêng và có ít nhất hai file: một file cung cấp thông tin về module và một file khác chứa mã PHP thực hiện chức năng của module đó Để một module sử dụng được thì nó phải được bật bởi người quản trị web Drupal sẽ chuyển các yêu cầu của người dùng tới module cần thiết
Là tập hợp các module được tích hợp sẵn trong Drupal 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ẽ làm mất các chức năng thiết yếu của Drupal 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
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
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 biến và các hàm cần 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ế
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 tạp Sử dụng hook thực chất là cách để người phát triển tương tác gián tiếp với bộ nhân của Drupall
3.4.4 Giao diện Đối với một hệ quản trị nội dung (CMS) trên nền web, sức mạnh xử lý không phải là tất cả Một CMS ở cấp độ thương mại cần phải cho phép người thiết kế có khả năng tùy chỉnh web với chế độ xem và cảm nhận mà họ mong muốn Drupal cung cấp một hệ thống giao diện mạnh mẽ để phục vụ mục đích này
Hệ thống giao diện Drupal khá phức tạp Giống như các module, giao diện được thiết kế sao cho nó 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 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 druapl 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 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.
Các khái niệm cơ bản trong Drupal
Drupal là một hệ quản trị 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 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
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 moduel 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, 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 thành phần:
- Ngày tạo và ngày thay đổi, cùng với thông tin xác định người tạo trực tiếp node đó
- Dữ liệu meta như trạng thái xuất bản, ngôn ngữ được sử dụng và các bản dịch sang ngôn ngữ khác
Một kiểu đối tượng quan trọng khác trong Drupal là user User được lưu trữ trong cơ sở dữ liệu và được lấy ra trong quá trình xử lý 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 blog
Truy xuất và bảo mật
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à quyền được cấp phát hoặc thu hồi qua vai trò đó
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
Một khái niệm quan trọng trong Druapl là Block Block 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 nhau
Drupal có một hệ thống menu 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 Hệ thống này thực hiện chức năng như một công cụ dùng để ánh xạ các URL tới chương trình điều khiển riêng Bằng cách sử dụng API thực đơn, người phát triển có thể liên kết các được dẫn tới hàm được định nghĩa trước
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ật tiện hơn nhưng đối với người lập trình có rất ít sự 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 cung cấp một giao diện lập trình linh hoạt giúp các 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
3.5.6 API cơ sở dữ liệu và bản đồ
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 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 được giới thiệu là API lược đồ, cho phép định nghĩa cấu trúc một cơ sở dữ liệu mà không 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.
Xử lý yêu cầu Drupal
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
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 bao gồm:
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_one() và sử dụng các biến được nạp chồng trước đó
Trong những trường hợp yêu cầu khả năng mở rộng hệ thống nâ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 đẫn của biến cache_inc
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
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 truy cập bị từ chối
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ý 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
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
Bước này hoàn thành quá trình khởi động bằng các nạp các thư viện và các hàm dùng chung, bộ giao diện, xử lý file, mã Unicode, bộ công cụ ảnh PHP, khở tạo và xử lý form… Đến đây, các module ở trạng thái bật cũng được nạp Cuối cùng, Drupal gọi hook có tên init để các thông báo đến các module trước khi quá trình xử lý yêu cầu chính thức bắt đầu
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ý
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 đó
3.6.3 Giao diện hóa nội dung
Việc giao diện hóa 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.
Xây dựng module trong Drupal
Cấu trúc của module có thể gồm nhiều tập tin khác nhau nhưng phải có ít nhất 2 tệp tin sau: .info và .module Trong đó là tên thư mục chứa module được tạo, tên này không được trùng với tên module khác trong hệ thống
File chứa các thông tin cơ bản về module Một số thành phần trong Drupal sẽ sử dụng thông tin trong file này để quản lý module
File info được viết theo kiểu file PHP ini – một định dạng file sử dụng cho việc xác định các thiết lập Nội dung một file info có thông tin sau:
Description= “Mô tả về module”
File module là file quan trọng nhất trong module, chứa đoạn mã PHP thực hiện chức năng của module đó File này thông thường mở rộng một số hàm hook mà Drupal gọi tới trong thời điểm nhất định với một yêu cầu
Nội dung file module bắt đầu bằng thẻ “” Việc này tránh in ký tự trống đượ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ẽ xuất hiện lỗi trên đầu trang.
So sánh Drupal với hệ quản trị nội dung khác
Vì Drupal và Joomla là hai hệ quản trị nội dung web được đánh giá là dẫn đầu so với hệ quản trị nội dung khác Cho nên tôi sẽ so sánh hai CMS, để thấy điểm mạnh của Drupal
- Là hệ quản trị nội dung miễn phí và mã nguồn mở
- Sử dụng ngôn ngữ PHP và có thể tương thích với nhiều hệ điều hành khác nhau
- Dễ sử dụng, phát triển và có hiệu năng cao nhờ bộ nhớ đệm caching
- Có tính bảo mật tốt Khác nhau:
Hạt nhân của drupal là node – cấu trúc đơn giản
Theo triết lý của Joomla, đơn vị dữ liệu cơ bản là content item chứa trong category, category được chứa trong section Do đó, dữ liệu trong Joomla tổ chức thành 3 cấp Để phát triển các kiểu nội dung phức tạp, mỗi node sẽ được liên kết với một nội đung khác nhau Node được quản lý nhờ hệ thống taxonomy, đây cũng là đặc trưng của Drupal
Không có nền tảng để hỗ trợ các kiểu dữ liệu phức tạp hơn Do đó, cách tổ chức rất logic và không gây rắc rối cho người dùng mới
Drupal được xây dựng để giúp đỡ cho nhà phát triển Hệ thống hook đa dạng giúp người lập trình can thiệp vào mọi hoạt động mà không phải sửa bất kì dòng lệnh nào của nhân hay các phần khác
Do Joomla được thiết kế dành cho người dùng cuối, nên không cung cấp nhiều phương tiện can thiệp vao hoạt động bên trong
Kiến trúc nhỏ gọn Kiến trúc cồng kềnh
Hỗ trợ phân quyền cho nhóm người dùng
Không hỗ trợ phân quyền người dùng
Có thể làm việc với nhiều hệ quản trị cơ sở dữ liệu: Mysql, Postgres Sql …
Chỉ làm việc với Mysql
Có thể làm việc Apache hoặc IIS Chỉ làm việc với Apache
Xây dựng hệ thống
Module Account
Trong quá trình xây dựng module này, tôi đã sử dụng lại 3 module do cộng đồng Drupal phát triển là module Content có trong gói CCK (content contruction kit), Example fields và Views Module Content cho phép người quản trị tạo các kiểu nội dung mới Module Example fields được dùng để thêm các trường thông tin cho bài viết Module Views cho phép người quản trị lọc và hiển thị dữ liệu theo ý muốn
Tạo bảng dữ liệu account bao gồm các trường dữ liệu như trong bảng Nhân Sự trong biểu đồ lớp chi tiết: họ tên, giới tinh, di động, địa chỉ, ngày sinh, chức vụ, ngày bắt đầu công việc … Để tạo bảng trong drupal, Structure > Content types > Add content type Từ giao diện này, chúng ta tạo các trường dữ liệu như trong bản thiết kế:
Sau khi có tạo bảng dữ liệu, Drupal cung cấp form thêm mới account bao gồm các trường đã tạo ở trên:
Hình 4 1: Giao điện thêm mới nhân viên
Giao diện màn hình ListView của module Account bao gồm các thông tin như: Họ tên, địa chỉ, ngày sinh, di động, Email, tình trạng làm việc, tên đăng nhập Dưới đây là câu query dùng để lấy dữ liệu từ database:
Bên cạnh đó, tôi tạo các block có chức năng tìm kiếm theo tên, tình trạng công việc, phòng ban Để làm việc này, tôi đã sử dụng các hook drupal cung cấp.Cụ thể, trong module này tôi đã sử dụng hook_block_info() và hook_block_view() để tạo block lọc dữ liệu:
Sau khi hoàn thành, chúng ta được giao diện hiển thị danh sách nhân sự như hình vẽ dưới:
Hình 4 2: Giao diện danh sách nhân viên
Module Custommer
Tương tự như module Account, tạo bảng dữ liệu Liên Hệ và bảng Giao Dịch để lưu trữ thông tin khách hàng và các giao dịch đã thực hiện với khách hàng
Trong module này, chúng ta xét quyền cho từng bản ghi được lưu trữ (nhân viên chỉ được xem khách hàng mà nhân viên đó nhập vào hệ thống) Để làm được điều này, tôi lưu thông tin người nhập vào bảng khách hàng Tôi đã sử dụng hook_node_presavek, hook_node_insert, hook_node_update để thêm thông tin người nhập dữ liệu
Giao diện màn hình ListView bao gồm các thông tin về khách hàng: tên khách hàng, thông tin liên hệ, giao dịch gần nhất Chức năng tìm kiếm nâng cao theo: từ khóa, tên khách hàng, ngày tạo, địa bàn Ngoài ra, người dùng có thể thêm giao dịch với khách hàng, thêm dự án hoặc sử thông tin khách hàng
Hình 4 3: Giao diện danh sách khách hàng
Hình 4 4: Giao diện thêm mới giao dịch với khách hàng
Hình 4 5: Giao diện sửa thông tin khách hàng
Moudle Projects
Làm tương tự như các module trên, module Project được thiết kế để lưu trữ thông tin dự án của công ty bao gồm các trường như trong hình vẽ:
Hình 4 6: Thêm mới dự án
Hình 4 7: Danh sách dự án
Module Task
Module Task có chức năng giúp người quản lý giao việc cho nhân viên, kiểm soát công việc được giao Nhân viên có thể xem chi tiết công việc được giao Báo cáo tiến độ công việc thực hiện cho người quản lý Để xử lý chức năng trên, tôi gán quyền xem cho người tạo, người thực hiện và người liên quan khi tạo node công việc
Ngoài ra, module còn tính toán ngày thực hiện và so sánh ngày hiện tại để hiển thị tình trạng công việc, giúp người quản lý nắm rõ tiến độ từng dự án Tất cả các chức năng này, đểu được xử lý trong module task nằm ở thư mục : Sites > all > modules > vinno_cong_viec
Hình 4 8: Giao diện danh sách công việc
Hình 4 9: Giao diện giao việc cho nhân viên
Module contract
Module contract được thiết kế để lưu trữ thông tin hợp đồng của công ty Người quản trị có quản lý các hợp đồng, xem tình trạng hợp đồng, thêm kế hoạch nghiệm thu của hợp đồng Mỗi khi thêm node nghiệm thu, hợp đồng tự động cập nhập thông tin
Giao diệnmàn hình listView bao gồm các thông tin hợp đồng: Loại hợp đồng, tên hợp đồng, khách hàng, giá trị, tình trạng …Ngoài ra, màn hình hiển thị tác vụ cho phép thêm nhanh thanh toán trên từng hợp đồng Ở module này, tôi sử dụng module views popup do cộng đồng Drupal phát triển Module này cho phép hiển thị form thêm mới thanh toán ngay trên màn hình listView hợp đồng Cách gọi form popup như sau:
Hình 4 10: Danh sách hợp đồng
Hình 4 11: Thêm mới hợp đồng