Ở các gia đ nh gia phả đư c xem như là một cái g đó rất thiêng liêng và quý báu, v nó ghi lại thông tin, lịch sử của toàn bộ gia tộc qua các thời kỳ, thế hệ trong họ, nhưng thường gia ph
Trang 1ĐẠI HỌC QUỐC GIA TP HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ PHẦN MỀM
KHOÁ LUẬN TỐT NGHIỆP
XÂY DỰNG WEBSITE QUẢN LÝ GIA PHẢ
Giảng viên hướng dẫn : TS Vũ Đức Lung
Sinh viên thực hiện: Trần Đức Anh Tuấn 06520541
Phan Lâm Hoàng Việt 06520568 Lớp : Công nghệ phần mềm
Khoá : 01
TP Hồ Chí Minh, 06 tháng 01 năm 2012
Trang 2LỜI MỞ ĐẦU
Việt Nam là một nước có nền văn hoá đậm đà bản sắc dân tộc,có truyền thống yêu nước nồng nàn, uống nước nhớ nguồn Cội nguồn dân tộc là cái nôi, bản sắc của một đất nước, còn gia phả là cái nôi của các dòng họ, là nơi lưu giữ những giá trị tinh thần rất thiêng liêng Việc lưu giữ và phổ biến cho các thành viên trong một dòng họ là việc rất cần thiết và ý nghĩa, nó giúp cho người trong dòng họ biết rõ về tổ tiên của họ, lịch sử văn hoá sinh hoạt của dòng họ
Những thông tin này thông thường đư c các thành viên trong gia phả tham khảo, tra cứu ở những vị tr có th trong một t nh thành, trong nước và thậm ch là t các nước khác trên thế giới Ch nh v vậy h nh thức quản lý hiệu quả nhất là phải thông qua một website và việc nghiên cứu đ có th thiết kế một website về gia phả với tốc độ xử lý nhanh và một giao diện đ p , đơn giản nhưng bắt mắt với người d ng và thân thiện d sử d ng là rất cần thiết
Hiện nay có rất nhiều website về gia phả, nhưng chúng phần lớn đư c xây dựng tự phát, vẫn còn những hạn chế nhất định về tốc độ xử lý c ng như giao diện V thế, cần thiết phải có những nghiên cứu về cấu trúc, dữ liệu, và các phương pháp hi n thị, quản lý, t m kiếm về gia phả trước khi muốn có một website với giao diện và các chức năng như mong muốn
Trang 3
LỜI CẢM ƠN
Chúng em xin gửi lời cảm ơn sâu sắc đến khoa Công Nghệ Phần Mềm, thầy V Đức Lung đã giúp đỡ chúng em hoàn thành luận án này Khoa Công Nghệ Phần Mềm đã cung cấp cho chúng em các kiến thức nền tảng và chuyên sâu, giúp chúng em dễ dàng phát tri n trên con đường sự nghiệp và tương lai của m nh Chúng em xin cảm ơn các giảng viên của khoa Công Nghệ Phàn Mềm nói riêng và các giảng viên của trường nói chung đã cung cấp cho chúng
em các kiến thức hữu ch và quý báu trên con đường học tập và tương lai
Đối với thầy V Đức Lung, thầy đã tận t nh giúp đỡ chúng em hoàn thành tốt luận văn này, thầy đã động viên và ủng hộ chúng em giúp chúng em
vư t qua các khó khăn trong suốt quá tr nh
Nhóm em c ng xin gửi lời tri ân sâu sắc đến gia đ nh, bạn bè những người luôn bên cạnh động viên, chia sẻ lúc khó khăn đ nhóm có đư c kết quả như ngày hôm nay
Tp Hồ Ch Minh, 06 tháng 01 năm 2012
Nhóm sinh viên thực hiện Phan Lâm Hoàng Việt Trần Đức Anh Tuấn
Trang 4NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
Trang 5
NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
………
Trang 6
MỤC LỤC Chương 1: Tổng quan đề tài 1
1.1 Lý Do Chọn Đề Tài 1
1.2 Mục Tiêu Đề Tài 2
1.3 Đối Tượng Và Phạm Vi Nghiên Cứu 2
1.4 Phương Pháp Thực Hiện 2
1.5 Các Đề Tài Hay Ứng Dụng Tương Tự 2
Chương 2: Cơ Sở Lý Thuyết 4
2.1 Kiến Thức Về Gia Phả 4
2.1.1 Cấu Trúc Một Gia Phả 5
2.1.2 Cấu Trúc Dữ Liệu Cho Phả Đồ 5
2.2 Phần Lưu Cache 8
2.3 Tìm hiểu về Google Visualization: Organizational Chart 8
2.3.1 Cấu trúc dữ liệu của Org Chart 9
2.3.2 Các thuộc t nh của Org Chart 10
2.3.3 Tuỳ chọn cấu h nh Org Chart 10
2.3.4 Các phương thức của Org Chart 11
2.3.5 Các sự kiện của Org Chart 11
2.3.6 T m hi u về Datatable và các phương thức cơ bản của nó 12
2.4 Tìm Hiểu CodeIgniter 18
2.4.1 Giới Thiệu 18
2.4.2 Ưu Đi m 19
2.4.3 Khuyết Đi m 19
2.4.4 Cài đặt 20
2.4.5 Mô hình Model-View-Controller 20
2.4.6 CodeIgniter URL 25
2.4.7 Các thư viện 25
Chương 3: Phân tích yêu cầu Website 26
3.1 Yêu cầu chức năng 26
3.2 Yêu cầu phi chức năng 29
3.2.1 Tổng quan các yêu cầu phi chức năng 29
3.2.2 Chi tiết các yêu cầu 30
3.3 Mô hình hóa yêu cầu 32
3.3.1 Cấu trúc Tác nhân (Actors) 32
3.3.2 Cấu trúc use case 33
3.3.3 Sơ đồ tuần tự các use case (sequence diagram) 34
Chương 4: Phân Tích Thiết Kế Hệ Thống Website 38
4.1 Mô hình ERD 38
4.1.1 Mô tả các thực th 38
4.1.2 Danh sách các bảng trong csdl 41
4.1.3 Mô tả các bảng dữ liệu 42
4.2 Mô hình ER 45
4.2.1 Ràng buộc miền giá trị 45
4.2.2 Ràng buộc liên bộ 46
4.2.3 Ràng buộc liên thuộc t nh 47
4.3 Mô hình DFD 48
Trang 74.3.1 Sơ đồ dòng dữ liệu 48
4.3.2 Mô Tả Ô Xử Lý 57
4.4 Sơ đồ giao diện Website 66
4.4.1 Sơ đồ Website ph a quản trị 66
4.4.2 Sơ đồ Website ph a người d ng 67
Chương 5: Cài đặt và thử nghiệm Website 69
5.1 Môi trường phát triển 69
5.2 Cài đặt 69
5.3 Thử nghiệm 71
Chương 6: Đánh giá và kết luận 80
6.1 Đánh giá kết quả đạt được 80
6.2 Ưu điểm của đề tài 80
6.3 Hạn chế của đề tài 80
6.4 Hướng phát triển của đề tài 80
Trang 8DANH MỤC CÁC BẢNG, SƠ ĐỒ, HÌNH Các Bảng
Bảng 2-1: Các thuộc t nh của Org Chart 10
Bảng 2-2: Tuỳ chọn cấu h nh Org Chart 10
Bảng 2-3: Các phương thức của Org Chart 11
Bảng 2-4: Các sự kiện của Org Chart 11
Bảng 2-5: Các phương thức của Datatable 13
Bảng 2-6: Các thư viện của CodeIgniter 25
Bảng 3-1: Chức năng người quản lý 27
Bảng 3-2: Chức năng người d ng 27
Bảng 3-3: Các yêu cầu phi chức năng 29
Bảng 4-1: Thực th Users 39
Bảng 4-2: Thực th gia phả 39
Bảng 4-3: Thực th danh sách gia phả 40
Bảng 4-4: Thực th cache 40
Bảng 4-5: Thực th liên hệ 40
Bảng 4-6: Thực th file 40
Bảng 4-7: Thực th admin 41
Bảng 4-8: Thực th thông tin chung 41
Bảng 4-9: Danh sách các bảng trong csdl 41
Bảng 4-10: Table users 42
Bảng 4-11: Table cache 42
Bảng 4-12: Table ds_giapha 42
Bảng 4-13: Table tb[i] 43
Bảng 4-14: Table file 43
Bảng 4-15: Table admin 44
Bảng 4-16: Table lienhe 44
Bảng 4-17: Table thontinchung 44
Bảng 4-18: Bảng tầm ảnh hưởng miền giá trị R1 45
Bảng 4-19: Bảng tầm ảnh hưởng miền giá trị R2 46
Bảng 4-20: Bảng tầm ảnh hưởng liên bộ R1 46
Bảng 4-21: Bảng tầm ảnh hưởng liên bộ R2 46
Bảng 4-22: Bảng tầm ảnh hưởng liên bộ R3 46
Bảng 4-23: Bảng tầm ảnh hưởgn liên bộ R4 47
Bảng 4-24: Bảng tầm ảnh hưởng liên bộ R5 47
Bảng 4-25: Bảng tầm ảnh hưởng liên bộ R6 47
Bảng 4-26: Bảng tầm ảnh hưởng liên thuộc t nh R1 47
Bảng 4-27: Quản lý gia phả 57
Bảng 4-28: Cập nhật thông tin 57
Bảng 4-29: T m kiếm thông tin 57
Bảng 4-30: Thêm thành viên 57
Bảng 4-31: Thêm dòng họ 58
Bảng 4-32: Lưu Cache 58
Bảng 4-33: Ki m tra thông tin user 58
Bảng 4-34: Thêm user 58
Trang 9Bảng 4-35: Thêm thông tin chung 58
Bảng 4-36: Them thông tin phả ký 59
Bảng 4-37: Thêm thông tin tộc ước 59
Bảng 4-38: Thêm thông tin thuỷ tổ 59
Bảng 4-39: Thêm thông tin hương hoả 59
Bảng 4-40: Ki m tra thông tin thành viên 60
Bảng 4-41: Cập nhật thành viên 60
Bảng 4-42: Ki m tra thông tin dòng họ 60
Bảng 4-43: Cập nhật dòng họ 61
Bảng 4-44: Ki m tra thông tin chung 61
Bảng 4-45: Cập nhật thông tin chung 61
Bảng 4-46: Ki m tra thông tin phả ký 61
Bảng 4-47: Cập nhật phả ký 62
Bảng 4-48: Ki m tra thông tin tộc ước 62
Bảng 4-49: Cập nhật tộc ước 62
Bảng 4-50: Ki m tra thông tin thuỷ tổ 63
Bảng 4-51: Cập nhật thuỷ tổ 63
Bảng 4-52: Ki m tra thông tin hương hoả 63
Bảng 4-53: Cập nhật hương hoả 63
Bảng 4-54: Ki m tra thông tin thành viên 64
Bảng 4-55: Xuất thông tin thành viên 64
Bảng 4-56: Ki m tra thông tin dòng họ 64
Bảng 4-57: Xuất thông tin dòng họ 65
Bảng 5-1: Đánh giá các chức năng website 78
Các Sơ Đồ Sơ đồ 2-1: Dòng chảy dữ liệu bên trong CI 23
Sơ đồ 3-1: Cấu trúc tác nhân (actor) 32
Sơ đồ 3-2: Cấu trúc use case các chức năng ch nh của website 33
Sơ đồ 3-3: Use case đăng nhập 34
Sơ đồ 3-4: Use case đăng xuất 34
Sơ đồ 3-5: Sequence diagram thêm gia phả 35
Sơ đồ 3-6: Sequence diagram ch nh sửa gia phả 35
Sơ đồ 3-7: Sequence diagram xoá gia phả 36
Sơ đồ 3-8: Sequence diagram xóa user (ch dành cho người quản trị ) 36
Sơ đồ 3-9: Sequence diagram t m kiếm gia phả 37
Sơ đồ 3-10: Sequence diagram đăng ký tài khoản 37
Sơ đồ 4-1: Mô hình ERD 38
Sơ đồ 4-2: Mô hình ER 45
Sơ đồ 4-3: Sơ đồ ngữ cảnh 48
Sơ đồ 4-4: Dòng dữ liệu cấp 1 48
Sơ đồ 4-5: Cập nhật thông tin 49
Sơ đồ 4-6: Quản lý user 49
Sơ đồ 4-7: T m kiếm thông tin 50
Sơ đồ 4-8: Thêm thành viên 50
Sơ đồ 4-9: Thêm dòng họ 51
Trang 10Sơ đồ 4-10: Thêm thông tin gia phả 52
Sơ đồ 4-11: Thêm thông tin chung gia phả 53
Sơ đồ 4-12: Thêm thông tin phả ký 53
Sơ đồ 4-13: Thêm thông tin tộc ước 54
Sơ đồ 4-14: Thêm thông tin thuỷ tổ 54
Sơ đồ 4-15: Thêm tông tin hương hoả 55
Sơ đồ 4-16: Lưu Cache 55
Sơ đồ 4-17: T m kiếm thành viên 56
Sơ đồ 4-18: T m kiếm dòng họ 56
Sơ đồ 4-19: Ph a quản trị 66
Sơ đồ 4-20: Ph a người d ng 67
Sơ đồ 4-21: Chi tiết ga phả 68
Các Hình Ảnh Hình 2-1: Treeview dạng cây thư m c 7
Hình 2-2: Phả đồ theo chiều ngang 8
Hình 2-3: Organization Chart 9
Hình 2-4: Mô hình MVC 21
Hình 2-5: Cấu trúc CodeIgniter 22
Hình 5-1: Tạo cơ sở dữ liệu 69
Hình 5-2: Import cơ sở dữ liệu 70
Hình 5-3: Cấu h nh cơ sở dữ liệu 70
Hình 5-4: Trang chủ 71
Hình 5-5: Trang kho gia phả 72
Hình 5-6: Trang quản lý gia phả 73
Hình 5-7: Phả đồ nằm dọc 74
Hình 5-8: Phả đồ nằm ngang 74
Hình 5-9: Menu quản lý thành viên 75
Hình 5-10: Chi tiết thành viên 75
Hình 5-11: Thêm thành viên 76
Hình 5-12: Ch nh sửa thành viên 76
Hình 5-13: Giao diện đăng nhập admin 77
Hình 5-14: Giao diện quản lý trong admin 77
Các từ viết tắt
Trang 11Chương 1: Tổng quan đề tài
1.1 Lý Do Chọn Đề Tài
Gia phả là bản ghi chép tên họ, tuổi tác, vai trò và công đức của cha m , ông bà, tiên tổ trong thời đại mà họ đã sinh ra và lớn lên của một gia đ nh hay một dòng họ Gia phả có th đư c coi như một bản sử ký của một gia đ nh hay một dòng họ Gia phả có khi gọi là Phổ ký, có khi là Phổ truyền
Ở Việt Nam, t c làm gia phả phát tri n mạnh ở hai miền Bắc và Trung, miền Nam rất t gia đ nh làm gia phả ở đấy còn đư c gọi là "gia phổ" và biến thái thành "tông chi" tức tờ "tông chi tông đồ" Ở các gia đ nh gia phả đư c xem như là một cái g đó rất thiêng liêng và quý báu, v nó ghi lại thông tin, lịch sử của toàn bộ gia tộc qua các thời kỳ, thế hệ trong họ, nhưng thường gia phả xưa ch có một bản gốc truyền t đời này sang đời kia, cho nên rất khó truyền đạt hết thông tin nội dung của họ tộc cho toàn th con cháu đời sau biết Đ nhiều người có th biết rõ về lich sử của dòng họ m nh, thông tin về ông, bà tổ tiên và con cháu đ nắm thông tin và biết rõ mối quan hệ của m nh với những người trong c ng họ tộc Ngày nay công nghệ thông tin phát tri n rất nhanh, việc sử d ng mạng internet là rất phổ biến, cho nên việc đưa thông tin của t ng họ tộc lên một trang web đ mọi người có th xem và nắm bắt thông tin là một việc hết sức cần thiết và ý nghĩa, đó là lý do thứ nhất của đề tài
Gia phả là gia bảo,là tài sản không ch của riêng dòng tộc mà còn của quốc gia Trong thời loạn lạc, thân lo không nổi huống chi là gia phả Ngày nay, chúng ta đang ở thời b nh trị, ổn định Thiết nghĩ việc làm trước hết là phải khôi ph c truyền thống văn hoá lâu đời đã bị xâm hóa ngiêm trọng sau những thời thăng trầm của đất nước Giữ g n và phát huy gia phả là gữi lấy cho con cháu đời sau một mảng văn hóa độc đáo gắn liền với đạo hiếu.Ngày nay, không t gia đ nh vẫn còn giữ đư c những cuốn gia phả t xa xưa Song việc dựng lại gia phả dòng họ trước đây và viết tiếp về thế hệ m nh cho con cháu lưu lại của nhiều gia đ nh, dòng họ đang gặp không t khó khăn Chưa nói đến việc con cháu của các dòng tộc sinh sống rải rác khắp mọi miền đất nước, c ng như ở nước ngoài, nên việc xây dựng gia phả dòng tộc bằng những phương pháp cổ đi n như viết sách là không mấy khả thi và ch nh xác nữa C ng như những người con trong dòng tộc có th bị thất lạc hoặc quên đi những mối quan hệ trong dòng tộc, ngày dỗ ông bà… Đây là lý do thứ hai
Trong cuộc sống hiện nay , có rất nhiều người m nh gặp c ng họ với
m nh, có th c ng quê quán nhưng m nh không biết rõ có mối quan hệ với họ như thế nào, có th là anh em họ, con cháu , chú bác Đ có th t m kiếm và xác thực các mối quan hệ đó có liên quan như thế nào chúng ta cần phải xây dựng một hệ thống lưu trữ và xử lý thông tin của gia phả các dòng họ, đ chúng ta có th lên tra cứu thông tin nguồn gốc của m nh, t m mối quan hệ với những người m nh cần muốn biết như thế nào, đây c ng ch nh là lý do cuối cùng
V các l do trên, chúng em đã chọn đề tài Xây Dựng Hệ Thống Website Gia Phả Việt Nam trên nền tảng web
Với tâm huyết muốn bảo tồn và phát huy gia phả của các dòng họ ở Việt Nam, chúng tôi đã làm Website quản lý Gia Phả này với m c đ ch sau:
Trang 12 Xây dựng một nơi lưu trữ các gia phả của các dòng họ ở Việt Nam
T ng dòng họ c ng ghi lại gia phả của dòng họ m nh vào c ng một nơi trên mạng toàn cầu(Internet) T ng người sẽ góp t ng mảng gia phả của dòng họ m nh, kết quả chúng ta sẽ có một kho gia phả Đó là một tài sản tinh thần không nhỏ cho người Việt Nam chúng ta
Những dòng họ, những người con ở xa, nếu bị thất lạc thông tin
về gia tộc có th dễ dàng t m lại
1.2 Mục Tiêu Đề Tài
M c tiêu đầu tiền là có th đem thông tin t người d ng đ tạo ra 1 gia phả và lưu trữ trên mạng đ mọi người có th truy cập đ xem và cập nhật thông tin về dòng họ của m nh
M c tiêu thứ hai là có th xử lý kỹ thuật đ hỗ tr người d ng nhập thông tin gia phả và t m kiếm thông tin Hệ thống website phải có khả năng lưu trữ và xử lý thông tin đư c nhiều dòng họ, và thời gian đ xứ
lý ph c v cho các m c đ ch như nhập liệu thông tin, lưu trữ thông tin,
xử lý ch nh sửa, t m kiếm trong họ tộc phải đủ nhanh
1.3 Đối Tượng Và Phạm Vi Nghiên Cứu
Đối tư ng nghiên cứu ở đây là các thông tin gia phả, phả đồ của các họ tộc Phạm vi nghiên cứu ch thực hiện trên các gia phả ở Việt Nam, bao gồm 3 miền Bắc, Trung, Nam Trong đó dữ liệu thử nghiệm đư c lấy t một số dòng
họ có thật ngoài đời và một số gia phả t các trang web gia phả khác Chúng ta
ch đưa vào thử nghiệm ở một khoảng số đời nhất định với thông tin khoảng
10 trang
1.4 Phương Pháp Thực Hiện
Phương pháp thực hiện là đầu tiên t m hi u về các thông tin gia phả, về các công tr nh có liên quan, về các lý thuyết liên quan Sau đó t m hi u các kỹ thuật quản lý gia phả, phân tích các nhu cầu người d ng đ t đó dẫn đến phân
t ch thiết kế chương tr nh thử nghiệm Cuối c ng thử nghiệm chương tr nh thiết kế với các chức năng mong đ i và đánh giá kết quả đ đi đến kết luận
1.5 Các Đề Tài Hay Ứng Dụng Tương Tự
Ngày xưa, người ta lưu giữ các gia phả họ tộc dưới dạng các cuộn giấy Ngày nay, các gia phả đư c lưu giữ dưới dạng quy n sách chứa thông tin của các thành viên trong dòng họ Việc lưu giữ dưới dạng cuộn giấy và sách sẽ khó
mà phổ biến cho mọi người trong tộc biết đư c và không linh động khi mỗi người ở những nơi khác nhau Cho nên việc đem thông tin gia phả đ lưu trên mạng đ có th phổ biến cho các thành viên của dòng họ, họ có th d dàng năm bắt thông tin của họ tộc m nh
Đ quản lý các gia phả họ tộc trên các website, ta cần đưa các thông tin
về dòng họ, thông tin thành viên và các thông tin thêm khác về dòng họ lưu trữ dưới dạng cơ sở dữ liệu trên server Khi cần th ta có th truy xuất lấy, cập nhật hoặc t m kiếm các thông tin
Trang 13Hiện nay có rất nhiều trang web về gia phả, nhưng thường là các trang gia phả của riêng các họ tộc tự xây dựng riêng cho dòng họ, và có một số t các trang có khả năng quản lý và lưu trữ nhiều gia phả v d như 2 trang web phahe.vn, vietnamgiapha.com Hai trang web này có lẽ hiện thời là nổi bật nhất trong việc quản lý hệ thống các gia phả, tuy nhiên những trang này vẫn có những đi m mạnh yếu khác nhau:
Site vietnamgiapha.com: thì phần vẽ phả đồ chưa đ p lắm và chưa có phần phả đồ theo chiều ngang, giao diện chưa đư c bắt mắt và giao diện ch nh bố c c rối rắm
Site phahe.vn: giao diện khá đ p bắt mắt, phần phả đồ theo chiều dọc
đ p và có tuỳ biến đư c, nhưng vẫn thiếu phả đồ chiều ngang, đặc biệt
xử lý rất chậm, thời gian đáp ứng đối với phả đồ với số lư ng người lớn thường rất lâu và hay bị lỗi limit time out
V thế ở website của ta, chúng ta sẽ tập trung vào phần giao diện cho phả đồ, phần quan trọng và th hiện tổng quan gia phả, và phần tốc độ xử lý Chúng ta
sẽ t m cách cải thiện tốc độ chương tr nh và t m cách vẽ phả đồ 1 cách trực quan và đ p
Trang 14Chương 2: Cơ Sở Lý Thuyết
2.1 Kiến Thức Về Gia Phả
2.1.1 Nguồn Gốc Của Gia Phả
Gia phả là bản ghi chép tên họ, tuổi tác, vai trò và công đức của cha m , ông bà, tiên tổ trong thời đại mà họ đã sinh ra và lớn lên của một gia đ nh hay một dòng họ Gia phả có th đư c coi như một bản sử ký của một gia đ nh hay một dòng họ Gia phả có khi gọi là Phổ ký, có khi là Phổ truyền Các nhà Tông thất (dòng dõi vua quan), có khi gọi gia phả của vương triều m nh hay gia tộc m nh bằng t ngữ trân trọng hơn: Ngọc phả, Thế phả
Tại các nước phương đông t lâu đã chịu ảnh hưởng của văn hoá của Đạo( Khổng Tử ) , các thế hệ sau trong dòng họ hay vương triều phải giữ đạo Trung đạo Hiếu Việc xây dựng và lưu truyền gia phả đư c xem là một cách ghi nhớ công ơn tổ tiên, gây dựng lòng tự hào trong dòng tộc.Ở Tây phương, người ta
có tập t c làm cây phả hệ, tương tự như Tông đồ của người Hoa hay người Việt Một Tông đồ, một Gia phả, một Phả ký, một Phổ truyền d đơn sơ hay súc t ch c ng đều trở nên những tài liệu quý báu cho nhả xã hội học, sử học về sau Nó còn có th hữu d ng cho những nghiên cứu về tâm lý, về di truyền học, y học, huyết học Môn học nghiên cứu về gia phả là gia phả học
Tại Việt Nam, gia phả sơ giản ghi chép tên cúng cơm, ngày giỗ và địa
đi m an táng của ông cha Theo các nhà sử học phỏng đoán th gia phả đã xuất hiện t thời Sĩ Nhiếp làm thái thú ở huyện Giao Ch ( thời H ng Vương), hoặc gần hơn tức là t thời Lý Nam Đế (khoảng nǎm 476-545) Nhưng phải đến thời nhà Lý, Nhà Trần mới xuất hiện những cuốn tộc phả, thế phả (ghi cả thế thứ, tông t ch toàn họ), phả ký (ghi lại hành trạng, sự nghiệp của tổ tiên) Mới đầu gia phả xuất hiện ch trong Hoàng tộc c ng giới quan lại, nhà Lý có Hoàng Triều Ngọc Điệp - năm 1026; nhà Trần có Hoàng Tông Ngọc Điệp, nhà Lê có Hoàng Lê Ngọc Phả C ng với sự xuất hiện các gia phả của Hoàng tộc là gia phả của các danh gia, quan lại và cứ thế lan rộng, phổ biến ghi chép gia phả trong nhân dân Trước đây, gia phả chủ yếu đư c ghi chép bằng chữ Hán-Nôm, nhưng số người giỏi không nhiều, qua nhiều năm chiến tranh, nhiều bộ, cuốn gia phả của nhiều dòng họ c ng mất dần
T c làm gia phả phát tri n mạnh ở hai miền Bắc và Trung, miền Nam rất t gia đ nh làm gia phả ở đấy còn đư c gọi là "gia phổ" và biến thành "tông chi" tức tờ "tông chi tông đồ" Trong gia phả, người đứng đầu ngành trưởng (trưởng họ, trưởng tộc) có bổn phận ghi hết những chi tiết về thân th ch và dòng dõi; những người con khác sao lại bản gia phả ch nh đó Các gia đ nh giữ
g n kỹ lưỡng và truyền t đời cha tới đời con "Họ" theo nghĩa gốc có liên hệ với nhà và dưới chế độ phong kiến, nối kết con người với đất ruộng: một mái nhà, một gia đ nh, một họ Họ và tên của một người định vị tr của cá nhân người đó trong xã hội, xác định cá th trong một toàn th
Trang 152.1.1 Cấu Trúc Một Gia Phả
Gia phả đư c coi là hoàn ch nh trước hết phải là một gia phả đư c ghi chép rõ ràng, chữ nghĩa chân phương, có nội dung cơ bản như sau:
1 Thông tin rõ ràng về người sao l c (biên soạn)
2 Nêu nguồn gốc xuất xứ của gia tộc, là phả ký hay là gia sử
3 Ghi Thuỷ Tổ của dòng họ
4 Ghi t ng phả hệ phát sinh t Thuỷ Tổ cho đến các đời con cháu sau này Có phần phả đồ, là cách vẽ như một cây, t ng gia đ nh là t ng nhánh, t gốc đến ngọn cho dễ theo dõi t ng đời Đối với tiền nhân có các m c sau đây:
Tên: Gồm tên huý, tên tự, thuỵ hiệu và tên gọi thông thường Thuộc đời thứ mấy? Con trai thứ mấy của ai?
Ngày tháng năm sinh (mất), giờ (nếu nhớ) Mộ nguyên táng, cải táng, di táng tại đâu? Thời gian nào?
Học hành, thi cử, đậu đạt, chức v , địa vị lúc sinh thời và truy phong sau khi mất
V : chánh thất, kế thất, thứ thất Họ tên, con thứ mấy của ai? Quê ở đâu? Các m c ngày, tháng, năm sinh, ngày, tháng, năm mất, tuổi thọ, mộ, đều ghi t ng người như trên Nếu có thi đậu hoặc có chức tước, địa vị, đư c ban thưởng riêng th ghi thêm
Con: Ghi theo thứ tự năm sinh, nếu nhiều v th ghi rõ con bà nào? Con gái th cước chú kỹ: con gái thứ mấy, đã lấy chồng th ghi tên họ chồng, năm sinh, con ông bà nào, quê quán, đậu đạt, chức tước? Sinh con mấy trai mấy gái, tên g ? (Con gái có cước chú còn con trai không cần v có m c riêng t ng người thuộc đời sau)
Những gương sáng, những t nh cách, hành trạng đặc biệt, hoặc những công đức đối với làng xã, họ hàng, xóm giềng Những lời dạy bảo con cháu đời sau (di huấn), những lời di chúc
Ngoài những m c ghi trên, gia phả nhiều họ còn lưu lại nhiều sự
t ch đặc biệt của các vị tiên tổ, những đôi câu đối, những áng văn hay, những bài thuốc gia truyền đó là những tài sản quý giá mà chúng ta đ thất truyền, chưa biết khai thác
5 Tiếp theo, là tộc ước Đây là những quy định-quy ước trong tộc họ, đặt
ra nhằm ổn định tộc họ, có công thưởng, có tội phạt, tất nhiên là phải
ph h p với luật pháp chung
6 Với một tộc họ lớn, có th có nhiều tông nhánh, chi phái Phần này sẽ ghi những thông tin chi phái, ai là bắt đâu chi, chi hiện ở đâu, nhà thờ chi
7 Những thông tin khác về tài sản hương hỏa, bản đồ các khu mộ tiền nhân
2.1.2 Cấu Trúc Dữ Liệu Cho Phả Đồ
Đối với website gia phả th phân khúc vẽ phả đồ là khó và quan trọng nhất Phả đồ là một mô h nh cây gia phả đư c vẽ ra t các thông tin t ng người trong họ tộc Phả đồ c ng ch nh là cái quan trọng của gia phả, nh n vào phả đồ người ta có th nh n tổng quan về 1 dòng họ
Trang 16Ở đây dữ liệu các thành viên không đư c lưu trữ trên 1 table duy nhất
mà là nhiều table Mỗi dòng họ khi đư c tạo ra th sẽ có đư c 1 table riêng đ lưu thông tin các người trong 1 dòng họ V ở đây khi vẽ cây gia phả theo chiều dọc chúng ta d ng giải thuật dựa trên đệ quy, nên nếu ch d ng 1 bảng lưu thành viên cho tất cả các dòng họ th thuật toán khi chạy sẽ rất chậm (dữ liệu có th lên tới hàng chuc ngàn records ), v thế chúng ta nên tách ra thành
t ng table riêng biệt cho mỗi dòng họ, mỗi dòng họ thường số thành viên tối
đa là dưới 1000 người, nên giải thuật đệ quy áp d ng ở trường h p này là khả thi và nhanh
Cấu trúc dữ liệu của một thành viên bao gồm các trường id, cha_id, level và các trường thông tin thêm khác Dựa vào trường id và cha_id đ xác định mối quan hệ cha con trong phả đồ, 1 id ch có 1 cha_id , 1 cha_id th có
th thuộc nhiều record khác, trường level d ng đ xác định đời thứ mấy của người đó đ d dàng truy xuất và xử lý các thao tác khác
Đối với phần phả đồ chúng ta có 2 dạng phả đồ: 1 dạng phả đồ theo chiều dọc giống như cây thư m c, và 1 dạng phả đồ thiều chiều ngang bao gồm nhiều ô vuông, mỗi ô vuông là 1 người
Đ vẽ phả đồ theo chiều dọc chúng ta sử d ng plugin treeview trong thư
viện jquery : $('container').treeview( ) Dữ liệu đầu vào của treeview plugin
là dưới dạng mô h nh DOM phân cấp, giống như tập h p lồng nhau (Nested List Model) Do đó đ vẽ ra cây gia phả theo chiều dọc chúng ta phải chuy n
dữ liệu lưu trữ thành dữ liệu dưới dạng của treeview, mà đ tạo ra dữ liệu phân cấp lồng nhau chúng ta phải d ng đến thuật toán đệ quy đ tạo ra dữ liệu cần thiết
Cấu trúc dữ liệu dạng treeview đầu vào như sau:
<li><span>Nguyễn Văn Anh</span>
Cấu trúc dạng danh sách trong html, gồm các thẻ <li> và <ul>
Giải thuật đệ quy như sau:
Về phần phả đồ theo chiều ngang th ta d ng api vẽ bi u đồ của google có tên
là Organization Chart Đối với api này dữ liệu đầu vào của nó dưới dạng datatable chuẩn của google Datatable gồm các cột( colum ) và hàng (rows), cột đ tên các trường và hàng là các thực th Org Chart của google nhận dữ
Trang 17liệu đầu vào là 1 datatbale bao gồm 3 cột: cột id, cột cha_id, và cột tooltip( chúng ta không d ng đến)
Ta phải tạo các cột trước:
data.addColumn('string', 'Name');
data.addColumn('string', 'Manager');
data.addColumn('string', 'ToolTip');
Đ tạo các hàng ta d ng hàm data.addRow( ['Bob', 'Jim', 'Bob Sponge'] );
Với data là dạng datatable của google Ở mỗi cột ta có 2 giá trị value và giá trị format value đ th hiện giá trị id và tên th hiện
V d :
Đ trả về dữ liệu dạng datatable theo dạng của google ta xử lý dữ liệu lấy t server và xữ lý chuỗi chuy n sang dạng đúng của datatable Dữ liệu trả về có dạng:
[
[{v:'Mike', f:'Mike<div style="color:red;
font-style:italic">President</div>'}, '', 'The President'],
[{v:'Jim', f:'Jim<div style="color:red;
font-style:italic">Vice President</div>'}, 'Mike', 'VP'],
Trang 18Hình 2-2: Phả đồ theo chiều ngang
2.2 Phần Lưu Cache
Trong các bảng của chương tr nh có 1 bảng tên là cache Bảng này d ng
đ lưu trữ các chuỗi chứa thông tin của t ng dòng họ đư c xử lý theo dạng dữ liệu đầu vào của treeview và api google org chart
Việc sử d ng lưu trữ dữ liệu đã dựng sẵn góp phần làm tăng tốc độ chương
tr nh Người d ng khi truy xuất dữ liệu của phả đồ th công việc xử lý đ ra dữ liệu ph h p , không cần thực hiện mà ch việc đọc lên t bảng cache
2.3 Tìm hiểu về Google Visualization: Organizational Chart
Google có các project phát tri n các tool như các API đ vẽ các dạng
bi u đồ, các dạng bi u đồ rất đa dạng và phong phú bao gồm các dạng chart:
Trang 19[{v:'Mike', f:'Mike<div style="color:red;
font-style:italic">President</div>'}, '', 'The President'],
[{v:'Jim', f:'Jim<div style="color:red;
font-style:italic">Vice President</div>'}, 'Mike', 'VP'],
chart.draw(data, {allowHtml:true});
}
</script>
2.3.1 Cấu trúc dữ liệu của Org Chart
Là 1 bảng với 3 trường cột, mà mỗi hàng đại diện cho 1 node trong bi u đồ orgchart:
cột 0: là id của node Nó phải là duy nhất trong các nodes, có th chứa các ký tự, bao gồm khoảng trắng Nó sẽ hiện lên trên node Bạn có th
Trang 20thiết lập ki u th hiện trên node nhưng giá trị của node vẫn là giá trị của
Mỗi node có th có 1 node cha hoặc không có, và có th có nhiều node con
2.3.2 Các thuộc tính của Org Chart
Bảng 2-1: Các thuộc t nh của Org Chart
Tên thuộc
tính
slectedStyle Datatable row Thiết lập style bên trong cho 1 node khi đư c
chọn select Bạn phải thiết lập
allowHtml=true và phải trước hàm draw( ),
nó sẽ overide lên tuỳ chọn c trước
V d : myDataTable.setRowProperty(2,
'selectedStyle', color:#00FF00');
'background-style Datatable row Thiết lập stye bên trong cho các node Bạn
phải thiêt lập trước hàm vẽ draw( )
V d sau sẽ override màu của node:
'border: 1px solid green');
2.3.3 Tuỳ chọn cấu hình Org Chart
Bảng 2-2: Tuỳ chọn cấu h nh Org Chart
allowCollapse boolean false Doubleclick sẽ xoá đi node đó
và các node con của nó
allowHtml boolean false Nếu giá trị là true, tên tron
node có chứa thẻ Html sẽ đư c
Tên class gán cho các node
Đế thao tác CSS trên các tên class này
selectedNodeClass string Tên class
mặc định
Tên class gán cho node đư c chọn Thao tác CSS cho các node nay thông qua tên class
Trang 21slectionColor string '#d6e9f8' Màu nền của node đư c chọn Size string 'medium' Các size 'small', medium',
'large'
2.3.4 Các phương thức của Org Chart
Bảng 2-3: Các phương thức của Org Chart
collapse(row, collapsed) None Huỷ hoặc mở rộng một node.Với
các tham số:
+row: ch số hàng
+collapsed: true hoặc false
draw(data, options) None Vẽ bi u đồ org chart
getChildrenIndexes(row) Mảng số
number
Trả về 1 mảng ch số của các node con
hàng
2.3.5 Các sự kiện của Org Chart
Bảng 2-4: Các sự kiện của Org Chart
allowCollapse đư c gán
là true và người d ng doubleclick lên 1 node
+collapsed: 1 giá trị true false cho huỷ hoặc mở rộng 1 node
+row: ch số hàng (t nh
t 0) onmouseover Khi người d ng rê chuột
t o) của node đư c out
cho các hàm bên ngoài gọi.Nếu muốn gắn với
None
Trang 22chart, và gọi sau khi draw, bạn nên thiết lập 1 listener cho sự kiện trước khi gọi hàm draw,
và gọi phương thức sau khi sự kiện xảy ra
2.3.6 Tìm hiểu về Datatable và các phương thức cơ bản của nó
Lớp Datatable th hiện 1 bảng các giá trị 2 chiều độc lập Đ tạo 1 bảng copy và ch đọc t 1 DataTable, chúng ta cần d ng đến DataView.Mỗi cột trong DataTable đư c gán 1 ki u dữ liệu , với nhiều thuộc t nh tuỳ chọn bao gồm ID,label và chuỗi pattern.Bạn có th gán các thuộc t nh tuỳ chọn (cặp name/value) đối với bất kỳ ô, hàng, cột hoặc cả table
Hàm khởi tạo: DataTable(opt_data, opt_version)
+tham số opt_data:
Dữ liệu đư c sử d ng đ khởi tạo cho table Dữ liệu có th là dạng JSON bằng cách gọi DataTable.toJSON( ) ở trên table, hoặc một đối tư ng javascript chứa dữ liệu đư c d ng cho khời tạo table Nếu tham số này không
có, một dữ liệu mới rỗng sẽ đư c đưa vào table
ở mỗi cột phải c ng ki u dữ liệu Mỗi cột có một mô tả bao gồm ki u
dữ liệu của no, 1 tên cho cột đó, và 1 ID Mỗi cell trong table giữ 1 giá trị Các cells có th có giá trị null, hoặc giá trị bởi giá trị cột đó
Đ thêm 1 data rows sau khi gọi hàm khởi tạo, ta có th gọi hàm addRow( ) cho 1 hàng hoặc addRows( ) cho nhiều hàng Ta c ng có th gọi hàm addColumn( ) Có các phương xoá bỏ các hàng và cột, nhưng nên dùng DataView
Nếu chúng ta thay đổi giá trị trog DataTable sau khi nó đưa dữ lệu qua hàm draw( ), thay đổi sẽ không xảy ra ngay Chúng ta phải gọi lại hàm draw( ) đ có tác d ng
V d :
Tạo 1 bảng DataTable với literal string:
var dt = new google.visualization.DataTable(
{
cols: [{id: 'task', label: 'Task', type: 'string'},
{id: 'hours', label: 'Hours per Day', type:
'number'}],
rows: [{c:[{v: 'Work'}, {v: 11}]},
{c:[{v: 'Eat'}, {v: 2}]},
{c:[{v: 'Commute'}, {v: 2}]},
Trang 23{c:[{v: 'Watch TV'}, {v:2}]}, {c:[{v: 'Sleep'}, {v:7, f:'7.000'}]}
] },
0.6 )
Tạo 1 bảng DataTable với dữ liệu trống rỗng, sau đó thêm vào dữ liệu:
var data = new google.visualization.DataTable();
data.addColumn('string', 'Task');
data.addColumn('number', 'Hours per Day');
data.addRows([
['Work', 11], ['Eat', 2], ['Commute', 2], ['Watch TV', 2], ['Sleep', {v:7, f:'7.000'}]
Number Thêm 1 cột vào data table, và trả về ch
số của cột Tất cả các cells của cột mới
đư c gán giá trị null Hàm này có 2 chú ý:
Ki u thứ nhất:
+type: ki u dữ liệu của cột.Có th là 'string' 'number' 'boolean' 'date' 'datetime 'timeofday'
+opt_label: Chuỗi tên của cột, nếu không
đư c gán sẽ có giá trị rỗng +Opt_id: chuỗi duy nhất Giá trị rỗng mặc định
Ki u thứ hai:
+type: ki u dữ liệu cột +label: tên cột ki u chuỗi +id: ID của cột
+role: vai trò của cột +pattern: là một số hay ki u ngày đư c
th hiện bên trong cột addRow(opt_cellArray) Number Thêm một hàng vào bảng data, trả về ch
số của hàng mới +Opt_cellArray: một đối tư ng row, tho dạng Javascript notation xác định dữ liệu cho hàng mới Nếu tham số này không
có, sẽ thêm 1 hàng rỗng cuối bảng Tham
số này là mảng các giá trị cell: nếu ta ch muốn ch rõ giá trị của cell, hãy đưa ra
Trang 24giá trị cell Nếu muốn ch định dạng giá trị định dạng và thuộc t nh cho cell, ta phải d ng đối tư ng cell Chúng ta có t
d ng chung giá trị và đối tư ng cell trên
c ng phương thức D ng null hay mảng rỗng cho 1 ô rỗng
addRows(numorArray) Number Thêm nhiều hàng vào bảng, giá trị trả về
là ch số c a hàng cuối Có th tạo những hàng rỗng
numOrArray: sô hoặc mảng +Number: ch định có bao nhiêu row
đư c thêm vào +Array: một mảng đối tư ng row d ng đ thiết lạp giá trị cho các hàng
là copy tất cả dữ liệu ngoại tr thuộc t nh của cell,table và cột Nghĩa là các thuộc
t nh không nguyên thuỷ đư c copy theo tham chiếu, thuộc t nh nguyên thuỷ sẽ copy theo giá trị
getColumnId(columnIndex) String Trả về giá trị ID của cột theo ch số cột getColumnLabel(columnIndex) String Trả về tên của cột
getColumnPattern(columnIndex) String Trả về dạng định dạng giá trị của cột
+columnIndex là 1 số >=0 và nhỏ hơn số
lư ng cột ( getNumberOfColumns( ) ) getColumnProperty(columnIndex) Object Trả về 1 map các thuộc t nh của cột Các
thuộc t nh đối tư ng trả về bới tham chiếu
columnIndex: số ch số cột đ lấy thuộc tính
getColumnProperty(columnIndex,
name)
Auto Trả về gia trị tên thuộc t nh hoạc null nếu
không có thuộc tinh gán cho cột Giá trị trả về khác nhau dựa vào thuộc t n +columnIndex: 1 số >=0 và nhỏ hơn số
lư ng cột +name: tên thuộc t nh dạng chuỗi getColumnRange( columnIndex) Object Trả về giá trị nhỏ và lớn nhất trong các
cột Có 2 thuộc t nh min max trả về Nếu không có giá trị th min và max = null columnIndex: 1 số >=0 và nhỏ hơn số
lư ng cột getColumnRole(columnIndex) String Trả về role của cột
getCoumnType(columnIndex) String Trả về ki u dữ liệu của cột
columnIndex: 1 số >=0 và nhỏ hơn số
lư ng cột
Trang 25Giá trị trả về : 'string' 'number ' 'boolean' 'date' 'datetime' 'timeofday'
numbers
Trả về các ch số các hàng mà tr ng với giá trị filter Các ch số theo thứ tự tăng Output của hàm này có th d ng cho input của hàm DataView.setRows( ) đ thay đổi các hàng
Filters: 1 mảng đối tư ng mô t3 các cell
có giá trị h p với.Một ch số hàngđư c trả về nếu nó h p với các filters Mỗi filter là 1 đối tư ng với 1 số thuộc t nh của cột
getFrmattedValue(owIndex,
columnIndex)
String Trả về giá trị theo ki u định dạng của ô
với ch số hàng và cột rowIndex, ColumnIndex: 1 số >=0 và nhở hơn số hàng, số cột
getNumberOfColumns( ) Number Trả về số lư ng cột của bảng
gerNumberOfRows( ) Number Trả về số lương hàng của bảng
getProperties(rowIndex,
coumnIndex)
Object Trả về 1 map các thuộc t nh của ô ch
định Chú ý các thuộc t nh đối tư ng trả
về theo ki u tham số, thay đổi giá trị chúng th sẽ tha đổi giá trị chúng trong DataTable
+rowIndex: ch số hàng của cell +columnIndex: ch số cột c a cell getProperty(rowIndex,
columnIndex,name)
Auto Trả về giá trị tên thuộc t nh hoặc null nếu
không có thuộc tinh nào đư c thiết lập cho cell Ki u trả về dựa trên thuộc t nh +rowIndex, columnIndex: 1 số >=0 và nhỏ hơn số lư ng hàng,cột
+name: tên thuộc t nh dạng chuỗi getRowProperties(rowIndex) Object Trả về 1 map các thuộc t nh của hàng
Chú ý ki u trả về dạng tham chiếu sẽ thay đổi cả trong DataTable
rowIndex: ch số hàng đ lấy thuộc t nh getRowproperty(rowIndex, name) Auto Trả về giá trị tên thuộc t nh hoặc null nếu
không có thuộc tinh nào đư c thiết lập cho cell Ki u trả về dựa trên thuộc t nh +rowIndex: 1 số >=0 và nhỏ hơn số hàng +name: chuỗi tên thuộc t nh
getSortedRows(sortColumns) Mảng
Numbers
Trả về 1 bảng sắp xếp table mà không thay đổi thứ tự dữ liệu bên dưới Muốn
Trang 26thay đổi thứ tự bên dưới th gọi hàm sort( ) Ta có th ch định sắp xếp theo nhiều cách dựa trên tham số sortColumn:
+1 số: sắp xếp dựa trên cột có ch số +1 đối tư ng: chứa ch số cột sắp xếp và
có tuỳ chọn tăng hay giảm +mảng số: sắp xếp theo mảng số +mảng đối tư ng: sắp xếp theo mảng đối
tư ng
Gá trị trả về là 1 mảng số,mỗi số là ch số của hàng Output có th d ng cho input của DataView.setRows( )
getTableProperties Object Trả về 1 map các thuộc t nh của tabe getTableProperty(name) Auto Trả về 1 già trị thuộc t nh hoặc nul nếu
thuộc t nh chưa đư c thiết lập cho table Name: tên thuộc t nh
getValue(rowIndex, columnIndex) Object Trả về giá trị của cell
rowIndex, columnIndex: 1 số >=0 và nhỏ hơn số hàng, số cột
Giá trị trả về dựa trên giá trị của cột insertColumn(columnIndex,
type[,label [, id] ] )
None Thêm 1 cột vào bảng ở vị tr của ch số
Các cột nếu có ở ph a sau sẽ đư c dời lên
vị tr cao hơn +columnIndex: 1 số phải là ch số mới +type: ki u dữ liệu của cột 'string 'number' 'boolean' 'date' 'datetime' 'timeofday'
+label: tên của cột +id: chuỗi duy nhất của cột insertRows(rowIndex,
numberorArray)
None Chèn thêm 1 số hàng vào vị tr của hàng
ch định +rowIndex: ch số hàng nơi sẽ chèn vào Các hàng chèn có ch số bắt đầu t ch số xác định
+numberorArray: là 1 số mới hoặc rỗng các hàngđư c thêm
removeColumn(columnIndex) None Xoá đi cột tại vị tr xác định
columnIndex: phải là 1 số với giá trị ch
số cột có giá trị removeColumns(columnIndex,
numberOfColumns)
None Xoá 1 số cột t vị tr cột xác định
+numberOfColums: số cột xoá +columnIndex: 1 số có giá tri removeRow(rowIndex) None Xoá 1 hàng tại vị tr xác định
+rowIndex: 1 số có giá trị removeRows(rowIndex,
numberOfRows)
None Xoá 1 số hàng băt đầu t ch số xác định
+numberOfRows: số cột bị xoá
Trang 27+rowIndex: ch số vị tr có giá trị setCell(rowIndex,
ColumnIndex[,value [,
formattedValue [, properties] ] ] )
None Thiết lập giá trị thuộc t nh và giá trị định
dạng cho 1 cell rowIndex,columnIndex: 1 số >=0 và nhỏ hơn số hàng, số cột
value: giá trị gán cho cell Đ tránh giá trị
bị overwrite, gán tham số là undefined, xoá giá trị này th đ là null.Ki u dữ liệu tuỳ thuộc vào cột
formattedValue: 1 chuỗi giá trị định dạng Đ tránh giá trị bị overwrite, gán tham
số là undefined, đ giá trị rỗng th đ là chuỗi rỗng
properties: một đối tư ng với các thuộc
t nh thêm cho cell Đ tránh giá trị bị overwrite, gán tham số là undefined, xoá giá trị này th đ là null
properties)
None Thiết lập nhiều thuộc t nh cột
+columnIndex: 1 số >=0 và nhỏ hơn số
lư ng cột +properties: là 1 đối tư ng map (name/value) với các thuộc t nh thêm cho cột Nếu giá trị null đư c ch định th tất các các thuộc t nh thêm của cột sẽ bị xoá setColumnProperty(colunIndex,
name, value)
None Thiết lập 1 thuộc t nh đơn
+columnIndex: 1 số >=0 và nhỏ hơn số
lư ng cột +name: tên chuỗi thuộc t nh +value: giá trị đư c gán cho tên thuộc
t nh của cột xác định setFormattedValue
(rowIndex,columnIndex,
formattedValue)
None Thiết lập giá trị định dang cho cell
+rowIndex, columnIndex: 1 số >=0 và nhỏ hơn số lư ng hàng, số lư ng cột +formattedValue: 1 chuỗi giá trị định dạng, đ xoá th đ là null, đinh dạng rỗng th đ chuỗi rỗng
setProperty(rowIndex, name) None Thiế lập thuộc t nh cell
+rowIndex, columnIndex: 1 số >=0 và nhỏ hơn số lư ng h2ng, số lư ng cột +name: tên chuỗi thuộc t nh
+value: giá trị gán cho cell setProperties(rowIndex,
columnIndex, Properties)
None Thiết lập nhiều thuộc t nh cho cell
+rowIndex, columnIndex: 1 số >=0 và
Trang 28nhỏ hơn số lư ng h2ng, số lư ng cột +properties là 1 đối tư ng map (name/value) với các thuộc t nh thêm cho cell Nếu null đư c gán tất cả các thuôc
t nh thêm sẽ bị xoá setRowProperty(rowIndex, name,
value)
None Thiết lập thuộc t nh cho 1 hàng
+rowIndex: 1 số>=0 và nhỏ hơn số lư ng hàng
+name: tên thuộc t nh +value: giá trị gá cho tên thuộc t nh setRowProperties(rowIndex,
properties)
None Thiết lập nhiều thuộc t nh cho hàng
+rowIndex: 1 số >=0 và nhỏ hơn số
lư ng hàng +properties: 1 đối tư ng map(name/value) với các thuộc t nh thêm vào Nếu giá trị null các thuộc t nh thêm vào sẽ bị xoá
setTableProperty(name, value) None Thiết lập giá trị thuộc t nh cho bàng
DataTable +name: tên thuộc t nh +value: giá trị thuộc t nh setTableProperties(properties) None Thiết lập nhiều thuộc t nh cho bảng
DataTable +properties: 1 đối tư ng map(name/value) với các thuộc t nh thêm vào Nếu giá trị null các thuộc t nh thêm vào sẽ bị xoá
setValue(rowIndex, columnIndex,
value)
None Thiết lập giá trị cho cell Hàm này sẽ xoá
các định dạng và thuộc t nh của cell +rowIndex, columnIndex: số>=0 và nhỏ hơn số lư ng hàng, số lư ng cột
Value: giá trị gán cho cell,giá trị trả về dựa trên giá trị cột
sort(sortColumns) None Sắp xếp các hàng theo cột ch định
DataTable đư c thay đổi bởi hàm này Hàm này không trả về dữ liệu sắp xếp
đưa qua hàm khởi tạo DataTable
2.4 Tìm Hiểu CodeIgniter
2.4.1 Giới Thiệu
CodeIgniter là một nền tảng ứng d ng web nguồn mở đư c viết bằng ngôn ngữ PHP bởi Rick Ellis (CEO của EllisLab, Inc) Phiên bản đầu tiên đư c phát hành ngày 28.02.2006, phiên bản hiện tại: 2.1.0 Ý tưởng xây dựng CodeIgniter đư c dựa trên Ruby on Rails, một nền tảng ứng d ng
Trang 29web đư c viết bằng ngôn ngữ Ruby Hiện tại, CodeIgniter đang đư c phát tri n bởi ExpressionEngine Development Team thuộc llisLab, Inc
Website của chúng ta sẽ xây dựng dựa trên Framework CodeIgniter này
d ng mô h nh này trong thiết kế, giúp tách biệt các tập tin giao diện với các tập tin xử lý dữ liệu, nâng cao khả năng quản lý và dễ bảo tr
Nhỏ gọn: Gói cài đặt ch 404KB (không bao gồm phần User Guide) So với các PHP framework khác như CakePHP (1.3MB), Symfony (5.08MB) hay Zend Framework (5.66MB)…k ch thước của CodeIgniter giúp giảm thi u đáng k không gian lưu trữ
Tốc độ nhanh: CodeIgniter đư c đánh giá là PHP framework có tốc độ nhanh nhất hiện nay Bằng cơ chế lưu nội dung vào bộ đệm (cache), ki m tra bộ đệm trước khi tiến hành thực hiện yêu cầu, CodeIgniter giảm số lần truy cập và xử lý dữ liệu, t đó tối ưu hóa tốc
độ tải trang
Miễn ph : CodeIgniter đư c phát hành dưới giấy phép Apache/BSD mở rộng, cho phép người d ng tự do thay đổi, phát tri n và phân phối mã nguồn
Hỗ tr Search Engine Optimization: Cấu trúc URL của CodeIgniter rất thân thiện với các robot t m kiếm
Hệ thống thư viện phong phú: CodeIgniter cung cấp các thư viện ph c
v cho những tác v thường gặp nhất trong lập tr nh web, chẳng hạn như truy cập cơ sở dữ liệu, gửi email, ki m tra dữ liệu, quản lý session,
xử lý ảnh…đến những chức năng nâng cao như XML-RPC, mã hóa, bảo mật…
Bảo mật hệ thống: Cơ chế ki m tra dữ liệu chặt chẽ, ngăn ng a XSS và SQL Injection của CodeIgniter giúp giảm thi u các nguy cơ bảo mật cho hệ thống
Chưa hỗ tr AJAX: AJAX (Asynchronous JavaScript and XML) đ~ trở thành một phần không th thiếu trong bất kỳ ứng d ng Web 2.0 nào AJAX giúp n}ng cao t nh tương tác giữa người d ng và hệ thống, giúp cho người d ng có cảm giác như đang sử d ng ứng d ng desktop v các thao tác đều diễn ra “tức thời” Hiện tại, CodeIgniter vẫn chưa có thư
Trang 30viện dựng sẵn nào đ hỗ tr xây dựng ứng d ng AJAX Lập tr nh viên phải sử d ng các thư viện bên ngoài, như jQuery, Script.aculo.us, Prototype hay Mootools…
Chưa hỗ tr một số module thông d ng: So sánh với framework khác, CodeIgniter không có các module thực thi một số tác v thường gặp trong quá tr nh xây dựng ứng d ng web như Chứng thực người d ng (User Authorization), Trình phân t ch RSS (RSS Parser) hay Tr nh xử
lý PDF…
Chưa hỗ tr Event-Driven Programming: Event-Driven Programming (EDP) là một nguyên lý lập tr nh, trong đó các luồng xử lý của hệ thống sẽ dựa vào các sự kiện, chẳng hạn như click chuột, gõ bàn
ph m…Đây không phải là một khuyết đi m to lớn của CodeIgniter
v hiện tại, ch có một số t framework hỗ tr EDP, bao gồm Prado, QPHP và Yii
2.4.4 Cài đặt
Yêu cầu hệ thống: CodeIgniter có th hoạt động trên nhiều hệ điều hành
và server, yêu cầu có cài đặt PHP phiên bản 4.x hoặc cao hơn; hệ quản trị cơ
sở dữ liệu: MySQL (4.1+), MySQLi, Mircrosoft SQL Server, Postgres, Oracle, SQLite, và ODBC
3 Nếu ứng d ng có tương tác với cơ sở dữ liệu, thiết lập các giá trị cần thiết trong tập tin application/config/database.php
4 Upload tất cả thư m c và tập tin của CodeIgniter lên server
2.4.5 Mô hình Model-View-Controller
Model-View-Control (MVC) là một kiến trúc phần mềm, hiện đang
đư c xem là một mẫu thiết kế trong công nghệ phần mềm Mô h nh MVC tách biệt phần xử lý dữ liệu ra khỏi phần giao diện, cho phép phát tri n, ki m tra và bảo tr các thành phần một cách độc lập
Trang 31Hình 2-4: Mô hình MVC
Model : th hiện các cấu trúc dữ liệu Các lớp thuộc thành phần
Model thường thực hiện các tác v như truy vấn, thêm, xóa, cập nhật
dữ liệu Khi dữ liệu trong Model thay đổi, thành phần View sẽ đư c cập nhật lại
View : là thành phần th hiện dữ liệu trong Model thành các giao diện
tương tác với người sử d ng Một Model có th có nhiều View t y thuộc vào các m c đ ch khác nhau
Controller : đóng vai trò trung gian giữa Model và View Thông tin
người d ng t View đư c gửi cho Controller xử lý, sau đó Controller tương tác với Model đ lấy dữ liệu đư c yêu cầu, sau c ng Controller trả dữ liệu này về cho View
Mô h nh MVC thường đư c sử d ng trong các ứng d ng web, v thành phần View (mã HTML/XHTML) đư c sinh ra t các ngôn ngữ lập tr nh web Thành phần Controller sẽ nhận các dữ liệu GET/POST, xử lý những dữ liệu này, sau
đó chuy n sang Model xử lý.Model sẽ trả dữ liệu về ph a Controller, sau đó Controller sinh mã HTML/XHTML đ th hiện trên View
Trang 322.4.5.1 Cấu Trúc CodeIgniter
Hình 2-5: Cấu trúc CodeIgniter
(Nguồn: http://codeigniter.com/user_guide/)
Tập tin index.php đư c xem như controller đầu vào, tiếp nhận các yêu cầu t
ph a client và chuy n các yêu cầu này cho hệ thống xử lý
Thư m c system bao gồm phần lõi của CodeIgniter Chúng bao gồm các thư viện xây dựng sẵn, các tập tin ngôn ngữ, ghi chú về hệ thống Trong số đó, các thư m c sau khá quan trọng:
Thư m c application: Dành cho lập tr nh viên, các tập tin đư c lập tr nh cho ứng d ng sẽ lưu trong thư m c này
Thư m c cache: Bộ đệm của hệ thống, chứa các trang đã đư c xử lý trước đó
Thư m c helpers: Chứa các hàm hỗ tr cho lập tr nh viên khi viết ứng
d ng
Thư m c libraries: Chứa các thư viện dựng sẵn của CodeIgniter
Đối với lập tr nh viên, các tập tin của ứng d ng sẽ đư c lưu trong thư m c
system/application Trong đó:
Thư m c config: Chứa các tập tin cấu h nh hệ thống
Thư m c controllers: chứa các lớp controller
Thư m c errors: chứa các tập tin lỗi
Thư m c helpers: chứa các hàm tiện ch do người d ng định nghĩa
Thư m c hooks: chứa các tập tin đ mở rộng mã nguồn CodeIgniter
Trang 33 Thư m c language: chứa các tập tin ngôn ngữ
Thư m c libraries: chứa các thư viện cho người d ng d ng định nghĩa
Thư m c models: chứa các lớp model
Thư m c views: chứa các lớp view
2.4.5.2 Dòng Chảy Dữ Liệu Trong CodeIgniter
Sơ đồ 2-1: Dòng chảy dữ liệu bên trong CI
4 Security: Dữ liệu trước khi đư c chuy n đến các Controller sẽ đư c lọc đ phòng chống XXS hoặc SQL Injection
5 Application Controller: Controller xử lý dữ liệu nhận đư c bằng cách gọi đến các Models, Libraries, Helpers, Plugins…có liên quan
6 View: Dữ liệu đư c chuy n qua View đ hi n thị cho người d ng Nếu chức năng caching đư c bật, dữ liệu sẽ đư c lưu trong cache cho những lần yêu cầu tiếp theo
2.4.5.3 Model
Model là những lớp đư c xây dựng nhằm thực hiện việc trao đổi thông tin với cơ sở dữ liệu Một lớp Model có th thực hiện các tác v truy vấn, thêm, xóa, cập nhật dữ liệu Trong CodeIgniter, việc khai báo các lớp model dành cho một thực th nào đó là không cần thiết, v trong controller của thực th đó, ta có th gọi đến thư viện database đ thực hiện các thao tác với cơ sở dữ liệu Tuy nhiên, đ tiện cho việc quản lý, xây dựng lớp model cho một thực th đư c khuyến kh ch
Model là class đư c tạo ra đ làm việc với database V d : model chứa các hàm đ insert, update, xóa, lấy dữ liệu
Trang 34Một lớp model chuẩn trong CodeIgniter có cấu trúc như sau:
class Blogmodel extends CI_Model {
tiếp mà phải thông qua controller $this->load->view('view_name',
d ng trong tập tin view Dưới đây là nội dung mẫu của tập tin
$data['title'] = "My Real Title";
$data['heading'] = "My Real Heading";
Trang 352.4.5.5 Controller
Controller là những lớp đóng vai trò trung gian giữa view và model Controller nhận các yêu cầu t ph a người d ng, ki m tra chúng trước khi chuy n qua cho model Sau khi model xử lý yêu cầu và trả dữ liệu
về, controller chuy n sang view đ hi n thị dữ liệu cho người d ng
Một controller là một class và đư c gọi trên url Bên trong mỗi controller, bạn định nghĩa các hàm d ng đ thực hiện một chức năng nào đó
Trong CodeIgniter, các lớp controller đư c gán vào segment thứ nhất trong URI Segment thứ hai trong URI sẽ gọi đến phương thức tương ứng trong controller Các giá trị của các segment còn lại trong URI
ch nh là các tham số truyền vào cho phương thứ này CodeIgniter quy định một phương thức đặc biệt, index( ) Phương thức này có th xem như đầu vào của controller, sẽ đư c tự động gọi trong trường h p segment thứ hai của URI bị bỏ trống
Một lớp controller chuẩn trong CodeIgniter có mẫu:
domain.com/index.php/controller/method/param/…
Trong đó:
Segment controller là tên của lớp controller đư c gọi
Segment method là tên của phương thức trong lớp controller ở trên
Segment param là các đối số của phương thức đó
2.4.7 Các thƣ viện
Bảng 2-6: Các thư viện của CodeIgniter
Benchmarking Hỗ tr đánh giá hiệu năng hệ thống
Trang 36thương mại điện tử
Database Hỗ tr thao tác trên cơ sở dữ liệu
Encryption Hỗ tr mã hoá và giải mã thông tin
File Uploading Hỗ tr upload file lên server
Form Validation Ki m tra dữ liệu nhập t người d ng
Image Manipulation Hỗ tr xử lý ảnh
Input and Security Xử lý dữ liệu đầu vào và Bảo Mật
Trackback Cho phép và nhận thông tin trackback
Template Parser Cho phép xây dựng và xử lý mã giả trong các
view
Unit Testing Hỗ tr unit testing
User Agent Cho phép xác định thông tin t nh duyệt của
người d ng, thiết bị di động hay các robot t m kiếm trên site
tự xây dựng một XML-RPC cho hệ thống Zip Encoding Cho phép tạo tập tin Zip
Chương 3: Phân tích yêu cầu Website
Sau khi nghiên cứu các website gia phả có sẵn và các nhu cầu người
d ng khi truy cập vào các trang web này th nhận thấy cần có các chức năng
như sau:
Trang 37Bảng 3-1: Chức năng người quản lý
a) Chức năng người dùng vãng lai
1 Xem gia phả nằm ngang, nằm dọc (phả đồ, phả ký, thủy tổ, tộc 1
ước, hương hỏa)
2 Xem gia phả trong vòng 5 đời
3 Xem chi tiết thành viên trong một gia phả
4 T m kiếm gia phả
5 T m kiếm thành viên gia phả
6 Đăng k làm thành viên
7 Liên hệ
b)Chức năng người dùng là thành viên
8 Xem gia phả nằm ngang, nằm dọc (phả đồ, phả ký, thủy tổ, tộc
ước, hương hỏa)
9 Xem gia phả trong vòng 5 đời
10 Xem chi tiết thành viên trong một gia phả
11 Ch nh sửa thông tin phả ký trong gia phả của user sở hữu
12 Ch nh sửa thông tin thủy tổ trong gia phả của user sở hữu
13 Ch nh sửa thông tin tộc ước trong gia phả của user sở hữu
14 Ch nh sửa thông tin hương hỏa trong gia phả của user sở hữu
Trang 383.1.1.1 Người quản lí website
Quản lý User:
Người quản l có th tạo mới một user hoặc xóa một user Thông tin user bao gồm: họ tên, tên đăng nhập, mật khẩu, email, địa ch , số điện thoại, ngày đăng ký,…
o Điều kiện: người quản lý đăng nhập thành công vào hệ thống
Quản lý kho gia phả của website:
Người quản l có th xem gia phả, xóa gia phả và c ng có th tạo gia phả như những user b nh thường (một gia phả bao gồm: tên gia phả, chi tiết các thành viên trong gia phả, quê quán, phả ký, tộc ước, thủy tổ, hương hỏa, người tạo gia phả, ngày tạo, )
T m kiếm gia phả: Người quản l có th t m kiếm gia phả, hay thành viên gia phả nếu muốn
3.1.1.2 Người dùng vãng lai
Xem gia phả trong website: xem gia phả nằm ngang, nằm dọc, xem gia phả trong vòng 5 đời, xem thông tin chi tiết của các thành viên trong gia phả, xem các thông tin liên quan của một gia phả như phả ký, thủy tổ, tộc ước, hương hỏa
T m kiếm gia phả: Người dùng vãng lai có th t m kiếm gia phả, hay thành viên gia phả
Có th liên hệ với ban quản trị website
Đăng k làm thành viên của website
15 Thêm thành viên trong gia phả của user sở hữu
16 Xóa thành viên trong gia phả của user sở hữu
17 Sửa thành viên trong gia phả của user sở hữu
18 T m kiếm gia phả
19 T m kiếm thành viên gia phả
20 Tạo mới gia phả
21 Xóa gia phả của user sở hữu
22 Ch nh sửa thông tin tài khoản
23 Upload hình, video
24 Gửi email thông báo đám giỗ
25 Liên hệ
Trang 393.1.1.3 Người dùng là thành viên
Xem gia phả trong website: xem gia phả nằm ngang, nằm dọc, xem gia phả trong vòng 5 đời, xem thông tin chi tiết của các thành viên trong gia phả, xem các thông tin liên quan của một gia phả như phả ký, thủy tổ, tộc ước, hương hỏa
Thành viên có th tạo mới gia phả hoặc xóa gia phả do m nh tạo
o Điều kiện: người quản lý đăng nhập thành công vào hệ thống
Thành viên có th sửa gia phả do m nh tạo: thêm thành viên trong gia phả, xóa thành viên, sửa thông tin thành viên, ch nh sửa các thông tin liên quan đến gia phả như phả ký, thủy tổ, tộc ước, hương hỏa
o Điều kiện: người quản lý đăng nhập thành công vào hệ thống
T m kiếm gia phả: thành viên có th t m kiếm gia phả, hay t m thành viên trong một gia phả
Ch nh sửa thông tin cá nhân: họ tên, địa ch , số điên thoại, đổi mật khẩu…
o Điều kiện: người quản lý đăng nhập thành công vào hệ thống
Upload h nh cá nhân, h nh của gia phả, gửi email thông báo đám giỗ
o Điều kiện: người quản lý đăng nhập thành công vào hệ thống
Liên hệ với ban quản trị website
3.2 Yêu cầu phi chức năng
3.2.1 Tổng quan các yêu cầu phi chức năng
Bảng 3-3: Các yêu cầu phi chức năng
1 Yêu cầu về tính sử dụng
Giao diện website thân thiện với người d ng
Các chức năng tiện d ng cho người d ng
2 Yêu cầu về công nghệ và các ràng buộc
Công nghệ
Mở rộng trong tương lai
3 Yêu cầu về giao tiếp
Giao tiếp với người d ng
Giao tiếp với phần cứng
Trang 404 Các yêu cầu tài liệu cho người dùng
Tài liệu hướng dẫn cài đặt website gia phả
Tài liệu hướng dẫn sử d ng website gia phả
3.2.2 Chi tiết các yêu cầu
3.2.2.1 Yêu cầu về tính sử dụng
Giao diện website thân thiện với người d ng
o Giao diện gọn gàng, phân chia rõ t ng m c, t ng thành phần
o Th hiện chi tiết thông tin các gia phả một cách trực quan nhất
Các chức năng tiện d ng cho người d ng
o Không đ t nh trạng quá nhiều chức năng làm rắc rối người d ng và phức tạp giao diện
o Không đ t nh trạng quá nhiều bước khiến người d ng mất thời gian trong thao tác
3.2.2.2 Yêu cầu về công nghệ và các ràng buộc
Chương tr nh đáp ứng đư c các yêu cầu sau:
Công nghệ
o Ứng d ng đư c phát tri n trên nền công nghệ Website mã nguồn mở
sử d ng Php, Mysql, Javascript, Html, css… kết h p framework CodeIgniter
o Các phần mềm cần sử d ng là công c lập tr nh PHP, MySql, Google Visualization API - Org Chart
Mở rộng trong tương lai
o Ứng d ng đư c thiết kế theo hướng có khả năng phát tri n những tính năng mới trong tương lai hoặc t ch h p vào một hệ thống các ứng d ng khác dễ dàng
3.2.2.3 Yêu cầu về giao tiếp
Giao tiếp với người d ng
o Giao diện chương tr nh hi n thị ngôn ngữ tiếng việt
Giao tiếp với phần cứng
Chương tr nh chạy trên máy với cấu h nh tối thi u:
o PC Pentium IV
o RAM 512MB