+Xây dựng Hệ thống Quản trị Nội dung với ASP Phần I
Tưởng tượng một site tin tức đơn giản có 2 người viết cập nhật 2 lần mỗi
ngày. Nếu không có hệ thống Quản trị nội dung, người viết sẽ phải tải mã
nguồn của trang hiện tại về, thêm tin mới của họ vào, rồi tải trang lên và thông
báo cho người kia biết trang này đã được cập nhật để tránh bị ghi đè lên. Với
một site lớn, các tin tức được cập nhật liên tục trong ngày, và nội dung trên site
ngày càng mở rộng, hệ thống như vậy sẽ không làm việc được. Đó là lúc chúng
ta cần tới một Hệ thống Quản trị Nội dung
Quản trị nội dung (Content Management) là gì?
Khi phát triển nội dung trên một site, chắc chắn bạn muốn công việc của mình tốn ít
công sức và dễ dàng nhất có thể được. Nếu không, bạn sẽ bị sa lầy mãi với những
công việc mang tính chất thủ công như viết mã HTML hay kiểm soát chia sẻ tài
nguyên. Bạn cần một hệ thống hạn chế được công việc không quan trọng và cho
phép bạn tập trung vào nội dung thực sự. Bạn cần một hệ thống cho phép người sử
dụng dễ dàng gửi bài viết, hệ thống để bạn kiểm duyệt và công khai bài viết mà
không phải soạn một loạt các trang HTML.
Tưởng tượng một site tin tức đơn giản có 2 người viết cập nhật 2 lần mỗi ngày.
Nếu không có hệ thống Quản trị nội dung, người viết sẽ phải tải mã nguồn của
trang hiện tại về, thêm tin mới của họ vào, rồi tải trang lên và thông báo cho người
kia biết trang này đã được cập nhật để tránh bị ghi đè lên. Với một site lớn, các tin
tức được cập nhật liên tục trong ngày, và nội dung trên site ngày càng mở rộng, hệ
thống như vậy sẽ không làm việc được. Đó là lúc chúng ta cần tới một Hệ thống
Quản trị Nội dung
Vậy một Hệ thống Quản trị Nội dung tốt bao gồm những phần nào?
Cho phép người viết dễ dàng gửi bài đảm bảo một bản ghi mới sẽ được tạo, ghi
nhận bài mới đã được gửi lên Cho phép người biên tập dễ dàng kiểm duyệt, và công
khai nội dung Đảm bảo trình bày nội dung phù hợp với thiết kế hiện tại Những việc
trên có thể thực hiện mà không phải can thiệp vào bất kỳ trang HTML nào và thực
hiện một cách dễ nhất có thể.
Dưới đây là cách xây dựng một hệ thống như vậy bằng ASP.
Mô đun gửi bài
Có hai cách xây dựng hệ thống gửi bài. Bạn có thể cho phép người gửi bài sử dụng
một trình biên soạn của họ hay buộc họ sử dụng một form trên nền Web (với các
thành phần textarea) để gửi nội dung. Hiển nhiên, cách đầu tiên mạnh và thân thiện
hơn với người viết, nhưng khó hơn so với cách sau. Bạn cũng phải xác định nội dung
đưa lên sẽ được đặt ở đâu, thường được hiểu là đưa vào một tệp tin đặt trên server.
Người viết lựa chọn?
Chúng ta đã nói về phương thức gửi bài thứ nhất: để cho người viết tự chọn chọn
trình soạn thảo của mình. Trong khi đây là định hướng tốt nhất, có một vài vấn đề
về tính tương thích được đặt ra. Đầu tiên, đó là việc người viết có thể sử dụng
những chương trình xử lý văn bản khác nhau, và xảy ra trường hợp người này không
thể đọc được văn bản của người khác. Vì thế trừ khi bạn muốn mua bản quyền cho
tất cả các trình biên soạn khác nhau mà mọi người sử dụng, bạn sẽ phải phối hợp
các phiên bản tương thích. Vấn đề hiển nhiên nữa là để mọi người có thể đọc bài
viết trực tuyến, bài viết cần trong định dạng plain text; các định dạng Word Perfect,
Lotus, MS Word, …không hoạt động. Vì vậy trước hết sẽ phải chuyển đổi văn bản
thành plain text.
Trừ khi bạn biết định dạng tệp tin nhị phân của văn bản và với rất nhiều nỗ lực xây
dựng chương trình, hoặc một bản copy của ứng dụng được cài đặt trên server, hầu
như bạn không thể lấy được các đoạn text nội dung thực sự hoặc hình ảnh trong tệp
văn bản. Vì vậy, một giải pháp là yêu cầu người viết chuyển đổi văn bản thành một
dạng mà bạn có thể dễ dàng thao tác hơn. Nhiều trình xử lý văn bản phổ biến hiện
nay cho phép bạn ‘export as html’ hoặc ‘save as web page’. Hoặc đơn giản hơn là bạn
chỉ nhận các tệp tin HTML hoặc text được gửi.
Tuy nhiên, nếu các lựa chọn ở trên đều không khả thi, bạn sẽ phải sử dụng đến
phương thức thứ hai, bắt buộc người viết gửi nội dung qua form dựa trên web.
Phần Backend
Trước khi chúng ta thực sự bắt đầu xây dựng hệ thống gửi bài, cần tạo cơ sở dữ
liệu cho hệ thống. Các bảng chúng ta tạo sẽ chứa thông tin quan trọng về nội dung.
Đây là một cấu trúc cơ sở dữ liệu ví dụ cho hệ thống gửi bài chúng ta đang tạo:
Bạn có thể mở rộng thêm những trường bạn muốn, nhưng đây là một khung cơ bản
để bắt đầu.
Chức năng
Chúng ta sẽ sử dụng giao diện kiểu wizard – đó là người sử dụng chọn một vài
option, chọn nút Next, chọn thêm một vài option, chọn nút Next, … Điều này sẽ dễ
dàng hơn cho người sử dụng, và dễ dàng hơn trong gỡ rối cho người phát triển. Cách
bạn thiết kế một wizard theo hướng dẫn sau:
- Mỗi bước trong wizard được thực hiện trên một trang đơn.
- Bất kỳ form nào trên một trang sẽ trỏ đến cùng trang đó (trong phần action)
- Đưa đoạn script xử lý cho form vào một nơi nào đó trên trang, thường ở đầu trang
- Sau khi thực hiện đoạn script, nếu thành công, chuyển user đến bước tiếp theo
Ví dụ, đây là một đoạn mã từ một tệp tin có tên form.asp:
ASPUpload (http://www.persits.com)
Nhưng đây là hai công cụ có thu phí. Một công cụ miễn phí tuyệt vời là:
EZ Site Upload Lite (http://www.dougdean.com/EZsiteUpLoadSite.htm)
Bạn có thể tạo một script ASP thay thế cho đối tượng COM. Nếu bạn quyết định
cho phép người viết gửi bài của họ qua form của trang, thì bạn không cần biết về các
đối tượng COM trên. Thay vào đó, người viết phải gõ hoặc cắt và dán bài viết vào
trường textarea trên form của trang.
Tệp đã tải lên Server. Bước tiếp theo?
Nếu bạn đi theo cách 2 ở trên, đoạn mã ASP cần phải biết tên tệp tin. Nếu không,
bạn sẽ phải xây dựng thêm một bước để hỏi người sử dụng về tên tệp tin. Ngay khi
bạn có, bạn lưu tên tệp tin này (và có thể cả đường dẫn tuyệt đối của tệp tin) vào
trong cơ sở dữ liệu. Đoạn mã sau sẽ nhập tên tệp tin vào cơ sở dữ liệu:
Bây giờ khi bạn cần thông tin trong bước tiếp theo, chỉ cần gọi
Request.Querystring(“ID”) và bạn sẽ biết tài liệu nào bạn đang làm việc ở bước
trước đó.
Bước 2 – Các thao tác
Bây giờ tệp tin đã được tải lên và bạn có tên tệp tin, đây là là lúc để làm một vài thao
tác với tệp tin. Chúng ta sẽ sử dụng Tệp tin System Object để thực hiện công việc.
Nếu bạn đã chuyển đổi tài liệu từ một định dạng văn bản sang HTML, có thể có một
loạt các thẻ bổ sung mà bạn không muốn xuất hiện. Chẳng hạn như, Microsoft Word
thêm một loạt các thẻ lệnh XML và CSS để chuyển đổi văn bản HTML trở thành
văn bản Word. Mặc dù, các thẻ lệnh bổ sung này thêm rất nhiều ở trên đầu văn bản
HTML, vậy nếu bạn không có kế hoạch chuyển ngược lại văn bản thành định dạng
Word, bạn nên xoá tất cả các thẻ lệnh bổ xung này. Điều này có thể được thực hiện
với một loạt thao tác thay thế.
Const fsoForReading = 1
Dim objFSO
Set objFSO = Server.CreateObject("Scripting.Tệp tinSystemObject")Nếu bạn muốn chia nhỏ tệp tin thành nhiều trang, bạn cũng có thể thực hiện tại đây.
Dưới đây là một số cách làm:
Tạo một bảng các trang tblPages. Bảng chứa thông tin về các trang trong tài liệu.
Bảng này sẽ chứa những dữ liệu như: Document ID, cho bạn biết trang này thuộc tài
liệu nào trong tblTệp tins; Page Title, một tiêu đề cho mỗi trang và Page Number, thứ
tự của các trang.
Thêm một trường mới trong tblTệp tins, trường NumberOfPages và tăng dần giá trị
của trường này mỗi lần bạn thêm một trang khác. Cách này, bạn sẽ biết bao nhiêu
trang trong mỗi văn bản mà không cần phải xem có bao nhiêu tệp tin thực sụ.
Đặt tên các tệp tin mới dựa vào tệp tin gốc. Chẳng hạn như, nếu văn bản gốc là
test.html, tên các trang 2 và 3 là test2.html và test3.html
Phân tích tệp tin để có một phân chia hợp lý. Bạn có thể chia trang theo số các thẻ
, hoặc cho phép người sử dụng tự do được đặt ngắt trang. Nếu bạn làm theo
cách thứ hai, bạn sẽ phải đánh dấu mỗi điểm mà người sử dụng chọn. Một cách tốt
để làm điều này là sử dụng một form với các checkbox chứa số cho mỗi thẻ phân
trang; ví dụ nếu user chọn checkbox 2, trang được tách ở đoạn (paraghraph) thứ 2.
Với mỗi trang tách ra, ghi nội dung vào một tệp tin mới. Đây là bước khó khăn nhất.
ở đây là đoạn mã thực hiện:
dim CursorFirst, CursorLast
strNextText = tệp tin contents
for each paragraph in strNextText
Set CursorFirst to beginning of paragraph (ie at position of )
If there is more than one paragraph in strNextText then
If this paragraph is not marked with a page break, then
Put all the text to the next paragraph in variable strText
Point CursorLast to CursorFirst
Else
Update tblTệp tins and tblPages with new page info
Write new tệp tin with strText
Clear strText
Put all the text to the next paragraph in variable strText
Put all the text after current paragraph in variable strNextText
Point CursorLast to first in strNextText
End if
Else if only one paragraph then
Write strText to a tệp tin
End If
Có thể bạn muốn đặt chức năng trên một trang phân tách. Điều này bạn nên bắt đầu
lúc phân chia tài liệu gốc thành nhiều trang.
Theo tạp chí Internet