Tải bản đầy đủ (.pdf) (8 trang)

Xây dựng Hệ thống Quản trị Nội dung với ASP - Phần I pot

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (142.17 KB, 8 trang )

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:

<%
các đoạn mã xử lý form
các đoạn mã khác
.
.
.
if code is successful then
Response.Redirect("form2.asp")
End If
%>


<html>
<form method=”post” action=”form.asp”<
các thành phần form
các thành phần form khác
</FORM>
<html>

Cách thức này hay hơn việc sử dụng một trang khác để xử lý cho phần action
của form. Nó cho phép bạn xây dựng giao diện kiểu wizard, xác nhận hợp lệ
form dễ dàng, và bạn có thể dễ dàng chuyển người sử dụng tới các mục trong
form được nhập dữ liệu không chính xác.

Bước gửi 1 – Đưa lên server

Giả sử rằng nội dung đã được viết và định dạng text t
ương thích. Làm cách nào
bạn có tệp tin trên server? Có 2 cách để thực hiện, bạn có thể:
1/ </>Cho tất cả người viết quyền truy nhập FTP để họ có thể tự tải lên
(upload) các tệp tin hoặc
2/ Xây dựng một form

Hai phương thức đều yêu cầu sự cấp quyền đặc biệt: phương thức 1 yêu cầu
cấp quyền ghi FTP, trong khi phương thức 2 yêu cầu hoặc đăng nhập vào
server hoặc cấp quyền ghi HTTP. Ngoài ta, với phương thức đầu ti
ên, quá trình
tải lên phải được thực hiện tách rời với bước quản trị , và sau đó bạn sẽ phải
cung cấp cho hệ thống quản trị tên tệp tin chính xác. Phương thức thứ hai sẽ
cung cấp cho bạn với tên tệp tin chính xác và có thể được tích hợp như một
phần của toàn bộ hệ thống.


N
ếu bạn quyết định phương hướng thứ hai, bạn sẽ cần hoặc một đối tượng
COM hoặc một lư
ợng kiến thức đủ về thực hiện form nhị phân HTML. Hai đối
tượng COM phổ biến được sử dụng để upload tệp tin là:

SA-Tệp tinup ()
ASPUpload ()

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 (

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:

<! #include virtual="/scripts/adovbs.inc" >


<%

set connFileName = Server.CreateObject("ADODB.Connection")
set rstFileName = Server.CreateObject("ADODB.Recordset")
connArticles.Open "dsn=my_db;Cơ Sậ Dữ LIệU=my_db"
strSQL = "SELECT * FROM tblTệp tins"
rstFileName.Open strSQL, connTệp tinName, adOpenKeySet,
adLockOptimistic
rstFileName.AddNew

rstFileName.FileName = "blah.html"< Thay thế tên tệp tin thực sự ở đây
rstFileName.Update
intID = rstFileName.UID

rstFileName.Close
set rstFileName = Nothing
connFileName.Close
set rstFileName = Nothing
%>

Bây giờ bạn đã có phương tiện để truy nhập tệp tin về sau. Trước khi thực hiện
tiếp, bạn muốn biết tài liệu nào sẽ sử dụng trong bước tiếp theo. Từ lúc form
trên trang này tự tham chiếu, bạn không thể gọi một Request.Form trong bước
tiếp theo để tính toán ID number của tài liệu bạn vừa gửi lên. Thay vào đó, ở
cuối của URL chuyển tiếp, gắn kèm một querystring với ID number, sử dụng
intID mà chúng ta vừa tạo ở trên:

Response.Redirect("step2.asp?ID" & intID)

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")< khởi
tạo tệp
Set objTextStream = objFSO.OpenTextTệp tin("C:\SomeTệp tin.html",
fsoForReading)
< mở tệp tin được upload
txtTệp tinContents = objTextStream.ReadAll
objTextStream.Close < đóng tệp tin
If instr(1, txtTệp tinContents, "<xml>", vbTextCompare) then < nếu <xml>
được tìm thấy, xoá nó đi

txtTệp tinContents = Replace(txtTệp tinContents, "<xml>", "", 1, -1,
vbTextCompare)
End If
< xoá bất kỳ thẻ lệnh khác mà bạn không muốn

Bây giờ ghi lại những thay đổi vừa được thực hiện

Const fsoForWriting = 2
Set objTextStream = objFSO.OpenTextTệp tin("C:\SomeTệp tin.html",
fsoForWriting)
< mở tệp tin được upload
objTextStream.Write(txtTệp tinContents)
objTextStream.Close < đóng tệp tin
set objFSO = Nothing

Chú ý rằng bạn đã phải sử dụng khá nhiều vòng lặp để loại bỏ các đoạn mã
HTML rác trong tài liệu. Bạn còn có thể thực hiện bất kỳ các thao tác tệp tin
khác ở đây, chẳng hạn như, thay đổi tên tệp tin, thay thế đoạn văn bản này
bằng đoạn văn bản khác hay thêm vào một style sheet …

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ẻ <p>, 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 <p>)
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 <p> 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

×