Nếu bạn sử dụng hệ thống node revision, Drupal sẽ tạo một revision chứa thông tin về người cuối cùng thay đổi nó.. Tạo một node Về mặt truyền thống, khi bạn muốn tạo một kiểu nội dung mớ
Trang 1Lời cảm ơn
Chúng em xin chân thành bày tỏ lòng biết ơn đến cô Lê Thị Ngọc Thảo, người đã tận tình hướng dẫn chúng em trong suốt quá trình thực hiện tiểu luận tốt nghiệp
Chúng em xin cảm ơn các thầy cô giáo, các bạn trong khoa Công Nghệ Thông Tin của trường Đại học Tôn Đức Thắng đã giúp đỡ chúng em trong thời gian học tập
Cuối cùng, chúng em xin gửi lòng biết sâu sắc đến cha mẹ, người thân đã tạo điều kiện thuận lợi và động viên hỗ trợ chúng em trong những lúc khó khăn cũng như trong suốt thời gian học tập và nghiên cứu
Nhóm sinh viên thực hiện
Trang 2Lời Mở Đầu
nhiều lĩnh vực đã được tin học hóa nhằm phục vụ và hỗ trợ cho con người một cách tối đa trong đó phải kể đến sự phát triển của mạng Internet
Trước đây, khi ngành công nghệ thông tin chưa phát triển, các nhà kinh doanh thực hiện giao dịch buôn bán trực tiếp với khách hàng, điều đó đã gây ra không ít trở ngại cho việc phát triển kinh doanh như về khoản cách địa lý, giới thiệu những sản phẩm mới…Về phía khách hàng phải tốn khá nhiều thời gian cho việc tìm hiểu
và đến các cửa hàng để có thể mua được sản phẩm mình cần, các sản phẩm tập trung trong một cửa hàng không nhiều sự lựa chọn
một trong những tiện ích quan trọng của công nghệ thông tin
Đối với các nhà kinh doanh, trong quá trình xây dựng và phát triển thương hiệu của mỗi doanh nghiệp, bên cạnh những phương tiện quảng cáo truyền thống như Tivi, báo, tạp chí thì Internet đóng vai trò quan trọng và là một phương tiện hiệu quả, tiết kiệm trong việc xây dựng nhận thức của người tiêu dùng đối với một thương hiệu
Sau khi phân tích nhu cầu thực tế, chúng em đã ứng dụng những kiến thức đã học về CNTT để xây dựng Website bán mỹ phẩm Mục đích hỗ trợ cho các doanh nghiệp nhằm tăng hiệu quả trong việc kinh doanh ngoài ra còn giúp cho giới làm đẹp có thêm nhiều kiến thức và sự lựa chọn
Mặc dù đã được sự hướng dẫn tận tình của giảng viên bộ môn trong suốt quá trình thực hiện tiểu luận, với ý thức nghiêm túc mong muốn đạt được kết quả tốt nhất của nhóm nhưng do hạn chế về vốn kiến thức cũng như kinh nghiệm thực tế, chắc chắn chương trình sẽ còn nhiều thiếu sót Chúng em rất mong nhận được sự góp ý, chỉ dẫn của Thầy, Cô để Website bán mỹ phẩm có thể mở rộng và hoàn thiện hơn trong tương lai
Tiểu luận này gồm 5 chương:
Chương 1 Tổng Quan Về Drupal: Giới thiệu sơ lược Drupal, những ưu và
khuyết điểm Các ứng dụng thực tế và cách cài đặt
Trang 3Chương 2 Đặc Tả Đề Tài: Hiện thực tình trạng kinh doanh mỹ phẩm trên thị
trường hiện nay, từ đó xác định những yêu cầu cần thiết cho đề tài
Chương 3 Phân Tích Thiết Kế Hệ Thống: Phân tích tình hình thị trường mỹ
phẩm hiện nay Từ cơ sở đó phân tích và thiết kế hệ thống của Website
Chương 4 Hiện Thực Ứng Dụng: Hiện thực chức năng và CSDL, giới thiệu
những module được sử dụng
Chương 5 Tổng Kết, Đánh Giá Và Hướng Phát Triển: Đánh giá những kết
quả đã đạt được, những thiếu sót và hạn chế của tiểu luận Nêu hướng phát triển của
đề tài trong tương lai
Trang 4Mục lục
Lời cảm ơn 1
Lời Mở Đầu 1
CHƯƠNG 1 TỔNG QUAN VỀ DRUPAL 1.1 Giới thiệu Drupal 8
1.1.1 Hệ quản trị nội dung mã nguồn mở 8
1.1.2 Drupal 8
1.2 Mục đích phát triển 9
1.3 Ưu điểm 10
1.4 Khuyết điểm 10
1.5 Ứng dụng 10
1.6 Yêu cầu cài đặt DRUPAL 10
1.6.1 Web server 10
1.6.2 PHP phiên bản 4.3.3+ 10
1.6.3 MySQL và POSTGRESQL 10
1.7 Một số khái niệm trong DRUPAL 11
1.7.1 User 11
1.7.2 Role 11
1.7.3 Theme 11
1.7.4 Block 12
1.7.5 Node 14
1.7.6 Hook 18
1.7.7 Hệ thống menu trong Drupal 18
1.7.8 Form API trong Drupal 22
1.8 Các module hệ thống trong DRUPAL 30
1.8.1 Giới thiệu module 30
1.8.2 Các module hệ thống 30
1.8.3 Cấu trúc một module 31
1.8.4 Cách thức cài đặt thêm module 32
CHƯƠNG 2 ĐẶC TẢ ĐỀ TÀI 2.1 Phân tích thị trường kinh doanh mỹ phẩm hiện nay 33
2.2 Phân tích hiện trạng các công ty kinh doanh mỹ phẩm hiện nay 33
2.3 Phân tích hiện trạng hoạt động các website thương mại điện tử hiện nay 34
2.4 Xác định yêu cầu hệ thống 35
2.4.1 Đối tượng là khách mua hàng 35
2.4.2 Đối tượng là các doanh nghiệp kinh doanh 36
CHƯƠNG 3 PHÂN TÍCH THIẾT KẾ HỆ THỐNG 3.1 Xây dựng mô hình use-case 37
3.1.1 Xác định actor 37
3.1.2 Xây dựng mô hình use-case 38
Trang 53.2 Đặc tả use-case 39
3.2.1 Use-case đăng ký người dùng 39
3.2.2 Use-case đăng nhập 40
3.2.3 Use-case tra cứu thông tin chi tiết sản phẩm 41
3.2.4 Use-case tra cứu kiến thức làm đẹp 42
3.2.5 Use-case tìm kiếm sản phẩm theo chỉ mục 42
3.2.6 Use-case yêu cầu chuyên viên tư vấn làm đẹp 43
3.2.7 Use-case xem tin tư vấn 44
3.2.8 Use-case đặt hàng 44
3.2.9 Use-case quản lý sản phẩm giảm giá 45
3.2.10 Use-case quản lý sự kiện giảm giá 46
3.2.11 Use-case quản lý sản phẩm được tặng hàng 47
3.2.12 Use-case quản lý người dùng 48
3.2.13 Use-case quản lý giao diện người dùng 49
3.2.14 Use-case thống kê doanh thu cửa hàng 49
3.2.15 Use-case thống kê sản phẩm tồn kho 50
3.2.16 Use-case thống kê sản phẩm quá hạn 50
3.2.17 Use-case thống kê tình hình tiêu thụ sản phẩm 50
3.2.18 Use-case quản lý loại sản phẩm 51
3.2.19 Use-case thêm sản phẩm 52
3.2.20 Use-case sửa thông tin sản phẩm 52
3.2.21 Use-case xóa sản phẩm 53
3.2.22 Use-case quản lý đơn đặt hàng 53
3.2.23 Use-case tư vấn khách hàng 55
3.3 Xây dựng lược đồ tuần tự 55
3.3.1 Use-case đăng ký 55
3.3.2 Use-case đăng nhập 56
3.3.3 Use-case tra cứu thông tin chi tiết sản phẩm 57
3.3.4 Use-case tra cứu kiến thức làm đẹp 58
3.3.5 Use-case tìm kiếm sản phẩm theo chỉ mục 58
3.3.6 Use-case yêu cầu chuyên viên tư vấn làm đẹp 59
3.3.7 Use-case xem tin tư vấn 59
3.3.8 Use-case đặt hàng 59
3.3.9 Use-case quản lý sản phẩm giảm giá 61
3.3.10 Use-case quản lý sự kiện giảm giá 63
3.3.11 Use-case quản lý sản phẩm được tặng hàng 64
3.3.12 Use-case quản lý người dùng 66
3.3.13 Use-case thống kê sản phẩm 67
3.3.14 Use-case quản lý loại sản phẩm 67
3.3.15 Use-case thêm sản phẩm 69
3.3.16 Use-case sửa thông tin sản phẩm 70
3.3.17 Use-case xóa sản phẩm 70
3.3.18 Use-case quản lý đơn đặt hàng 71
3.3.19 Use-case tư vấn khách hàng 72
3.4 Thiết kế hệ thống 73
3.4.1 Thiết kế chức năng hệ thống 73
3.4.2 Thiết kế lớp ứng dụng 74
3.5 Thiết kế lớp đối tượng 76
Trang 63.5.2 Danh sách thuộc tính các lớp 78
3.6 Thiết kế cơ sở dữ liệu 83
3.6.1 Bảng quan hệ 83
3.6.2 Qui ước 83
3.6.3 Các bảng dữ liệu 83
CHƯƠNG 4 HIỆN THỰC ỨNG DỤNG 4.1 Khái quát 91
4.1.1 Các module được tích hợp sẵn 92
4.1.2 Các module được bổ sung 93
4.1.3 Các module được xây dựng thêm 93
4.2 Hiện thực chức năng 94
4.2.1 Các module được sử dụng lại 94
4.2.2 Các module được xây dựng thêm 96
4.3 Hiện thực CSDL 100
4.3.1 Hiện thực lược đồ quan hệ CSDL 101
4.3.2 Hiện thực bảng CSDL 102
4.4 Hiện thực giao diện website 111
4.4.1 Sơ đồ liên kết màn hình 111
4.4.2 Danh sách các màn hình 112
4.4.3 Mô tả chi tiết màn hình 112
7.1.1 Màn hình liệt kê đơn đặt hàng 126
7.1.2 Màn hình cập nhật đơn đặt hàng 126
7.1.3 Màn hình xóa đơn đặt hàng 127
7.1.4 Màn hình tạo đơn đặt hàng 127
7.1.5 Màn hình tạo tìm kiếm đơn đặt hàng 128
7.1.6 Màn hình tạo người dùng mới Error! Bookmark not defined 7.1.7 Màn hình phân quyền vai trò người dùng Error! Bookmark not defined 7.1.8 Màn hình quản lý người dùng Error! Bookmark not defined 7.1.9 Màn hình tạo vai trò mới Error! Bookmark not defined 4.5 Sử dụng chương trình 131
4.5.2 Giới thiệu website 131
4.5.3 Hướng dẫn cài đặt 131
4.5.4 Hướng dẫn sử dụng 131
CHƯƠNG 9 TỔNG KẾT, ĐÁNH GIÁ VÀ HƯỚNG PHÁT TRIỂN 9.1 Tổng kết 129
9.2 Đánh giá 129
9.3 Hướng phát triển 130
Trang 7Danh mục hình ảnh
Hình 1.1 drupal và joomla 9
Hình 1.2 Nội dung mã nguồn của Drupal <Nguồn: ohloh.> 9
Hình 1.3 Trang cấu hình block 13
Hình 1.4 Giản đồ database cho block 14
Hình 1.5 Những kiển node lấy từ một node cơ 16
Hình 1.6 Bảng quyền truy cập của user với các khóa access 20
Hình 1.7 Bảng mô tả các cờ (flag) của menu-item 20
Hình 1.8 Bảng cờ của MENU_NORMAL_ITEM 21
Hình 1.9 Quá trình xử lý form 22
Hình 1.10 Quá trình xử lý form 2 23
Hình 3.1 Lược đồ Usecase của người dùng thường 38
Hình 3.2 Lược đồ Usecase của khách hàng 38
Hình 3.3 Lược đồ Usecase của nhân viên bán hàng 39
Hình 3.4 Lược đồ Usecase của cửa hàng trưởng 39
Hình 3.1 Cấu trúc hệ thống 75
Hình 3.2 Lược đồ lớp thực thể 77
Hình 3.3 Bảng quan hệ cơ sở dữ liệu 83
Hình 4.1 Sơ đồ liên kết các màn hình 111
Hình 4.2 Màn hình giao diện chính của website 113
Hình 4.3 Màn hình đăng ký tài khoản 115
Hình 4.4 Màn hình đăng nhập 115
Hình 4.5 Màn hình tra cứu thông tin chi tiết sản phẩm 114
Hình 4.6 Màn hình xem thông tin nghệ thuật làm đẹp 116
Hình 4.7 Màn hình khách hàng đặt câu hỏi 117
Hình 4.8 Màn hình xem trả lời của chuyên viên 117
Hình 4.9 Màn hình đóng góp ý kiến về sản phẩm 118
Hình 4.10 Màn hình xem thông tin cửa hàng 118
Hình 4.12 Màn hình xem giỏ hàng 121
Hình 4.13 Màn hình chọn phương thức thanh toán 121
Hình 4.14 Màn hình xem đơn đặt hàng 122
Hình 4.15 Màn hình tạo sản phẩm mới 123
Hình 4.16 Màn hình sửa thông tin sản phẩm Error! Bookmark not defined Hình 4.17 Màn hình xóa thông tin sản phẩm 124
Hình 4.18 Màn hình thêm loại sản phẩm Error! Bookmark not defined Hình 4.19 Màn hình thêm nơi sản xuất 124
Hình 4.20 Màn hình trả lời câu hỏi của khách hàng 125
hình 4.21 Màn hình chỉnh sửa nội dung sản phẩm 125
Hình 1.11 Màn hình liệt kê đơn đặt hàng 126
Hình 1.12 Màn hình cập nhật đơn đặt hàng 126
Hình 1.13 Màn hình xóa đơn đặt hàng 127
Hình 1.14 Màn hình tạo đơn đặt hàng mới 127 Hình 1.15 Màn hình tạo người dùng mới Error! Bookmark not defined
Hình 1.16 Màn hình tạo vai trò mới Error! Bookmark not defined
Trang 8Danh mục các bảng dữ liệu
3.5.2.1. Lớp MAUSAC 78
3.5.2.2. Lớp MUIHUONG 78
3.5.2.3. Lớp THUONGHIEU 79
3.5.2.4. Lớp HANGSANXUAT 79
3.5.2.5. Lớp NOISANXUAT 79
3.5.2.6. Lớp LOAISP 79
3.5.2.7. Lớp CTKHUYENMAI 80
3.5.2.8. Lớp TAIKHOAN 80
3.5.2.9. Lớp VAITRO 81
3.5.2.10. Lớp KHACHHANG 81
3.5.2.11. Lớp DONDATHANG 81
3.5.2.12. Lớp PHUONGTHUCTT 82
3.5.2.13. Lớp DIACHITT 82
3.5.2.14. Lớp SANPHAM 82
3.6.3.1. Bảng MAUSAC 83
3.6.3.2. Bảng MUIHUONG 84
3.6.3.3. Bảng LOAISP 84
3.6.3.4. Bảng NOISANXUAT 84
3.6.3.7. Bảng HANGSANXUAT 85
3.6.3.8. Bảng THUONGHIEU 85
3.6.3.9. Bảng CHUONGTRINHKHUYENMAI 85
3.6.3.10. Bảng SANPHAM 86
3.6.3.11. Bảng DONDATHANG 87
3.6.3.12. Bảng DONDATHANG_SANPHAM 88
3.6.3.13. Bảng PHUONGTHUCTHANHTOAN 88
3.6.3.14. Bảng DIACHITHANHTOAN 88
3.6.3.15. Bảng KHACHHANG 89
3.6.3.16. Bảng VAITRO 89
3.6.3.17. Bảng TAIKHOAN 90
4.3.2.1. Hiện thực bảng LOAISP 102
4.3.2.2. Hiện thực bảng NOISANXUAT 103
4.3.2.3. Hiện thực bảng HANGSANXUAT 104
4.3.2.4. Hiện thực bảng MUIHUONG 104
4.3.2.5. Hiện thực bảng MAUSAC 104
4.3.2.6. Hiện thực bảng THUONGHIEU,SANPHAM 105
4.3.2.7. Hiện thực bảng KHACHHANG 106
4.3.2.8. Hiện thực bảng TAIKHOAN 107
4.3.2.9. Hiện thực bảng VAITRO 107
4.3.2.10. Hiện thực bảng DIACHITHANHTOAN 108
4.3.2.11. Hiện thực bảng DONDATHANG, PHUONGTHUCTHANHTOAN 109
4.3.2.12. Hiện thực bảng CHITIETDONDATHANG 110
Trang 9CHƯƠNG 1 TỔNG QUAN VỀ DRUPAL 1.1 Giới thiệu Drupal
1.1.1 Hệ quản trị nội dung mã nguồn mở
System của tiếng Anh), là phần mềm để tổ chức và tạo môi trường cộng tác thuận lợi nhằm mục đích xây dựng một hệ thống tài liệu và các loại nội dung khác một cách thống nhất
CMS làm cho việc tổ chức, kiểm soát và xuất bản một khối lượng lớn tài liệu
và các nội dung khác như hình ảnh hay các nguồn thông tin đa phương tiện khác trở nên dễ dàng Hệ thống quản lý nội dung website là một hệ thống quản lý có thêm các tính năng giúp giảm tải sự phức tạp của những công việc được yêu cầu để xuất bản nội dung ra ngoài website
Drupal là một khung sườn phát triển phần mềm hướng module, một hệ quản trị nội dung mã nguồn mỡ Đầu tiên nó được Dries Buytaert viết theo dạng hệ thống bản tin Drupal cho phép một cá nhân riêng lẻ hoặc một cộng đồng có thể dễ dàng xuất bản, quản lý và tổ chức một số lượng rất lớn nội dung trên website
Drupal là sự chuyển chữ tiếng Anh từ “druppel” của tiếng Hà Lan, nghĩa là
“giọt nước”
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ách thiết lập
giá nhất là Joomla! và Drupal Hai hệ quản trị nội dung này thay nhau làm mưa làm
Trang 10Hình 1.1 drupal và joomla
Hình 1.2 Nội dung mã nguồn của Drupal <Nguồn: ohloh.>
1.2 Mục đích phát triển
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- điều này trái ngược với Joomla Ngoài ra, công nghệ của Drupal thường mới hơn Joomla, ví dụ như thiết kế của Drupal không dùng bảng (table) trong khi ở Joomla! thì bảng xuất hiện ở mọi nơi (những viên gạch đầu tiên của Joomla! được xây dựng khi các chuẩn Web chưa ra đời)
Trang 111.3 Ưu điểm
Cũng giống như các hệ thống quản trị nội dung hiện đại khác, Drupal cho phép người quản trị hệ thống tạo và tổ chức dữ liệu, tùy chỉnh cách trình bày, tự động hóa các tác vụ điều hành và quản lý hệ thống
Drupal có cấu trúc lập trình rất tinh vi, dựa trên đó hầu hết các tác vụ phức tạp
có thể được giải quyết với rất ít đoạn mã được viết, thậm chí không cần Đôi khi, Drupal cũng được gọi là “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 nó
1.4 Khuyết điểm
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 và 6.x (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 cũng có mặt trái khiến nhiều người e ngại phải nâng cấp liên tục khi dùng Drupal
Thư mục tài nguyên…
1.6 Yêu cầu cài đặt DRUPAL
Đề nghị Apache server với mod rewrite
Bộ nhớ cho PHP ít nhất 8 MB Chạy tốt hơn với bộ nhớ 16-24MB
Phần mở rộng được mặc định cài đặt ở PHP
Ở file cấu hình của PHP (php.ini) nên thiết lập session.cache_limiter: none
Trang 12User có tối thiểu các quyền hạn sau: SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES (một số server không mặc định bật các quyền hạn được tô đậm)
Một số module được cộng đồng đóng góp không kiểm tra kỹ trên hệ quản trị CSDL này Nếu chưa có kinh nghiệm giải quyết các sự cố, bạn nên sử dụng MySQL để được cộng đồng hỗ trợ tốt hơn
1.7 Một số khái niệm trong DRUPAL
một người có vai trò admin Người điều hành site, có đầy quyền sử dụng mọi chức năng trên hệ thống
Người điều hành có thể xây dựng thêm/ sửa/ xóa một/ nhiều vai trò mới cho phù hợp với yêu cầu
Người điều hành site quyết định bật/ tắt (những ) theme nào nhu cầu
Người dùng có thể chọn sử dụng một theme trong những theme hợp lệ (người điều hành site kích hoạt)
Mission, Layout, CSS, Block style, Node style,…
Trang 131.7.4 Block
Block là những khối văn bản nhỏ, thường được đặt ở bên ngoài vùng nội dung chính của website
weight càng nhỏ có độ ưu tiên càng cao
các đoạn code nhỏ và thông báo các trạng thái, không phải là những đoạn nội dung đầy đủ, vì vậy Block không phải là Node và không phải theo những nguyên tắc làm việc của Node Node thường dùng để lưu trữ các phần nội dung của website
những vai trò nhất định Đó là các tùy chọn để điều khiển ai là người được quyền xem nó và những trang mà nó sẽ xuất hiện Nếu module throttle được bật lên, những Block không cần thiết sẽ được tắt đi một cách tự động trong thời gian bận rộn
adminstrative Trang để điều chỉnh Block Administer Î Site Building Î Blocks
bằng cách dùng Block API
1.7.4.1 Cấu hình cho block
có thể được xử lý từ trang administration
Trang 14Hình 1.3 Trang cấu hình block
1.7.4.2 Định nghĩa một Block trong module
module có thể cài đặt nhiều block bên trong hook này Khi một block đã được định nghĩa, nó sẽ được trình bày trong trang adminstation Trang này cũng có thể tạo ra các block thông qua giao diện web Bảng lưu trữ cấu trúc block như sau :
Trang 15Hình 1.4 Giản đồ database cho block
thêm vào cho Block sẽ được thực hiện từ trang adminstration Bảng blocks_roles sẽ
lưu trữ các quyền truy cập cho mỗi Block
1.7.5 Node (nút)
một trang sách, một chủ đề thảo luận, một blog entry,.…
thường, mỗi Node sẽ có một title để admin có thể xem danh sách các nội dung của
nó
Tất cả các kiểu nội dung được xây dựng trên Node đều có cùng một cấu trúc
dữ liệu bên dưới giống nhau Điều này nghĩa là đối với các thao tác trên Node, bạn
có thể xem như tất cả các nội dung là giống nhau
Trang 16Ví dụ : blog entry, post, page, recipe… tất cả đều có cùng cấu trúc bên dưới giống nhau là Node
attachment, rate…
Một số chức năng mạnh đã được xây dựng sẵn để hỗ trợ cho Node
Dể phát triển Node based module dựa trên Node API
Nhiều đề án với dữ liệu lớn đã xây dựng thành công dựa trên Node Organic groups, Blogging, Book pages, E-commerce,
Để xây dựng một Node module, chúng ta phải sử dụng một số hook Drupal cung cấp
Việc thực hiện các thao tác trên node rất dễ dàng như tìm kiếm, tạo, chỉnh sửa, quản lý… tất cả đều được cung cấp sẵn trong Drupal vì tất cả các kiểu nội dung đều
là node
Trang 17Hình 1.5 Những kiển node lấy từ một node cơ
node
- title : một chuỗi dài 128 kí tự
một tác giả
với những người không có quyền “administer nodes” Giá trị 1 có nghĩa là node đã publish, nội dung có thể thấy bởi những người có quyền “access content” Việc thể một node đã publish có thể được cấm lại bởi hệ thống điều khiến quyền truy cập của Drupal
Trang 18- moderate: một số nguyên, giá trị 0 cho biết việc điều chỉnh (moderation) bị tắt, và 1 là bật
nhiên nó sẽ liệt kê danh sách các node có đánh dấu sticky trước, sau đó sẽ đến các node chưa đánh dấu và xếp theo ngày được tạo Giá trị 1 nghĩa là sticky và 0 nghĩa là unsticky
Nếu bạn sử dụng hệ thống node revision, Drupal sẽ tạo một revision chứa thông tin về người cuối cùng thay đổi nó
1.7.5.1 Không phải tất cả đều là node
User, block và comment không phải là node
nữa user cần email-address, user name và cách bảo vệ an toàn để lưu trữ password Block là một giải pháp lưu trữ cho từng mảnh nội dung nhỏ hơn như : menu navigation, searcho box, danh sách các comment gần đây…
1.7.4.2 Tạo một node
Về mặt truyền thống, khi bạn muốn tạo một kiểu nội dung mới trong Drupal, bạn sẽ viết một node module, cái sẽ chịu trách nhiệm và cung cấp mọi thứ cho kiểu nội dung mà bạn cần Chúng ta gọi đó là truyền thống vì các phát triển gần đây trong framework Drupal cho phép bạn tạo ra kiểu nội dung bằng giao diện administrative
1.7.4.3 Ngăn chặn các quyền truy cập đến các node
hook_access()và hook_perm() nhưng Drupal cung cấp bộ điều khiển try cập sử dụng bảng node_access và 2 hook_node_grants(), hook_node_access_records() Node-Grants có ba quyền truy cập cơ bản là xem, chỉnh sửa và xóa Các module sẽ cung cấp quyền truy cập cho các kiểu node qua hook node_access() Nếu module không cung cấp vị trí quyền truy cập cho phép, Drupal sẽ hỏi tất cả các module đã định nghĩa node access chịu trách nhiệm xem các thao tác có được cho
Trang 19Realm là một chuỗi chuyên quyền cho phép nhiều module node chia sẻ quyền bảng node_access
này tất cả các hàm hook user có trong tất cả các moudle sẽ được gọi
Đây là cách phổ biến nhất để tương tác với nhân Drupal
Mỗi Hook có nhưng tham số qui ước và giá trị trả về nhất định
một việc gì đó Như khi xác định module chịu trách nhiệm cho yêu cầu hiện tại, nó
sẽ yêu cầu tất cả module cung cấp những đường dẫn mà module đó sẽ sử dụng Drupal làm điều này bởi việc tạo ra danh sách của tất cả các module và gọi hàm có
tên của module plus_menu( ) trong mỗi module
1.7.7 Hệ thống menu trong Drupal
Hệ thống có thể có một hay nhiều menu
Một khái niệm được sử dụng, bao gồm những thuộc tính và khả năng như :
nhánh những menu item ( là một siêu liên kết được định vị trong một
Trang 20Những thuộc tính của menu item
- Path : liên kết đến nội / ngoại site
độ ưu tiên càng cao
1.7.7.1 Mapping url đến các hàm
URL, từ thông tin này Drupal sẽ xem xét để chạy code và giải quyết yêu cầu Điều
này được gọi là “dispatching”
Để làm điều này, drupal yêu cầu các module cung cấp một mảng menu các item, đó là đường dẫn và các thông tin về đường dẫn
Hàm hook _menu thật sự sẽ được gọi 2 lần
Menu mà chúng ta tạo ra trong trường hợp là menu tĩnh Nó không bao giờ thay đổi vì nó luôn là cachable
cache dưới dạng mảng trong bảng cache_menu
Nếu bạn muốn tạo một menu động, ta sẽ xử lý nó trong trường hợp biến
$may_cache = FALSE
1.7.6.2 Điều chỉnh quyền truy cập
Chúng ta sẽ phát triển tiếp ví dụ trên, ban đầu chúng ta thiết lập quyền truy cập accesss là TRUE, nghĩa là bất cứ ai cũng có thể truy cập vào menu của chúng ta Thông thường quyền truy cập menu thường được điều khiển trong hàm hook_perm() và việc kiểm tra quyền truy cập thông qua hook user_access()
Bằng cách cài đặt hook _perm(), hệ thống menu của chúng ta sẽ có thể quyết định khi nào đường dẫn được truy cập và khi nào từ chối dựa vào vai trò của user
Trang 21Khi quyết định quyền truy cập của một menu, Drupal sẽ nhìn vào khóa access thuộc đường dẫn đầy đủ (full-path) của menu Nếu khóa access là TRUE nó sẽ được truy cập bất chấp khóa access của menu cha là FALSE Nếu menu không có khóa access, Drupal sẽ đánh giá theo khóa access cha Trường hợp ngay cả menu cha cũng không có khóa access, Drupal sẽ quay lui lại các nhánh trên cây cho đến khi
nó tìm thấy khóa access (khóa access của gốc (root) luôn luôn là TRUE)
Hình 1.6 Bảng quyền truy cập của user với các khóa access
khóa type Nếu bạn không định nghĩa khóa type, giá trị mặc định của khóa type là MENU_NORMAL_ITEM sẽ được dùng, Drupal sẽ xem đối xử với menu item của bạn khác nhau tùy theo khóa type mà bạn định nghĩa
Hình 1.7 Bảng mô tả các cờ (flag) của menu-item
Trang 22Hình 1.8 Bảng cờ của MENU_NORMAL_ITEM
Những hằng số thường sử dụng là : MENU_CALLBACK, MENU_ LOCAL_ _TASK và MENU_DEFAULT_LOCAL_TASK
1.7.6.4 Thể hiện menu dưới dạng tab
Hàm callback thể hiện dưới dạng tab được gọi là local-task và nó có type là MENU_LOCAL_TASK, MENU_DEFAULT_LOCAL_TASK
Tựa đề của một local-task thường là một động từ ngắn (ví dụ : add, list ) Local-task thường dùng cho cho các đối tượng như node, user, workflow…
Các local-task phải có một item cha theo thứ tự để tab có thể biểu diễn được
thêm vào các entry đến các path của moudle khác hoặc thậm chí là override lại chúng Đặc thù thì điều này sẽ được thực hiện trong menu.module, nó là một phần của Drupal nhưng bạn cũng có nhiều nguyên nhân để làm điều này bằng cách lập trình
Đây là kỹ thuật rất hữu dụng khi bạn muốn thay đổi cách ứng xử mặc định của drupal mà không chỉnh sửa code bên trong nhân Drupal
Bằng cách dùng kỹ thuật “ghi đè” như trên, bạn có thể xóa 1 menu đã có sẵn bằng cách override lại đường dẫn (path) của chúng
1.7.6.7 Thêm vào một menu sẵn có
Bạn có thể thêm vào các menu có sẵn bằng cách thêm vào menu item với đường dẫn thông minh
Trang 231.7.8 Form API trong Drupal
Tạo ra nhanh chóng các HTML Form từ các mảng PHP
Các hàm kiểm tra tính hợp lệ của một form có cú pháp sau :
của form và $form_value là các giá trị của HTML FORM đã đệ trình 1.7.7.1 Quá trình xử lý form
Hình 1.9 Quá trình xử lý form
Trang 24Hình 1.10 Quá trình xử lý form 2
Khởi tạo tiến trình: hàm drupal_get_form() bắt đầu bằng cách khởi động biến
$form (mảng này sẽ lưu trữ các giá trị đã submit) là một mảng rổng và biến
$form_submitted là FALSE
Thiết lặp Token: một trong những điều thuận lợi của hệ thống form là nó sẽ cố gắng bảo đảm rằng form đã submit thì thật sự là form do Drupal tạo ra nhằm mục đích bảo mật và chống lại spam Để làm điều này, Drupal sẽ tạo một khóa riêng cho mỗi lần cài đặt Drupal Khi khóa đã được tạo ra, nó sẽ được lưu trữ trong bảng variables như là drupal_private_key Token ngẫu nhiên giả dựa trên khóa private key sẽ được gởi vào form trong một trường ẩn và sẽ được kiểm khi formed được submit Các token thường chỉ được sử dụng cho việc login của các user
Thiết lập ID: một trường ẩn chứa ID của form hiện tại được gởi cho browser Form ID thường chức năng định nghĩa form và nó sẽ được gởi đi như là biến đầu tiên của drupal_get_form()
sau:
$output = drupal_get_form('user_register');
Trang 25Thu thập các element của form: tiếp đến, hàm element_info() sẽ được gọi, hàm này sẽ gọi đến hook_elements() có trong tất cả các module Bên trong nhân của drupal, các element chuẩn như radio, checkbox được định nghĩa sẵn bởi system.module Những module cài đặt hook_elements() sẽ có thể định nghĩa kiểu element của nó Bạn có thể cài đặt hook này trong module của bạn vì bạn muốn có những element đặc biệt cho form hoặc mở rộng một form đã được định nghĩa sẵn Hàm hook element_info() thu lượm tất cả các thuộc tính mặc định của các element và lưu nó trong local cache Bất kì thuộc tính mặc định nào không xuất hiện định nghĩa form sẽ được thêm vào trước khi tiếp tục tìm hàm validate của form Tìm hàm validate: hàm validate có thể được xây dựng bằng cách thiết lập thuộc tính [#validate] của form là một mảng các tên hàm cùng với mảng các giá trị Các giá trị này sẽ được gởi cho hàm khi nó được gọi Ta có thể định nghĩa nhiều validator Nếu form không có thuộc tính #validate, drupal sẽ tìm kiếm hàm có tên của form cộng với _validate Nếu hàm này cũng không có, Drupal sẽ tìm hàm được đặt tên là tên của thuộc tính #base cộng với _validate Nếu bạn có nhiều form mà chúng chỉ khác nhau chút ít, bạn muốn chúng có cùng validator, bạn sẽ thiết lập
$form['#base'] và nó sẽ được dùng thay vì dung form ID để khởi tạo form validator
node_form_validate() được gọi
Tìm hàm submit: hàm này sẽ được gọi khi form được submit, nó được thiết lập bởi thuộc tính #submit của form
Nếu form không định nghĩa thuộc tính #submit, Drupal sẽ kiểm tra xem có hàm được đặt tên là tên form cộng với _submit, nếu thất bại Drupal sẽ tìm hàm có tên là giá trị của thuộc tính #base cộng với _submit Nếu tất cả đều thất bại, Drupal
sẽ thiết lập thuộc tính #submit đến hàm xử lý form mà tìm thấy
Trước khi xây dựng form, hook form_alter() sẽ được gọi, bất kỳ module nào
có cài đặt hook này đều có thể thay đổi nội dung form Đây là cách chủ yếu để thay
Trang 26Bây giờ chúng ta sẽ xem xét trong trường hợp form đã được submited Việc quyết định xem form đã được submit hay chưa sẽ dựa vào biến $_POST không rỗng
và chuỗi của biến $_POST['form_id'] so khớp với ID của form hoặc $form['#base'] Khi việc so khớp hợp lệ, Drupal sẽ validate form
Việc đầu tiên của quá trình validation là kiểm tra Token Tất cả các form của Drupal đều sử dụng một token duy nhất được gởi đi cùng với form và nó sẽ được submit cùng những giá trị khác của form Nếu token không so khớp hoặc bị thiếu, việc validation sẽ thất bại
Tiếp theo, các required fields sẽ được kiểm tra nếu user bỏ trống nó Các phần
tử có option (check boxes, radio buttons, and drop-down selection) sẽ được xem xét nếu giá trị đang chọn là giá trị gốc ban đầu khi form được xây dựng
Cuối cùng, form ID và các giá trị của form sẽ được xử lý thông qua hàm validator
Nếu quá trình validation thỏa, nó sẽ gởi form và các giá trị của nó đến hàm làm thao tác submission Chúng ta có thể có nhiều hàm xử lý form, trong thuộc tính
#submit có thể chứa đựng nhiều cặp key-value, với key là tên hàm xử lý và value mảng giá trị tham số cho hàm
hướng Nếu có nhiều hàm xử lý trong thuộc tính #submit, chỉ có giá trị trả về của hàm cuối cùng được sử dụng Nếu hàm xử lý không trả về một Drupal path, user sẽ được trả về đến cùng trang cũ (nghĩa là giá trị của biến $_GET['q']) Bạn có thể trả
về trị FALSE cho hàm cuối cùng để tránh bị chuyển hướng
#redirect cho form
Ví dụ: $form['#redirect'] = 'node/1' hoặc $form['#redirect'] = array('node/1',
$query_string, $named_anchor) Việc chuyển hướng sẽ được thực hiện bởi hàm drupal_goto(), nó sẽ trả về Location header đến webserver
Trang 27- Form ID
được submit khi có nhiều form trên cùng một page và kết hợp các các form với các hàm nhằm xử lý các form tham gia vào Để nhận biết một form, chúng ta gán cho mỗi form một ID ID này sẽ được định nghĩa trong hàm drupal_get_form() như drupal_get_form('mymodulename_identifier')
Với hầu hết các form, ID sẽ được tạo theo qui ước “ten module” cộng với chuỗi mô tả hoạt động của form Ví du: form user login được tạo ra bởi module user
và có ID là user_login
và theme Bên cạnh đó, Drupal sẽ dùng form ID cho việc tạo ra CSS ID cho form,
vì vậy form trong Drupal luôn có một CSS ID Bạn có thể override lại CSS ID bằng cách thiết lập thuộc tính #id như $form['#id'] = 'my-special-css-identifier';
Form ID luôn được nhúng vào trong form dưới dạng trường ẩn (hidden field)
và được đặt tên là form_id
1.7.7.3 Theming forms
Drupal xây dựng sẵn các hàm về cấu trúc của form để bạn có thể định nghĩa, biến đổi hoặc trả về nó ở dạng HTML Dĩ nhiên, đôi khi bạn có thể thay đổi output
do Drupal tạo ra hoặc làm đẹp các control một cách rất dễ dàng
Nếu form của bạn chỉ cần vài thay đổi đơn giản, bạn có thể sử dụng thuộc tính
#prefix và #suffix để thêm mã HTML vào trước hoặc sau các element của form Bạn cũng có thể định nghĩa HTML markup bằng cách thuộc tính #type nhận giá trị là ‘markup’
dựng cụ thể cho form và form element Mặc định, Drupal sẽ tìm kiếm hàm có tên là theme_ cộng với tên form
Lợi ích của việc xây dựng hàm theme là bạn có thể chuyển đổi, thêm vào output mà chúng ta muốn
Trang 28- Thông báo cho Drupal biết hàm Theme bạn sử dụng
Bạn có thể báo cho Drupal biết hàm theme mà bạn sử dụng mà nó không theo định dạng theme_ cộng với tên form bằng cách khai báo thêm thuộc tính #theme
Thỉnh thoảng, trong vài trường hợp bạn sử dụng nhiều form trên 1 page nhưng chỉ muốn dùng 1 hàm validation hoặc submit Ví dụ: module node chạy tất cả các lại node đều chỉ dùng hàm validation and submission của nó
Khi Drupal nhận được form, đầu tiên nó sẽ tìm hàm định nghĩa form dựa trên form ID Nếu nó không tìm thấy, nó sẽ gọi đến hàm hook_forms(), hàm này sẽ yêu cầu tất cả các module “mapping” form ID đến hàm callback
Đặc thù, hàm Validation được dùng cho form nhưng nó không thể validate riêng cho element của form được Để làm điều này, bạn thiết lập thuộc tính [#validate] là một mảng chứa các tên hàm validation
Hàm validation của form sẽ được gọi sau khi các hàm validation của element
đã được gọi
Thuộc tính cho Root of Form
drupal_get_form() Nó được thêm vào bởi hàm drupal_retrieve_form()
động hay không
multistep form, thuộc tính #build_id cho biết thể hiện cụ thể của một form
Nó được gởi thông qua hidden field, element này sẽ được thiết lập bởi hàm drupal_prepare_form()
submission và theming
Trang 29- #token: một chuỗi (MD5) là một token duy nhất được gởi đi cho mọi form
để Drupal biết được form thât sự là một form Drupal và không phải do người dùng có ác ý gởi đến
HTML ID
giá trị của hàm request_uri()
dựng xung quanh phương thức POST và nó sẽ không xử lý form dùng phượng thức GET Nếu trong trường hợp bạn muốn dùng phương thức GET, bạn cần dùng trong menu API
chuỗi, nó là Drupal path để user sẽ được chuyển đến đó sau khi đã submit Nếu nó là một mảng, mảng này sẽ được gởi đến cho hàm drupal_goto() với phần tử đầu tiên trong mảng là đường dẫn đích
form được trả về Mỗi hàm sẽ được gọi với tham số là $form_id và $form
Ví dụ: nếu thiết lập #pre_render = array('drupal1', 'drupal2') thì Drupal sẽ gọi hàm drupal1($form_id, $form) và drupal2($form_id, $form)
Thuộc tính thêm vào cho các Element
Khi form builder thông qua định nghĩa form, nó bảo đảm rằng các thành phần đều thiết lập các thuộc tính mặc định Các giá trị mặc định sẽ được thiết lập
hook_elements()
FALSE Nếu nó được thiết lập là TRUE, hàm validation của form sẽ ném
ra lỗi nếu giá trị của nó chưa được nhập vào
Drupal Development (vì những thuộc tính này không quan trọng)
Trang 30Thuộc tính của các Element
form phải luôn định nghĩa #type = 'form'
không Nếu element có phần tử con, những phần tử này sẽ không được hiển thị nếu thuộc tính #access của cha là FALSE
Những hàm này sẽ được gọi khi element được được xây dựng Ví dụ: trong module system.module, kiểu checkbox được định nghĩa, hàm expand_checkboxes() trong sẽ được gọi khi xây dựng form:
build xong Mỗi hàm sẽ được gọi với 2 tham số: $form và $form_values
nó sẽ được sắp xếp theo weight
Trang 311.8 Các module hệ thống trong DRUPAL
nối với hệ thống
trình bày ở trang điểu hành module
cũng được xây dựng theo hướng này, thích hợp để sử dụng ở hầu hết các site và để tham khảo
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'
thể tạo các blog entry cho mình Thí dụ, user 'ABC' có mã số thành viên là
user 'ABC' này
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
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
Trang 32- Color :” hỗ trợ ngừơi dùng thay đổi tông màu của một theme
thống 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
sử dụng hệ thống drupal
Tiếng Anh
- Statistics : ghi lai thống kê truy cập trong hệ thống
Cấu trúc một module có thể gồm nhiều tập tin khác nhau, nhưng phải có ít nhất một tập tin TÊN_MODULE.info và một tập tin TÊN_MODULE.module
Trang 33Người phát triển có thể đặt module của mình vào một trong các thư mục sau
Trang 34CHƯƠNG 2 ĐẶC TẢ ĐỀ TÀI 2.1 Phân tích thị trường kinh doanh mỹ phẩm hiện nay
Trước năm 1997, thị trường mỹ phẩm Việt Nam chưa được mấy ai chú ý bởi suy nghĩ thu nhập của phụ nữ còn thấp và ngân sách chi cho mỹ phẩm của họ quá ít
ỏi Các mặt hàng dưỡng da, trang điểm trên thị trường lúc ấy còn ít đa dạng
tâm chăm sóc nhiều hơn đến sắc đẹp của mình Đó cũng là lý do tại sao mà những năm gần đây thị trường mỹ phẩm ngày càng trở nên nhộn nhịp với tốc độ tăng trưởng bình quân 40%/ năm
Điểm mạnh của thị trường Việt Nam là dân số trẻ và đang phát triển Trong nhiều năm qua, phụ nữ Việt Nam mua sắm thường xuyên hơn và qua cách chi tiêu của họ cho thấy họ rất quan tâm đến việc chăm sóc bản thân
2.2 Phân tích hiện trạng các công ty kinh doanh mỹ phẩm hiện nay
các nhà doanh nghiệp đang nhắm đến Nhiều báo cáo, nghiên cứu về nhu cầu, thói quen mua sắm đã được thực hiện một cách nghiêm túc Dẫn chứng cụ thể là sự phong phú đa dạng của các loại mỹ phẩm Trung bình cứ mỗi hãng mỹ phẩm có khoảng 40-50 chủng loại khác nhau, nhằm đáp ứng nhu cầu đa dạng của người tiêu dùng
Trước sự cạnh tranh đang dần tăng cao và ngày càng trở nên khốc liệt, các hãng mỹ phẩm luôn nghiên cứu kỹ lưỡng đặc điểm của từng khu vực để tung ra những chiến lược marketing độc đáo của riêng mình để giành lấy thị phần trên thị trường
việc có sản phẩm tốt, dịch vụ tốt, giá cả cạnh tranh, việc thái độ, chất lượng phục vụ
Trang 35khách hàng và xây dựng một hình ảnh tốt đẹp về công ty là những điều rất quan trọng
2.3 Phân tích hiện trạng hoạt động các website thương mại điện tử hiện nay
nghiệp lớn hay nhỏ đều có cơ hội như nhau Các doanh nghiệp cần lập website, tăng cường ứng dụng CNTT, để có thể đưa ra quyết định nhanh nhất, chớp cơ hội cho mình
mạng dần phổ biến và trở thành nhu cầu không thể thiếu trong đời sống chúng ta Không nên nhìn nhận website thương mại điện tử đơn thuần là kỹ thuật, vì nó
có thể mang đến những quyền lợi kinh tế, xã hội thiết thực Doanh nghiệp xác định kinh doanh lâu dài mới lập website
nghiệp lập website nhưng tính năng thương mại điện tử trên những trang web này nói chung còn mờ nhạt Đại đa số trang web mới dừng ở giới thiệu dịch vụ, trên 27% website dùng để đặt hàng và chỉ khoảng 3% sử dụng để thanh toán trực tuyến
(nguồn : Vnexpress)
Với một website, doanh nghiệp có thể khai thác được các lợi ích sau:
muốn và mọi người ở khắp nơi trên thế giới có thể dễ dàng xem những thông tin đó và tương tác với doanh nghiệp (như hỏi thêm thông tin, đặt mua hàng, chọn hàng…)
tin trưng bày Đây là một lợi thế rất lớn của website so với việc thuê diện tích show-room, đăng quảng cáo trên báo, quảng cáo trên tivi
khi các phương tiện maketing khác như báo chí, Tivi, băng rôn…đều bị giới hạn về khoảng cách địa lý
Trang 36- Với website, doanh nghiệp có thể phục vụ khách hàng hay khách hàng tiềm năng một cách chất lượng hơn, tốc độ hơn thông qua tương tác với internet như mail, form yêu cầu thông tin thay vì phải mất rất nhiều thời gian để liên lạc, hạn chế về khối lượng thông tin, màu sắc, hình ảnh…gửi đi, nhất
là khi người nhận ở xa
kể
show-room
Website giúp cho doanh nghiệp phục vụ khách hàng tốt hơn Ngoài ra, nó còn thể hiện sự năng động, bắt kịp thời đại, tính chuyên nghiệp của doanh nghiệp khi có một Website để những ai quan tâm có thể dễ dàng thăm viếng truy cập thông tin
tư vấn Khách hàng có thể đặt hàng và mua hàng bằng các hình thức thanh toán khác nhau và có thể đóng góp ý kiến của mình về sản phẩm Cửa hàng trưởng có quyền thống kê sản phẩm và doanh thu, quản lý người dùng và quản lý hình thức khuyến mãi
Nhân viên có quyền thêm, xóa, cập nhật sản phẩm và quản lý đơn đặt hàng
Từ các phân tích trên, hệ thống được xây dựng nhằm đáp ứng các yêu cầu sau:
Chức năng bán hàng
Trang 37- Khách hàng có thể xem sản phẩm theo từng loại khác nhau
Thực hiện giao dịch
Hỗ trợ việc quản lý loại sản phẩm
Thống kê lượng tiêu thụ sản phẩm
Theo dõi doanh thu hàng tháng, năm
Trang 38CHƯƠNG 3 PHÂN TÍCH THIẾT KẾ HỆ THỐNG
3.1 Xây dựng mô hình use-case
vấn
hàng, mua hàng, lựa chọn hình thức thanh toán, đóng góp ý kiến về sản phẩm, nêu thắc mắc về những vấn đề có liên quan đến mỹ phẩm để được tư vấn
tin sản phẩm ngoài ra còn quản lý đơn đặt hàng, khách hàng, giải đáp thắc mắc của khách hàng, theo dõi số lượng sản phẩm còn trong kho, thống kê doanh thu của cửa hàng vào cuối ngày, cuối tháng
doanh thu trong tuần, tháng, năm Cửa hàng trưởng có quyền quản lý tất cả thông tin của các người dùng khác, phân quyền người dùng, quản lý hình thức khuyến mãi, quản lý giao diện người dùng
Trang 393.1.2 Xây dựng mô hình use-case
Hình 3.1 Lược đồ Usecase của người dùng thường
Hình 3.2 Lược đồ Usecase của khách hàng
Trang 40Hình 3.3 Lược đồ Usecase của nhân viên bán hàng
Hình 3.4 Lược đồ Usecase của cửa hàng trưởng
3.2 Đặc tả use-case