PDA

View Full Version : 2 phút liệu có "làm" được CMS không ?



anhchanghaudau
03-12-2010, 23:08
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

up2store
10-12-2010, 09:07
pó tay, biết CMS là gì ko mà gọi cái này là CMS?

anhchanghaudau
10-12-2010, 10:57
pó tay, biết CMS là gì ko mà gọi cái này là CMS?

:D :D, xém biết, bạn cứ chia sẻ CMS là gì :D

anhchanghaudau
10-12-2010, 15:11
xin chia bùn cùng bác vanduong

vumonteam
13-12-2010, 17:10
He, Đúng là dân Amatơ

bienca101
13-12-2010, 17:49
Tôi cám ơn anhchanghaudau đã viết bài hướng dẫn. Đây là bài viết rất phù hợp cho những bạn mới tìm hiểu cách viết asp.net trên .Net 3.5 trở đi.

Tôi cũng đồng ý với các bạn ở trên là tiêu đề tạo CMS không phù hợp lắm. Tác giả nên đổi lại cho dễ hiểu hơn chẳng hạn như "Hướng dẫn tạo website nhanh chóng với Dynamic Data Linq".

Ngoài ra, nếu được, tác giả nên nói rõ để các bạn mới không hiểu nhầm đây là cách duy nhất để viết asp.net website. Dynamic Data Linq thực chất là kỹ thuật website generator dựa trên ORM, và là một trong nhiều phương pháp khác nhau để viết website. Hoặc tốt hơn nữa, tác giả viết thêm để so sánh kỹ thuật này với cách thức cổ điển như tạo website và bind dữ liệu bằng tay thì hay quá.

banx
13-12-2010, 20:41
Hai phút thì làm được cái gì hả bạn !!!!

khoathi
13-12-2010, 20:48
Nhìn và làm theo bài viết của bạn chắc cũng 1/2 tiếng :))

hoangminh
13-12-2010, 21:15
Tôi cám ơn anhchanghaudauHoặc tốt hơn nữa, tác giả viết thêm để so sánh kỹ thuật này với cách thức cổ điển như tạo website và bind dữ liệu bằng tay thì hay quá.
Đồng ý 2 tay, nhưng mình muốn bác bienca làm một bài về vấn đề này hơn là chủ topic, từ khi công nghệ LINQ xuất hiện mình có xem sơ qua một vài ví dụ thì nó vẫn chưa thuyết phục mình lắm cho nên đến bi giờ mình vẫn chưa dùng LINQ mặc dù mình dang sử dụng Framework 4, mình rất muốn biết tổng thể về cả hai phương pháp cổ điển và hiện đại này để xem LINQ có thuyết phục được ko, vì phương pháp cổ điển thì mình cutom nó rất thoải mái và hầu như mình code tất cả mọi thứ chứ ít dùng đến các control hổ trợ như SqlDataAdapter hay SqlDataSource ..., nếu có dùng thì mình cũng code một vài thứ như connection, select, insert, update, delete chứ ko dùng Wizard theo kiểu step by step bởi vì kiểu s-b-s nó ko đáp ứng được yêu cầu của mình.

Rất mong anh bienca giúp mình về vấn đề này, nếu được thì sau khi anh post lên anh send giùm cái link qua địa chỉ mail hoangminh1703@gmail.com

Thank's very much.

anhchanghaudau
14-12-2010, 01:21
Hai phút thì làm được cái gì hả bạn !!!!

Vẫn được đấy thôi bạn à :D.

Đọc thì 30 phút, làm chừng 2-3 lần thì 2 phút là có thể. Đó mới chính là lợi ích dùng về lâu về dài, chứ làm một code mới lần đầu thì việc đọc hiểu đã ngốn thời gian rồi bạn ạ :D.

Còn về CMS, mình xin nói rõ ra là Hệ quản trị nội dung, có nghĩa là thứ gì dùng để quản trị nội được thì đều là CMS, CMS không nhất thiết phải có phân quyền, có user, hoặc có...có nhiều chức năng. Nếu gọi theo cách khác thì có thể nói đây là cách tạo CRUD (Create, Read, Update, Delete) cũng không sai :D.
Nên đôi khi chúng ta sử dụng những CMS, những Framework có chức năng CMS thực thụ, thì những thứ ít chức năng hơn chúng ta lại đánh giá đấy không phải là CMS.

fsviet
14-12-2010, 19:36
tham khảo thêm thế nào là CMS
http://en.wikipedia.org/wiki/Content_management_system#Component_content_manage ment_system