anhchanghaudau
03-12-2010, 23:07
Nguồn http://linq2js.blogspot.com/2010/12/2-phut-lieu-co-lam-uoc-cms-khong.html
Hì hì, khi đọc tiêu đề gây "sốc" và "ngộ độc" tập thể này, có nhiều bạn sẽ nghĩ mình "siêu phét" hoặc chí ít cũng thuộc loại "phét có bằng cấp". Tất nhiên để tạo 1 CMS ngon lành theo hướng "tự xử" chí ít cũng tốn không ít "xương máu" và thời gian, nhanh thì 2-3 ngày, lâu thì 1 tháng, nếu sử dụng mã nguồn mở thì phải tìm hiểu cấu hình rắc rối, nếu sử dụng software phát sinh mã thì "chắc là có thể".
Quên mất chưa giới thiệu, CMS này là một dạng quản trị và cập nhật thông tin đơn giản, có đầy đủ chức năng Thêm, Xóa, Sửa, Lọc và cuối cùng là nó chạy trên môi trường Windows và sử dụng công nghệ .NET. Đặc biệt CMS này sử dụng LINQ đấy, rất thú vị và tiện phát triển sau này.
[HR]
Chuẩn bị
Để làm được điều này vui lòng chuẩn bị "rau củ quả: như sau:
Có cài đặt sẵn phiên bản .NET 3.5 hoặc 4.0 trên máy
Thêm một bộ Visual Studio nhé và phải là phiên bản 2010 (có thể là 2008 nhưng cần cài thêm một số gói dịch vụ khác, bạn nào có nhu cầu thì mình sẽ gửi thông tin)
Một cơ sở dữ liệu SQL 2005.
30 giây đầu tiên
Ngắm bộ Visual Studio khởi động, tùy máy nhanh hay chậm, nhưng thôi cứ cho là 15 giây khởi động đi.
Tạo một website
Chọn loại ngôn ngữ yêu thích VB hoặc C#.
Chọn loại website là ASP.NET Dynamic Data LINQ to SQL Website
http://1.bp.blogspot.com/_-GHT-kgNuYI/TPkB2KM_3JI/AAAAAAAAAKE/NWul8OuTQHs/s400/1.jpg (http://1.bp.blogspot.com/_-GHT-kgNuYI/TPkB2KM_3JI/AAAAAAAAAKE/NWul8OuTQHs/s1600/1.jpg)
Website đã được tạo với cấu trúc thư mục như sau
http://4.bp.blogspot.com/_-GHT-kgNuYI/TPkBss1tn-I/AAAAAAAAAKA/R4RxLrTmgMM/s1600/2.jpg (http://4.bp.blogspot.com/_-GHT-kgNuYI/TPkBss1tn-I/AAAAAAAAAKA/R4RxLrTmgMM/s1600/2.jpg)
30 giây tiếp theo
Chuẩn bị cho kết nối với cơ sở dữ liệu
Nếu bạn không thấy cửa sở Server Explorer thì có thể vào menu View -> Server Explorer
Chọn phần Data Connections
Sau đó nhấn chuột phải để thấy menu xổ và chọn Add Connection...
Nhập thông tin kết nối vào hộp thoại, ở đây máy mình có tên SQL Server là localhost\sql2005, nếu máy bạn chỉ có cài 1 phiên bản SQL thì có thể điền là (local).
Chọn database sử dụng để tạo CMS, mình sẽ dùng Northwind, nếu bạn chưa có database mẫu thì có thể tải về một bản để làm thử (tải tại đây (http://download.microsoft.com/download/d/e/5/de57f203-3140-43e0-9473-d694d45bbd9b/SQL2000SampleDb.msi), trong đây có 2 database mẫu là Northwind và Pubs)
http://4.bp.blogspot.com/_-GHT-kgNuYI/TPkEfHMqYHI/AAAAAAAAAKI/DeH6UTyDr0w/s400/3.jpg (http://4.bp.blogspot.com/_-GHT-kgNuYI/TPkEfHMqYHI/AAAAAAAAAKI/DeH6UTyDr0w/s1600/3.jpg)
Sau khi kết nối thì cấu trúc database sẽ hiển thị như sau:
http://2.bp.blogspot.com/_-GHT-kgNuYI/TPkGh7W2IyI/AAAAAAAAAKM/fpdeNzoxDJE/s1600/4.jpg (http://2.bp.blogspot.com/_-GHT-kgNuYI/TPkGh7W2IyI/AAAAAAAAAKM/fpdeNzoxDJE/s1600/4.jpg)
30 giây đầu của phút thứ 2
Tạo mới một tập tin cho website bằng cách
http://4.bp.blogspot.com/_-GHT-kgNuYI/TPkHjUxAcQI/AAAAAAAAAKQ/BUCY6BwaNZ4/s400/5.jpg (http://4.bp.blogspot.com/_-GHT-kgNuYI/TPkHjUxAcQI/AAAAAAAAAKQ/BUCY6BwaNZ4/s1600/5.jpg)
Chọn menu File -> New file...
Chọn loại tập tin là LINQ to SQL Classes, bạn có thể đặt tên tập tin là DB
Một cửa sổ chỉnh sửa hiện ra
Bạn "nắm đầu" những table của cơ sở dữ liệu từ cửa sổ Server Explorer và kéo thả vào vùng soạn thảo màu trắng, bạn sẽ được một cấu trúc quan hệ của những class do Visual Studio phát sinh dựa trên cơ sở dữ liệu của bạn
http://2.bp.blogspot.com/_-GHT-kgNuYI/TPkJbGV8lqI/AAAAAAAAAKU/03lWZN1JeJQ/s400/6.jpg (http://2.bp.blogspot.com/_-GHT-kgNuYI/TPkJbGV8lqI/AAAAAAAAAKU/03lWZN1JeJQ/s1600/6.jpg)
Lưu lại và đóng vùng soạn thảo dành cho tập tin DB
Chỉ còn 30 giây thôi
Trong cửa sổ Solution Explorer, tìm đến tập tin gloabl.asax, nhấp đúp vào để soạn thảo nó.
http://2.bp.blogspot.com/_-GHT-kgNuYI/TPkLsZdaclI/AAAAAAAAAKY/e6IrotOyzpU/s400/7.jpg (http://2.bp.blogspot.com/_-GHT-kgNuYI/TPkLsZdaclI/AAAAAAAAAKY/e6IrotOyzpU/s1600/7.jpg)
Bạn sẽ thấy một đoạn mã lệnh được mở ra, có rất nhiều dòng viết sẵn và nhiều dòng được đánh dấu chú thích.
Tìm đến dòng 17, có nội dung như sau
//model.RegisterContext(typeof(YourDataContextType), new ContextConfiguration() { ScaffoldAllTables = false });
Bạn sao chép dòng này sang dòng 18 và bỏ chú thích dòng này đi, sau đó sửa tại typeof(YourDataContextType) thành typeof(DBDataContext), nếu lúc nãy bạn đặt tên tập tin LINQ to SQL là DB thì có nghĩa tên class đầy đủ là DBDataContext (Visual Studio tự động thêm hậu tố DataContext vào).
Sửa tiếp chỗ ScaffoldAllTables = false thành ScaffoldAllTables = true
Lưu và đóng cửa sổ soạn thảo lại.
Nhấn nhanh nào F5 để cho kịp 2 phút, bây giờ cầm một cốc cà phê và thưởng thức thành quả 120 giây của mình đê.
Chạy thử
Giao diện trang chủ cũng khá "mướt", trình bày tất cả những bảng của cơ sở dữ liệu
http://4.bp.blogspot.com/_-GHT-kgNuYI/TPkMurRYLRI/AAAAAAAAAKc/BwFTg3IewNA/s320/7.png (http://4.bp.blogspot.com/_-GHT-kgNuYI/TPkMurRYLRI/AAAAAAAAAKc/BwFTg3IewNA/s1600/7.png)
Còn đây là một danh sách dữ liệu của một bảng
http://4.bp.blogspot.com/_-GHT-kgNuYI/TPkOhK7oWSI/AAAAAAAAAKg/CLlrMI03EeM/s400/8.jpg (http://4.bp.blogspot.com/_-GHT-kgNuYI/TPkOhK7oWSI/AAAAAAAAAKg/CLlrMI03EeM/s1600/8.jpg)
Tuyệt chưa nào, trông cũng pro đấy. Có những công cụ đã được phát sinh:
Lọc theo trường có kiểu dữ liệu true / false
Lọc theo danh mục sản phẩm
Lọc theo nhà cung cấp
Thao tác Sửa
Thao tác Xóa
Thao tác Xem
Dùng checkbox hiển thị trường có kiểu true / false đó nha
Xem được cả bảng phụ danh sách những chi tiết hóa đơn của từng sản phẩm
Có thể xem thông tin danh mục sản phẩm của từng sản phẩm
Và xem được cả thông tin nhà cung cấp
Chuẩn luôn, có hẳn bộ phân trang, nhảy trang trực tiếp bằng cách nhập số và nhấn enter
Còn có cả bộ chỉ định số mục hiển thị nữa nè
Còn đây là nút thêm sản phẩm
Đó là những điều khiển chung của một trang danh sách, tất cả những thao tác lọc, chuyển trang, đổi số mục hiển thị đều sử dụng Ajax.
Trang sửa dữ liệu
http://1.bp.blogspot.com/_-GHT-kgNuYI/TPkQrYpQ2XI/AAAAAAAAAKk/pihZuwh6v24/s320/9.jpg (http://1.bp.blogspot.com/_-GHT-kgNuYI/TPkQrYpQ2XI/AAAAAAAAAKk/pihZuwh6v24/s1600/9.jpg)
Dùng textbox để nhập liệu cho phần lớn các trường
Những trường có kiểu tru / false thì dùng checkbox
Những trường tham chiếu đến bảng cha thì dùng hộp xổ
Lệnh cập nhật hoặc hủy cập nhật
Trang thông tin chi tiết
http://1.bp.blogspot.com/_-GHT-kgNuYI/TPkRcTPI2DI/AAAAAAAAAKo/LM2vjB5wS-g/s1600/10.jpg (http://1.bp.blogspot.com/_-GHT-kgNuYI/TPkRcTPI2DI/AAAAAAAAAKo/LM2vjB5wS-g/s1600/10.jpg)
Cũng trang bị những liên kết tham chiếu đến bảng cha, bảng con
Và những thao tác trực tiếp: Xóa, Sửa
Ưu điểm
Với những thao tác đơn giản, gọn nhẹ, "mì ăn liền", việc tạo CMS như thế này sẽ giúp cho việc nhập liệu dữ liệu mẫu vào thật đơn giản mà không phải làm nhiều thao tác hoặc tốn sức lập trình. CMS này cũng thích hợp cho những sản phẩm nhỏ, những sản phẩm giới thiệu, dùng thử (demo).
Nhược điểm
Vì nhỏ gọn nên chức năng tạo sẵn khá ít.
Hướng phát triển
Tất nhiên, đồ chùa, đổ tạo sẵn thì không hoàn thiện, nhưng không có nghĩa là không thể phát triển. Với những tính năng cơ bản đó, bạn có thể tùy biến thêm những chức năng nâng cao như:
Tạo phần quản lý đa ngôn ngữ
Tạo đăng nhập, quản lý quyền thành viên
Tạo thêm nhiều loại điều khiển cho từng loại trường dữ liệu theo yêu cầu
Đặt lại tên những trường tùy biến theo ý nghĩa khác
Giới hạn những mục được chỉnh sửa / được xem
...
Cấu trúc CMS này khá chuẩn, bạn có thể tùy biến nhiều, mọi thứ chỉ phụ thuộc vào độ "mò" và sáng tạo của bạn.
Thao khảo
Thêm phần quản trị và phân quyền http://forums.asp.net/t/1343958.aspx
Tạo thêm một số điều khiển để nhập liệu http://csharpbits.notaclue.net/2009/06/html-editor-fieldtemplate-for-dynamic.html
Tạo thêm những trang chỉnh sửa tùy theo bảng dữ liệu http://csharpbits.notaclue.net/2008/07/dynamic-data-and-custom-pages.html
Tạo những bộ lọc dữ liệu nâng cao http://csharpbits.notaclue.net/2009/01/dynamic-data-filtering-installation.html
Sắp xếp danh sách dữ liệu http://code.msdn.microsoft.com/ddcolumnsordering
Hì hì, khi đọc tiêu đề gây "sốc" và "ngộ độc" tập thể này, có nhiều bạn sẽ nghĩ mình "siêu phét" hoặc chí ít cũng thuộc loại "phét có bằng cấp". Tất nhiên để tạo 1 CMS ngon lành theo hướng "tự xử" chí ít cũng tốn không ít "xương máu" và thời gian, nhanh thì 2-3 ngày, lâu thì 1 tháng, nếu sử dụng mã nguồn mở thì phải tìm hiểu cấu hình rắc rối, nếu sử dụng software phát sinh mã thì "chắc là có thể".
Quên mất chưa giới thiệu, CMS này là một dạng quản trị và cập nhật thông tin đơn giản, có đầy đủ chức năng Thêm, Xóa, Sửa, Lọc và cuối cùng là nó chạy trên môi trường Windows và sử dụng công nghệ .NET. Đặc biệt CMS này sử dụng LINQ đấy, rất thú vị và tiện phát triển sau này.
[HR]
Chuẩn bị
Để làm được điều này vui lòng chuẩn bị "rau củ quả: như sau:
Có cài đặt sẵn phiên bản .NET 3.5 hoặc 4.0 trên máy
Thêm một bộ Visual Studio nhé và phải là phiên bản 2010 (có thể là 2008 nhưng cần cài thêm một số gói dịch vụ khác, bạn nào có nhu cầu thì mình sẽ gửi thông tin)
Một cơ sở dữ liệu SQL 2005.
30 giây đầu tiên
Ngắm bộ Visual Studio khởi động, tùy máy nhanh hay chậm, nhưng thôi cứ cho là 15 giây khởi động đi.
Tạo một website
Chọn loại ngôn ngữ yêu thích VB hoặc C#.
Chọn loại website là ASP.NET Dynamic Data LINQ to SQL Website
http://1.bp.blogspot.com/_-GHT-kgNuYI/TPkB2KM_3JI/AAAAAAAAAKE/NWul8OuTQHs/s400/1.jpg (http://1.bp.blogspot.com/_-GHT-kgNuYI/TPkB2KM_3JI/AAAAAAAAAKE/NWul8OuTQHs/s1600/1.jpg)
Website đã được tạo với cấu trúc thư mục như sau
http://4.bp.blogspot.com/_-GHT-kgNuYI/TPkBss1tn-I/AAAAAAAAAKA/R4RxLrTmgMM/s1600/2.jpg (http://4.bp.blogspot.com/_-GHT-kgNuYI/TPkBss1tn-I/AAAAAAAAAKA/R4RxLrTmgMM/s1600/2.jpg)
30 giây tiếp theo
Chuẩn bị cho kết nối với cơ sở dữ liệu
Nếu bạn không thấy cửa sở Server Explorer thì có thể vào menu View -> Server Explorer
Chọn phần Data Connections
Sau đó nhấn chuột phải để thấy menu xổ và chọn Add Connection...
Nhập thông tin kết nối vào hộp thoại, ở đây máy mình có tên SQL Server là localhost\sql2005, nếu máy bạn chỉ có cài 1 phiên bản SQL thì có thể điền là (local).
Chọn database sử dụng để tạo CMS, mình sẽ dùng Northwind, nếu bạn chưa có database mẫu thì có thể tải về một bản để làm thử (tải tại đây (http://download.microsoft.com/download/d/e/5/de57f203-3140-43e0-9473-d694d45bbd9b/SQL2000SampleDb.msi), trong đây có 2 database mẫu là Northwind và Pubs)
http://4.bp.blogspot.com/_-GHT-kgNuYI/TPkEfHMqYHI/AAAAAAAAAKI/DeH6UTyDr0w/s400/3.jpg (http://4.bp.blogspot.com/_-GHT-kgNuYI/TPkEfHMqYHI/AAAAAAAAAKI/DeH6UTyDr0w/s1600/3.jpg)
Sau khi kết nối thì cấu trúc database sẽ hiển thị như sau:
http://2.bp.blogspot.com/_-GHT-kgNuYI/TPkGh7W2IyI/AAAAAAAAAKM/fpdeNzoxDJE/s1600/4.jpg (http://2.bp.blogspot.com/_-GHT-kgNuYI/TPkGh7W2IyI/AAAAAAAAAKM/fpdeNzoxDJE/s1600/4.jpg)
30 giây đầu của phút thứ 2
Tạo mới một tập tin cho website bằng cách
http://4.bp.blogspot.com/_-GHT-kgNuYI/TPkHjUxAcQI/AAAAAAAAAKQ/BUCY6BwaNZ4/s400/5.jpg (http://4.bp.blogspot.com/_-GHT-kgNuYI/TPkHjUxAcQI/AAAAAAAAAKQ/BUCY6BwaNZ4/s1600/5.jpg)
Chọn menu File -> New file...
Chọn loại tập tin là LINQ to SQL Classes, bạn có thể đặt tên tập tin là DB
Một cửa sổ chỉnh sửa hiện ra
Bạn "nắm đầu" những table của cơ sở dữ liệu từ cửa sổ Server Explorer và kéo thả vào vùng soạn thảo màu trắng, bạn sẽ được một cấu trúc quan hệ của những class do Visual Studio phát sinh dựa trên cơ sở dữ liệu của bạn
http://2.bp.blogspot.com/_-GHT-kgNuYI/TPkJbGV8lqI/AAAAAAAAAKU/03lWZN1JeJQ/s400/6.jpg (http://2.bp.blogspot.com/_-GHT-kgNuYI/TPkJbGV8lqI/AAAAAAAAAKU/03lWZN1JeJQ/s1600/6.jpg)
Lưu lại và đóng vùng soạn thảo dành cho tập tin DB
Chỉ còn 30 giây thôi
Trong cửa sổ Solution Explorer, tìm đến tập tin gloabl.asax, nhấp đúp vào để soạn thảo nó.
http://2.bp.blogspot.com/_-GHT-kgNuYI/TPkLsZdaclI/AAAAAAAAAKY/e6IrotOyzpU/s400/7.jpg (http://2.bp.blogspot.com/_-GHT-kgNuYI/TPkLsZdaclI/AAAAAAAAAKY/e6IrotOyzpU/s1600/7.jpg)
Bạn sẽ thấy một đoạn mã lệnh được mở ra, có rất nhiều dòng viết sẵn và nhiều dòng được đánh dấu chú thích.
Tìm đến dòng 17, có nội dung như sau
//model.RegisterContext(typeof(YourDataContextType), new ContextConfiguration() { ScaffoldAllTables = false });
Bạn sao chép dòng này sang dòng 18 và bỏ chú thích dòng này đi, sau đó sửa tại typeof(YourDataContextType) thành typeof(DBDataContext), nếu lúc nãy bạn đặt tên tập tin LINQ to SQL là DB thì có nghĩa tên class đầy đủ là DBDataContext (Visual Studio tự động thêm hậu tố DataContext vào).
Sửa tiếp chỗ ScaffoldAllTables = false thành ScaffoldAllTables = true
Lưu và đóng cửa sổ soạn thảo lại.
Nhấn nhanh nào F5 để cho kịp 2 phút, bây giờ cầm một cốc cà phê và thưởng thức thành quả 120 giây của mình đê.
Chạy thử
Giao diện trang chủ cũng khá "mướt", trình bày tất cả những bảng của cơ sở dữ liệu
http://4.bp.blogspot.com/_-GHT-kgNuYI/TPkMurRYLRI/AAAAAAAAAKc/BwFTg3IewNA/s320/7.png (http://4.bp.blogspot.com/_-GHT-kgNuYI/TPkMurRYLRI/AAAAAAAAAKc/BwFTg3IewNA/s1600/7.png)
Còn đây là một danh sách dữ liệu của một bảng
http://4.bp.blogspot.com/_-GHT-kgNuYI/TPkOhK7oWSI/AAAAAAAAAKg/CLlrMI03EeM/s400/8.jpg (http://4.bp.blogspot.com/_-GHT-kgNuYI/TPkOhK7oWSI/AAAAAAAAAKg/CLlrMI03EeM/s1600/8.jpg)
Tuyệt chưa nào, trông cũng pro đấy. Có những công cụ đã được phát sinh:
Lọc theo trường có kiểu dữ liệu true / false
Lọc theo danh mục sản phẩm
Lọc theo nhà cung cấp
Thao tác Sửa
Thao tác Xóa
Thao tác Xem
Dùng checkbox hiển thị trường có kiểu true / false đó nha
Xem được cả bảng phụ danh sách những chi tiết hóa đơn của từng sản phẩm
Có thể xem thông tin danh mục sản phẩm của từng sản phẩm
Và xem được cả thông tin nhà cung cấp
Chuẩn luôn, có hẳn bộ phân trang, nhảy trang trực tiếp bằng cách nhập số và nhấn enter
Còn có cả bộ chỉ định số mục hiển thị nữa nè
Còn đây là nút thêm sản phẩm
Đó là những điều khiển chung của một trang danh sách, tất cả những thao tác lọc, chuyển trang, đổi số mục hiển thị đều sử dụng Ajax.
Trang sửa dữ liệu
http://1.bp.blogspot.com/_-GHT-kgNuYI/TPkQrYpQ2XI/AAAAAAAAAKk/pihZuwh6v24/s320/9.jpg (http://1.bp.blogspot.com/_-GHT-kgNuYI/TPkQrYpQ2XI/AAAAAAAAAKk/pihZuwh6v24/s1600/9.jpg)
Dùng textbox để nhập liệu cho phần lớn các trường
Những trường có kiểu tru / false thì dùng checkbox
Những trường tham chiếu đến bảng cha thì dùng hộp xổ
Lệnh cập nhật hoặc hủy cập nhật
Trang thông tin chi tiết
http://1.bp.blogspot.com/_-GHT-kgNuYI/TPkRcTPI2DI/AAAAAAAAAKo/LM2vjB5wS-g/s1600/10.jpg (http://1.bp.blogspot.com/_-GHT-kgNuYI/TPkRcTPI2DI/AAAAAAAAAKo/LM2vjB5wS-g/s1600/10.jpg)
Cũng trang bị những liên kết tham chiếu đến bảng cha, bảng con
Và những thao tác trực tiếp: Xóa, Sửa
Ưu điểm
Với những thao tác đơn giản, gọn nhẹ, "mì ăn liền", việc tạo CMS như thế này sẽ giúp cho việc nhập liệu dữ liệu mẫu vào thật đơn giản mà không phải làm nhiều thao tác hoặc tốn sức lập trình. CMS này cũng thích hợp cho những sản phẩm nhỏ, những sản phẩm giới thiệu, dùng thử (demo).
Nhược điểm
Vì nhỏ gọn nên chức năng tạo sẵn khá ít.
Hướng phát triển
Tất nhiên, đồ chùa, đổ tạo sẵn thì không hoàn thiện, nhưng không có nghĩa là không thể phát triển. Với những tính năng cơ bản đó, bạn có thể tùy biến thêm những chức năng nâng cao như:
Tạo phần quản lý đa ngôn ngữ
Tạo đăng nhập, quản lý quyền thành viên
Tạo thêm nhiều loại điều khiển cho từng loại trường dữ liệu theo yêu cầu
Đặt lại tên những trường tùy biến theo ý nghĩa khác
Giới hạn những mục được chỉnh sửa / được xem
...
Cấu trúc CMS này khá chuẩn, bạn có thể tùy biến nhiều, mọi thứ chỉ phụ thuộc vào độ "mò" và sáng tạo của bạn.
Thao khảo
Thêm phần quản trị và phân quyền http://forums.asp.net/t/1343958.aspx
Tạo thêm một số điều khiển để nhập liệu http://csharpbits.notaclue.net/2009/06/html-editor-fieldtemplate-for-dynamic.html
Tạo thêm những trang chỉnh sửa tùy theo bảng dữ liệu http://csharpbits.notaclue.net/2008/07/dynamic-data-and-custom-pages.html
Tạo những bộ lọc dữ liệu nâng cao http://csharpbits.notaclue.net/2009/01/dynamic-data-filtering-installation.html
Sắp xếp danh sách dữ liệu http://code.msdn.microsoft.com/ddcolumnsordering