Professional Documents
Culture Documents
TP HAI
http://dvpub.com.vn/dv/details.aspx?itemid=371
http://codeprovn.com/forums/viewtopic.php?p=283
NH XUT BN HNG C
LI NI U
c gii php lp trnh ASP.NET 2.0 l quyn sch hon ho cho nhng ai
MT S CH DN
Cu trc ca sch
Quyn sch ny c thit k ging nh mt ti liu tham kho cho cc d
n m ngun m. Hu ht lp trnh vin khng cn hp th mi thng tin v
mt ch c th theo kiu truyn thng; m nhiu khi lp trnh vin tm
thy cu tr li trong m lnh, ri mi c ni dung hay t liu km theo .
Quyn sch ny nhm n vic tha mn khuynh hng , cc ch v
cc khi nim c truyn t t cn bn n nng cao, xuyn sut 12 d n
tng ng vi 12 chng sau:
TP MT
Chng 1. ONLINE DIARY
Chng 2. FILE SHARE
Chng 3. CHAT SERVER
Chng 4. SURVEY ENGINE
Chng 5. BLOG
Chng 6. PHOTO ALBUM
TP HAI
Chng 7. CMS
Chng 8. CUSTOMER SUPPORT
Chng 9. WEBSHOP
Chng 10. APPOINTMENT BOOKING
Chng 11. GREETING CARD
Chng 12. BUGBASE
9
9
9
9
9
S dng ng dng,
Thit k ng dng,
M lnh ng dng,
Ci t ng dng,
M rng ng dng.
Quy c v font ch
Quyn sch ny s dng cc quy c v font ch nh sau:
9
9
Yu cu v h thng
c th chy c nhng ng dng c trnh by trong quyn sch ny,
bn s cn nhng phn mm sau y:
9
9
9
9
9
S dng CD-ROM nh km
CD-ROM nh km theo sch cha ton b m ngun, cng nh gi ci t cho
cc ng dng c trnh by trong quyn sch ny.
Th mc gc ca CD-ROM gm ba th mc:
9
9
9
9
9
ph lc D.
Ba th mc u c cu trc ging nhau, gm su th mc con ng vi su
ng dng c trnh by trong tp hai ny:
9
9
9
9
9
9
9
9
10
11
MC LC
LI NI U ........................................................................................................................ 5
MT S CH DN ................................................................................................................ 7
MC LC ............................................................................................................................ 11
Chng 7. CMS ................................................................................................................. 19
7.1 S dng CMS ........................................................................................................ 21
Xem ni dung ....................................................................................................... 21
Qun l ni dung .................................................................................................. 22
7.2 Thit k CMS ......................................................................................................... 24
7.2.1 Tng nghip v ........................................................................................... 24
7.2.2 Tng truy xut d liu ................................................................................. 26
7.2.3 Lp tr gip ................................................................................................ 28
7.3 M lnh CMS ......................................................................................................... 29
7.3.1 Cc file ti th mc gc .............................................................................. 29
Web.config.................................................................................................... 29
SiteMaster.master v AdminMaster.master................................................. 30
Login.aspx .................................................................................................... 33
7.3.2 Th mc Management................................................................................ 33
Qun l ch ............................................................................................. 34
Qun l ni dung .......................................................................................... 40
12
13
14
15
16
17
18
19
Chng 7. CMS
20
21
Chng 7. CMS
7.1
S dng CMS
Website c minh ha trong chng ny gm hai phn quan trng: phn front-end (cng
khai) v phn qun l ni dung (c bo v). Phn front-end hin th nhng mc ni dung
(content item) thuc loi tin tc, bi vit, v cu hi thng gp. Cc mc ni dung ny c th
c qun l bng h thng qun l ni dung, chnh l phn th hai ca website. Chng ny
tp trung ch yu vo phn th hai, nhng cng trnh by cch hin th thng tin t CMS ra bn
ngoi.
Xem ni dung
N u website CMS c ci t thnh cng (tham kho phn Ci t CMS trong chng ny
hiu r hn), bn c th duyt website theo a ch http://localhost/CMS. Bn s thy mn
hnh nh trong hnh 7-1.
Trnh n chnh (cc th ln u mn hnh) cha cc mc tnh v ng. Trang ch, Qun tr,
v ng nhp l cc mc c nh. Mc Trang ch lun a bn v trang ch v mc ng nhp
cho php bn ng nhp vo website. Mc Qun tr cho php bn truy xut phn qun l ni
dung. Ba mc cn li l cc loi ni dung (content type), c ly t c s d liu. Khi nhp
vo mt loi ni dung, chng hn nh Bi vit, bn s thy mt trnh n con xut hin nh
hnh 7-2.
22
Chng 7. CMS
Hnh 7-1
Hnh 7-2
Trnh n con hin th cc ch bn trong loi ni dung c chn. Khi nhp chn mt ch
trong trnh n con, chng hn nh Khoa hc my tnh, bn s thy danh sch cc mc ni
dung (xem hnh 7-3) thuc ch .
Hnh 7-3
Khi bn nhp vo lin kt Xem tip bn di mt mc ni dung, trang chi tit s xut hin, cho
bn xem ton b mc ni dung.
Qun l ni dung
qun l cc mc ni dung trong h thng (cng nh cc loi ni dung v cc ch ), bn
cn phi ng nhp. N u ci t ng dng (xem phn Ci t CMS), bn c th ng nhp
vi tn ngi dng l Administrator v mt khNu l Admin123# (ch mt khNu c phn bit
hoa-thng).
23
Chng 7. CMS
Sau khi ng nhp, bn s thy trnh n chnh xut hin vi cc lin kt cho php qun l
loi ni dung, ch , v ni dung. Vic qun l loi ni dung v ch kh d dng. Bn c
th to mi v cp nht cc mc hin c. Bn cng c th gn li mt ch vo mt loi ni
dung khc bng cch hiu chnh ch v chn loi ni dung mi t danh sch th xung.
Bn c th qun l ni dung ca website bng cch nhp mc Qun l ni dung trn trnh n
bn tri (xem hnh 7-4). Bn s thy danh sch tt c mc ni dung hin c, c lc bi loi
ni dung. chn mt loi khc, bn hy chn mt mc t danh sch th xung. thay i
mt mc ni dung, bn hy nhp nt Sa trong danh sch. N u nhp nt To ni dung mi, bn
s c a n trang AddEditContent.aspx (hnh 7-4). Trang ny c s dng thm mi v
hiu chnh cc mc ni dung hin c.
Hnh 7-4
24
Chng 7. CMS
7.2
Thit k CMS
Kiu d liu
M t
25
Chng 7. CMS
BodyText
String
CategoryId
Integer
ContentTypeId
Integer
Id
Integer
IntroText
String
Title
String
Visible
Boolean
Hnh 7-5
N goi by thuc tnh ny, lp Content c bn phng thc: hai phng thc khi dng,
phng thc Save, v phng thc GetItem. Cc phng thc ny c m t trong bng sau:
Phng thc
Kiu tr v
M t
Khng
26
Chng 7. CMS
Public Sub New
(ByVal id As
Integer)
Khng
Khng
Lu mt mc ni dung mi hay c
vo c s d liu bng cch gi phng
thc Save trong lp ContentDB (s c
tho lun sau).
Public Shared
Function GetItem
(ByVal id As
Integer) As Content
Mt th hin ca lp
Content hoc Nothing khi
khng tm thy mc ni
dung.
Ly mt mc ni dung t c s d liu
bng cch gi GetItem trong lp
ContentDB.
Hnh 7-6
Do lp ContentDB ch trng ra cc thnh vin chia s nn n khng c phng thc khi dng
cng khai. N cng khng c cc thuc tnh cng khai, nhng c hai phng thc cng khai,
c m t trong bng sau:
Phng thc
Kiu tr v
M t
Khng
Lu mt mc ni dung
mi hay c vo c s
d liu.
Mt th hin ca lp Content
hoc Nothing khi khng tm thy
mc ni dung.
Ly mt mc ni dung t
c s d liu.
27
Chng 7. CMS
N goi lp ny, tng truy xut d liu cn c c s d liu. C s d liu cho CMS gm ba
bng v mt s th tc tn tr chu trch nhim ly d liu t cc bng . Hnh 7-7 m t ba
bng ny v mi quan h gia chng.
Hnh 7-7
Kiu d liu
M t
Id
int
nvarchar(100)
IntroText
nvarchar(MAX)
BodyText
nvarchar(MAX)
ContentTypeId
int
28
Chng 7. CMS
CategoryId
int
Ch m mc ni dung ny thuc v.
CreateDateTime
datetime
UpdateDateTime
datetime
Visible
bit
Hnh 7-8
7.2.3 Lp tr gip
Lp cui cng trong th mc App_Code l AppConfiguration. Lp ny thuc v website hn l
thuc v tng nghip v hay tng truy xut d liu, do n c t trc tip trong th mc
App_Code. iu ny khng bt buc, cho nn bn c th chuyn n vo mt trong cc th mc
hin c, hoc to mt th mc mi nh Configuration hay Helpers ri t vo . Lp ny c
gi l AppConfiguration, khng phi l Configuration trnh xung t tn vi khng gian
tn ASP.NET System.Configuration. Lp AppConfiguration trng ra thuc tnh chia s
ConnectionString, v bn cht l mt v bc cho ConnectionString trong file Web.config. Cc
29
Chng 7. CMS
Hnh 7-9
7.3
M lnh CMS
Phn ny i vo tng trang quan trng ca website CMS. Trc tin, chng ta s xt mt s file
ti th mc gc. Sau l xt n cc file trong th mc Management (cho php bn qun l
ni dung trong c s d liu). Sau cng l xt n hai file m nhim vic hin th ni dung
trong phn cng khai ca website.
7.3.1 Cc file ti th mc gc
Th mc gc ca website CMS gm hai file master, mt file cu hnh, mt trang ng nhp,
trang mc nh, v hai file dng hin th ni dung trong c s d liu. Phn ny s tho
lun v cc file trn, ngoi tr hai file cui s c tho lun sau khi tho lun v th mc
Management.
Web.config
File cu hnh ton cc ny cha mt kha appSetting v mt connectionString. Kha
appSetting c s dng bi FCKeditor (HTML Editor ny s c tho lun sau), cn chui kt
ni c s dng bi cc trang v cc lp truy xut d liu trong ng dng.
Bn di nt <system.web>, bn s thy hai phn cu hnh cho Membership provider v Role
provider. CMS s dng cc provider ny cho php ngi dng ng nhp v truy xut th
mc Management. V website ny s dng c s d liu ty bin, khng phi aspnetdb.mdf mc
nh nh c nh ngha trong machine.config, nn bn cn cu hnh cho ng dng s dng c
s d liu ty bin. C hai nt
<membership>
<roleManager>
30
Chng 7. CMS
</authentication>
<authorization>
<allow users=*/>
</authorization>
<pages theme=Cms>
SiteMaster.master v AdminMaster.master
Hai file master ny xc nh cm quan ca tt c cc trang trong website. File SiteMaster.master
c s dng cho cc trang cng khai, trong khi file AdminMaster.master c s dng cho cc
trang trong th mc Management. Hai file ny c nhiu im chung, khc bit duy nht l trong
file AdminMaster.master c mt bng HTML v mt iu kim ngi dng hin th trnh n
con cho phn qun tr. Mc d ASP.NET 2.0 cho php bn s dng cc file master lng nhau,
nhng website CMS khng s dng tnh nng . y, file SiteMaster.master c to trc v
sau ni dung ca n c chp sang file AdminMaster.master.
N goi cc th HTML thng thng, SiteMaster.master cn s dng iu kim ngi dng
SiteMenu hin th trnh n chnh v trnh n con. iu kim SiteMenu (trong th mc
Controls) cha hai iu kim Repeater cho hai trnh n. Mi mc trong trnh n chnh v
trnh n con lin kt n trang ContentList v truyn cho n ID ca loi ni dung v ID ca ca
ch (nu c) thng qua chui truy vn. iu ny cho php trang ny, cng cc iu kim
ngi dng trong , bit loi ni dung v ch no hin ang c hin th. iu kim
31
Chng 7. CMS
N goi cc trng ca bng Category, phn m t loi ni dung cng c thu ly, vi b danh
l ContentTypeDescription. M t ny c s dng trong phn qun tr ca website, hin
tn loi ni dung m ch thuc v. Th tc tn tr ny nhn ID ca loi ni dung lm tham
s. Trong m lnh cho SqlDataSource, tham s ny c thit lp nh sau:
<SelectParameters>
<asp:QueryStringParameter Name=contentTypeId
QueryStringField=ContentTypeId Type=Int32 />
</SelectParameters>
SqlDataSource
s lun thu ly cc
32
Chng 7. CMS
iu kim ly cc mc cho trnh n chnh cng thc hin tng t nh vy. Tuy nhin, v
iu kim ny cn tr v tt c loi ni dung, nn khng c tham s la chn no.
Khi quan st mt trang c s dng iu kim SiteMenu, bn s thy nh hnh 7-10.
Tt c cc mc trnh n nm gia Trang ch v Qun tr ly d liu t bng ContentType, trong
khi cc trnh n con ly d liu t bng Categories. Bn cng c th thy rng, trong lin kt
cho trnh n con, c ContentTypeId v CategoryId u c truyn cho trang ContentList. iu
cui cng bn cn trong hnh 7-10 l mt trnh n chnh v mt trnh n con (Bi vit v
Vn th) xut hin vi mu hoc kiu font khc. iu ny c thc hin bi m lnh thuc s
kin Load trong file code-behind ca iu kim ngi dng.
Hnh 7-10
on m trn kim tra ItemType ca mc hin ang c kt d liu. Khi mt Item hoc
Alternating c to, m lnh thu ly DataItem, trong trng hp ny l mt DataRowView.
Sau , DirectCast c s dng p i tng DataItem thnh mt DataRowView. S dng
DirectCast cng tng t nh Ctype nhng n thc thi nhanh hn mt cht. N hc im ca
DirectCast l n ch c th p cc i tng cng kiu, bn khng th s dng n p mt
i tng thnh kiu khc cao hn hoc thp hn trong phn cp k tha. Tuy nhin, trong
trng hp ny, chng c vn g do DataItem l mt DataRowView nn bn c th s dng
DirectCast mt cch an ton.
33
Chng 7. CMS
<a>
thuc th
div #SubMenu
v c s
Cc mc trnh n Trang ch, Qun tr, v ng nhp khng vn hnh theo c s d liu, do
bn khng th chn trc chng trong s kin ItemDataBound. Thay vo , trong Page_Load
ca iu kim SiteMenu, bn kim tra thuc tnh AppRelativeCurrentExecutionFilePath ca
lp HttpRequest. Bng php so snh chui, bn bit c c cn chn trc mt trong cc
mc trnh n tnh hay khng:
If Request.AppRelativeCurrentExecutionFilePath.ToLower() = ~/default.aspx Then
liHome.Attributes(class) = Selected
End If
Login.aspx
Trang ny cho php bn ng nhp vo website v t ng xut hin mi khi bn truy xut
mt trong cc trang thuc th mc Management vi vai tr mt ngi dng cha c xc
thc. Trang ny tn dng th mnh ca b khung bo mt ASP.NET 2.0 (c cung cp bi cc
provider Membership v Role). N hng g trang ny cn l mt iu kim <asp:Login>:
<asp:Login ID="Login1" runat="server"
TitleText="ng nhp" LoginButtonText="ng nhp"
UserNameLabelText="Tn ng nhp:" PasswordLabelText="Mt khu:"
RememberMeText="Ghi nh cho ln ng nhp k tip" >
</asp:Login>
7.3.2 Th mc Management
Tt c cc file trong th mc Management c s dng cho vic bo tr cc loi ni dung, cc
ch , v ni dung c hin th trong phn cng khai ca website. Th mc ny c nm
file: trang ch mc nh ca phn qun tr, mt trang qun l cc loi ni dung, mt trang
34
Chng 7. CMS
Qun l ch
N h bn bit, cc ch c hin th dng mc trnh n mi khi bn chn mt loi
ni dung. Mi ch c gn vi mt loi ni dung c th bi ContentTypeId ca n.
iu khin th t xut hin ca cc mc trn trnh n con, Category c ct SortOrder.
N hm cho php bn qun l cc ch hin c v to ch mi trn cng mt trang,
Categories.aspx c chia lm hai phn bi cc iu kim <asp:Panel>. Panel th nht l
pnlList, gm mt GridView hin th cc ch hin c. Mt danh sch th xung pha trn
GridView cho php bn lc cc ch thuc mt loi ni dung c th. Panel th hai l pnlNew,
c s dng thm cc ch mi. Panel ny gm mt iu kim FormView kt hp vi
mt SqlDataSource. Ti mt thi im, ch mt trong hai panel c nhn thy. Chng ta s
xt panel pnlList trc, sau xt n cch thm ch mi vi cc iu kim trong panel
pnlNew.
N goi mt vi iu kim tnh cho cc thng bo, pnlList c hai iu kim quan trng: mt
danh sch th xung (lstContentType) v mt GridView (gvCategories). iu kim danh sch
th xung lit k cc loi ni dung hin c trong website, GridView hin th cc ch thuc
loi ni dung c chn trong danh sch th xung.
Khi trang ny np, danh sch th xung ly d liu t mt SqlDataSource c tn l
sdsContentTypes. C danh sch th xung v ngun d liu u c m nh du rt n gin:
<asp:DropDownList ID=lstContentTypes runat=server
DataSourceID=sdsContentTypes
DataTextField=Description DataValueField=Id AutoPostBack=true>
</asp:DropDownList>
DataValueField
35
Chng 7. CMS
FROM
ContentType
WHERE
Visible = 1
ORDER BY
SortOrder
GridView
c kt vi mt
GridView,
Hnh 7-11
Pha trn GridView chnh l danh sch th xung c tho lun trc y. Trong GridView,
bn thy cc ct hin th ID ca ch , m t ch , loi ni dung m n thuc v, th t sp
xp, hai nt chnh sa v xa ch . Khi bn nhp vo nt Sa, GridView chuyn sang ch
chnh sa v hin th cc iu kim c th chnh sa cho m t, loi ni dung, v th t sp
xp nh hnh 7-12.
Hnh 7-12
36
Chng 7. CMS
37
Chng 7. CMS
<ItemStyle Width=150px />
</asp:CommandField>
SqlDataSource
<SelectParameters>
<SelectParameters>
<asp:ControlParameter ControlID=lstContentTypes
Name=contentTypeId PropertyName=SelectedValue
Type=Int32 DefaultValue=-1 />
</SelectParameters>
Tham s duy nht l mt tham s kiu ControlParameter. Khi ngun d liu chuNn b ly d
liu t c s d liu, n s xt iu kim lstContentTypes, ly SelectedValue ca n, v
truyn cho th tc tn tr.
cho php cp nht d liu, ngun d liu nh ngha UpdateParameters nh sau:
<UpdateParameters>
<asp:Parameter Name=returnValue Type=Int32 Direction=ReturnValue />
<asp:Parameter Name=id Type=Int32 />
<asp:Parameter Name=description Type=String />
<asp:Parameter Name=contentTypeId Type=Int32 />
<asp:Parameter Name=sortOrder Type=Int32 />
</UpdateParameters>
38
Chng 7. CMS
Tham s
Hnh 7-13
Hnh 7-14
returnValue
39
Chng 7. CMS
N u bn nhp vo du ba chm, Command and Parameter Editor s hin ra nh hnh 7-14, cho
php bn sp xp li, xa, to mi hoc thay i cc tham s hin c. thay i Direction cho
mt tham s, bn cn nhp vo lin kt Show advanced properties, sau chn mt ty chn t
danh sch Direction.
Gi y bn c mi th thao tc d liu. Tuy nhin, c hai iu cn xem xt. Th nht
l cch th l cc mNu tin trng nhau. Th hai l cch chn ch mi. Chng ta s gii quyt
vn th nht trc.
Mi ch trong mt loi ni dung c th phi c mt m t duy nht ( khng xy ra
chuyn hai mc trnh n c cng tn). Th tc tn tr chn v cp nht ch th l vic
ny bng cch xt xem c mt ch cng tn hay cha trc khi chn hay cp nht:
IF NOT EXISTS (SELECT Id FROM Category
WHERE Description = @description AND ContentTypeId = @contentTypeId)
BEGIN
-- chn ch mi ti y
END
ELSE
BEGIN
SET @returnValue = -1 -- mu tin tn ti
END
Ch danh sch c phn cch bi du phNy trong mnh Handles, iu ny cho php bn
kt mt phng thc th l s kin vi nhiu s kin ca cc iu kim ging hoc khc
nhau.
Bi v GridView khng h tr chn d liu, iu kim FormView c s dng ngi dng
c th chn mt ch mi. Tng t nh cch thit lp GridView, FormView gm mt
InsertItemTemplate vi cc iu kim cung cp gi tr cho iu kim SqlDataSource vic
chn c din ra. InsertItemTemplate cha mt textbox cho ct m t, mt
RequiredFieldValidator, v hai danh sch th xung cho ct loi ni dung v ct th t sp
xp. thy FormView ny, nhp nt To ch mi trn trang Categories. Phng thc
btnNew_Click trong code-behind s pht sinh, lm Nn panel pnlList v hin panel pnlNew, cho
php bn chn ch mi.
40
Chng 7. CMS
Qun l ni dung
Khi nhp chn mc Qun l ni dung trn trnh n qun tr, bn c a n trang
ContentList.aspx lit k cc mc ni dung hin c trong c s d liu. phn bit ni dung
ang tn ti v ni dung b xa, trang ny c mt danh sch th xung gm hai mc: Tch
cc v b xa. Mi khi bn chn mt mc mi t danh sch th xung , trang ny s c
lm ti v hin th danh sch cc mc ni dung ang tn ti hoc b xa. Trang ny cng
c mt SqlDataSource vi SelectCommand v DeleteCommand c gn l cc th tc tn tr cho
php bn ly danh sch cc mc ni dung hoc xa mt mc ni dung.
GridView c s dng trong trang ny cng tng t nh GridView c s dng hin th
cc ch . Tuy vy, c hai im khc bit quan trng v s c xem xt ngay sau y. Th
nht, GridView ny khng th chnh sa c, cho nn bn s khng thy cc TemplateField
cng vi mt EditItemTemplate.
41
Chng 7. CMS
Dim recordIndex As Integer
Dim recordId As Integer
recordIndex = Convert.ToInt32(e.CommandArgument)
recordId = Convert.ToInt32(gvContent.DataKeys(recordIndex).Value)
Response.Redirect(AddEditContent.aspx?Id= & recordId.ToString())
End Select
End Sub
ButtonField cho nt Sa c CommandName c gn l Edit. Bn trong s kin RowCommand, tn
lnh c ly t thuc tnh CommandName ca GridViewCommandEventArgs. N u tn lnh l Edit,
bn bit rng nt Sa c nhp. Sau , bn c th s dng CommandArgument ly c
index ca dng c nhp chn trong khung li (bt u t 0). N u bn nhp mc th ba th
CommandArgument s c gi tr l 2. Tip theo, bn c th s dng index ny ly kha ca
mc ni dung. Tp hp DataKeys ca GridView tr v kha chnh ca mc ni dung trong c s
d liu, y chnh l ci bn cn bi v trang AddEditContent.aspx yu cu ID ca mt mc ni
dung. Khi c kha ny, bn c th to mt URL vi ID c ni vo chui truy vn v a
ngi dng n trang .
cui trang, bn s thy hai iu kim SqlDataSource dng hin th cc loi ni dung v
cc ch hin c trong mt danh sch th xung. N gun d liu cho cc ch l
sdsCategories, c kt vi danh sch cc loi ni dung bng mt SelectParameter. iu ny
m bo rng: mi khi bn chn mt loi ni dung mi t danh sch th xung, trang ny s
c lm ti v hin th danh sch cc ch thuc loi ni dung . Hai danh sch th
xung ny c DataSourceID c gn l iu kim SqlDataSource tng ng, cc thuc tnh
DataTextField v DataValueField tr n cc ct trong DataSet m ngun d liu tr v.
Chng c g mi trong trang ny! N hng cc iu kim khc trong trang nhn d liu bng
cch no? hiu cch lm vic ny, bn hy m file code-behind ca AddEditContent.aspx v
quan st s kin Page_Load:
Protected Sub Page_Load(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles Me.Load
If Request.QueryString.Get(Id) IsNot Nothing Then
contentId = Convert.ToInt32(Request.QueryString.Get(Id))
End If
If Not Page.IsPostBack And contentId > 0 Then
Dim myContentItem As Content = Content.GetItem(contentId)
42
Chng 7. CMS
If myContentItem IsNot Nothing Then
Me.Title = Chnh sa & myContentItem.Title
txtTitle.Text = myContentItem.Title
txtIntroText.Value = myContentItem.IntroText
txtBodyText.Value = myContentItem.BodyText
chkVisible.Checked = myContentItem.Visible
lstContentTypes.DataBind()
lstContentTypes.SelectedValue = myContentItem.ContentTypeId.ToString()
lstCategories.DataBind()
lstCategories.SelectedValue = myContentItem.CategoryId.ToString()
End If
End If
End Sub
Trong phng thc ny, m lnh thu ly contentId t chui truy vn (nu c). N u khng c
chui truy vn (c ngha l mt mc mi s c chn vo), khi If tip theo s khng thc
thi. Tuy nhin, nu c chui truy vn, mt s hnh ng s c thc hin. u tin, phng
thc GetItem ca lp Content c gi. Phng thc ny nhn ID ca mc ni dung trong c
s d liu v tr v mt i tng Content. Chng ta s kho st i tng Content v lp
ContentDB tng ng ca n sau khi tho lun xong phng thc Page_Load. Mt khi c
mt i tng Content hp l, bn c th s dng cc thuc tnh cng khai ca n nh Title,
IntroText, v BodyText gn cho cc gi tr khi to ca cc iu kim v tiu trang. Cc
iu kim txtIntroText v txtBodyText thc cht l cc FCKeditor. Chng ta s kho st
FCKeditor trong phn sau.
Khng ging nh cc iu kim text, cc iu kim danh sch th xung i hi mt cht t
duy. Danh sch ch c kt vi danh sch loi ni dung, do n lun hin th cc ch
thuc loi ni dung ang c chn. iu ny c ngha: bn phi d liu vo danh sch
loi ni dung v chn trc mt loi ni dung trc khi lm vic vi cc ch . M lnh
trong phng thc Page_Load thc hin iu ny nh sau:
lstContentTypes.DataBind()
lstContentTypes.SelectedValue = myContentItem.ContentTypeId.ToString()
43
Chng 7. CMS
k CMS, lp Content c mt s thuc tnh cng khai v mt phng thc chia s GetItem
(nhn ID ca mt mc ni dung v tr v mt th hin ca lp Content). N hng g phng
thc GetItem trong tng nghip v thc hin l y nhim cho mt phng thc cng tn trong
lp ContentDB:
Public Shared Function GetItem(ByVal id As Integer) As Content
Return ContentDB.GetItem(id)
End Function
n lt phng thc
cho m lnh gi:
GetItem
ca lp
ContentDB
ly mc ni dung t c s d liu v tr v
Nothing.
N u khng tm
44
Chng 7. CMS
SqlDataReader
Hnh 7-15
45
Chng 7. CMS
FredCK.FCKeditorV2.dll trong th mc Bin ca ng dng (C:\Inetpub\wwwroot\CMS\Bin hay
C:\Websites\CMS\Bin). Editor ny s xut hin vi biu tng hnh bnh rng trong hp cng c.
Mi khi cn mt HTML Editor, bn hy ko mt th hin ca FCKeditor ln trang thay v mt
textbox chuNn.
Hnh 7-16
D dng lm vic vi editor ny, theo quan im ca c ngi lp trnh ln ngi s dng
cui. Cng ging nh mt iu kim .NET thng thng, n trng ra cc thuc tnh nh chiu
rng v chiu cao. Tuy nhin, khi lm vic vi editor ny, bn s nhn thy mt s im khc
bit ng bn lun. Th nht, n khng c thuc tnh Text nh textbox mc nh, thay vo
l thuc tnh Value. Trn thc t, cc thuc tnh ny c th c xem l nh nhau, trong
Value cho php bn gn v ly vn bn c nh dng theo HTML t iu kim ny.
Mt iu quan trng khc cn ch l cch FCKeditor lm vic vi cc iu kim validator.
Theo mc nh, cc iu kim validator c kch hot khi iu kim tng ng (trn form)
mt focus (chng hn khi bn s dng tab hoc nhn nt submit). Tuy nhin vi FCKeditor,
HTML c chp t editor vo mt trng Nn ri mi c xc nhn tnh hp l. Vic chp ny
cng din ra khi editor mt focus, nhng sau khi cc iu kim c xc nhn tnh hp l.
i vi ngi dng cui, mt thng ip bo rng trng dng cho editor l bt buc, nhng
thc t n c gi tr hp l. Cch nhanh nht khc phc iu ny l nhn nt submit mt
ln na. Hin nhin y khng phi l mt gii php hay cho mt ng dng thc s. Cch tt
nht l v hiu vic xc nhn tnh hp l pha client trong cc trang c s dng editor. K
thut ny c p dng cho trang AddEditContent.aspx bng cch gn c tnh CausesValidation
ca nt Lu l False. N h th, vic xc nhn tnh hp l s khng din ra ti client; nhng ti
server, mi iu kim vn c kim tra gi tr.
cch s dng thuc tnh ToolbarSet cp cho txtIntroText v txtBodyText cc b nt
khc nhau. Phn cu hnh cho FCKeditor (c lu trong file FCKeditor\fckconfig.js) cho php bn
nh ngha cc b thanh cng c. B thanh cng c Default cha tt c cc nt, trong khi Cms
v Basic th c hn ch. to mt b thanh cng c mi, hy chp b thanh cng c
Default, sau b i cc nt khng cn thit.
Bi v cc iu kim FCKeditor c th cha cc th HTML v m JavaScript, ASP.NET Framework
mc nh s chn cc gi tr ny, v nm bit l HttpRequestValidationException vi thng
46
Chng 7. CMS
ip A potentially dangerous Request.Form value was detected. khng cho li xut hin,
ValidateRequest c gn l False trong ch th page ca trang AddEditContent.aspx.
Phn cui cng ca trang AddEditContent.aspx m bn cn xem l lu mt mc ni dung vo c
s d liu. Khi bn in d liu cho trang v nhn nt Lu, on m sau (trong phng
thc th l s kin Click ca nt Lu) s pht sinh:
Protected Sub btnSave_Click(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles btnSave.Click
Page.Validate()
If Page.IsValid Then
Dim myContentItem As Content
If Request.QueryString.Get(Id) IsNot String.Empty Then
myContentItem = _
New Content(Convert.ToInt32(Request.QueryString.Get(Id)))
Else
myContentItem = New Content()
End If
myContentItem.Title = txtTitle.Text
myContentItem.IntroText = txtIntroText.Value
myContentItem.BodyText = txtBodyText.Value
myContentItem.Visible = chkVisible.Checked
myContentItem.ContentTypeId = Convert.ToInt32(lstContentTypes.SelectedValue)
myContentItem.CategoryId = Convert.ToInt32(lstCategories.SelectedValue)
myContentItem.Save()
Response.Redirect(ContentList.aspx)
End If
End Sub
47
Chng 7. CMS
myCommand.Parameters.AddWithValue(@introText, contentItem.IntroText)
myCommand.Parameters.AddWithValue(@bodyText, contentItem.BodyText)
myCommand.Parameters.AddWithValue(@contentTypeId, contentItem.ContentTypeId)
myCommand.Parameters.AddWithValue(@categoryId, contentItem.CategoryId)
myCommand.Parameters.AddWithValue(@visible, contentItem.Visible)
myConnection.Open()
myCommand.ExecuteNonQuery()
myConnection.Close()
Khi phng thc ny hon tt, quyn iu khin c tr v cho trang ASPX gi (chuyn
hng ngi dng v trang ContentList, ni mc ni dung c hin th).
N u c mt t kinh nghim lp trnh, bn c th nhn ra mt s vn vi m lnh truy xut
d liu bn trn. Trc tin l khng c th l li (khng s dng khi Try/Catch). y khng
phi l li lp trnh hay, v kh bit c ni no, khi no, v bng cch no cc li xut hin
trong website ca bn. Chng Blog (tp mt) c mt cch hay bt cc li xy ra lc thc
thi, to mt e-mail v chi tit li v gi cho ngi qun tr hoc ngi pht trin website.
Th hai, m lnh b l thuc nhiu vo SQL Server. Mc d vic pht trin cho mt loi c s
d liu l nhanh chng v d dng, nhng khng phi lc no cng l mt gii php tt.
Trong chng Blog (tp mt), bn bit c cch vit m lnh truy xut d liu lm vic vi
c SQL Server v Microsoft Access m khng c bt k hiu chnh no.
Vic thm mt ni dung mi v qun l cc mc ni dung hin c l bc cui cng trong
qu trnh qun l ni dung. By gi, chng ta xem xt cch trnh by ni dung trong phn
front-end ca website.
48
Chng 7. CMS
ItemTemplate
hin th
Title, IntroText
Cc mc ni dung trong danh sch c phn tch bng th <hr /> trong <SeparatorTemplate>.
Bn c th t bt c th g gia hai mc ni dung, bao gm hnh nh, banner, hay HTML.
Ch cch s dng Eval thay cho Bind kt d liu vo cc iu kim trong template. Bi
v bn cn hin th d liu ch-c, khng cn kt d liu hai chiu, s dng phng thc Eval
s nhanh hn.
N u yu cu trang ContentList trong trnh duyt, bn s thy mt danh sch gm cc mc ni
dung xut hin. Lin kt Xem tip di mi mc s dn bn n trang ni dung chi tit. Trang
ny c ba iu kim <asp:Literal> dng hin th ni dung t c s d liu:
<h1 class=ItemTitle><asp:Literal ID=litTitle runat=server></asp:Literal></h1>
<div class=IntroText><asp:Literal ID=litIntrotext
runat=server></asp:Literal></div>
<div class=BodyText><asp:Literal ID=litBodyText
runat=server></asp:Literal></div>
49
Chng 7. CMS
Me.Title = contentItem.Title
litTitle.Text = contentItem.Title
litIntrotext.Text = contentItem.IntroText
litBodyText.Text = contentItem.BodyText
End If
End If
End Sub
trnh by v chc nng ca website u kh n gin, cho php bn tp trung vo nhng khi
nim v k thut quan trng, khng phi ui theo nhng thit k phc tp. Th nhng d
dng t c mt s tnh nng mi v nhng ci tin cho CMS, thm ch lm cho n hu ch
hn nhng g c.
7.4
Ci t CMS
9
9
C hai kiu ci t u gi nh rng .NET Framework 2.0 (bt buc i vi Visual Studio 2005 v
Visual Web Developer) c ci t. Cng gi nh rng bn ci t SQL Server 2005 Express
Edition vi tn th hin l SqlExpress. N u chn mt tn th hin khc, m bo rng bn s
dng tn trong chui kt ni cho CMS (trong file Web.config).
S dng gi ci t
N u bn mun ci t CMS nh mt website thc th trn mt my tnh hay my server, khng
c hiu chnh hay m rng g c, thc hin theo cc bc sau (s dng gi ci t):
Chy file WebSetupProjects\CMS\Debug\CMS.msi t CD-ROM nh km. Qu trnh ny ci
t nhng file cn thit vo th mc C:\Inetpub\wwwroot\CMS\. Ch rng, trong lc
ci t, c mt mn hnh yu cu bn xc nhn tn th mc o, bn hy gi nguyn
tn mc nh l CMS (xem hnh 7-17).
N hp Next ci t ng dng, v ng chng trnh ci t khi hon tt.
50
Chng 7. CMS
Hnh 7-17
Ci t bng tay
Chp th mc Websites\CMS\ t CD-ROM nh km vo a cng, chng hn C:\Websites\
CMS\.
M Visual Studio 2005 (hay Visual Web Developer). Chn File | Open Web Site v tm n th
mc C:\Websites\CMS\. Khi , ca s Solution Explorer cha tt c cc file ca d n.
Bc sau cng l cu hnh cc thit lp bo mt cho ng dng. Bc ny c tho
lun trong phn tip theo.
Thay i cc thit lp bo mt
Vic cui cng cn thc hin l kch hot quyn ghi cho th mc UserFiles (c s dng bi
FCKeditor v th mc App_Data). Bn s cn thay i cc thit lp bo mt cho ti khon m
web server s dng. N u bn s dng Developer Web Server i cng Visual Studio 2005 (hay Visual
Web Developer), ti khon ny l ti khon m bn s dng ng nhp vo my. N u bn
chy site bng IIS, ti khon ny l ASPNET trn Windows XP/2000 hoc l NETWORK SERVICE trn
Windows Server 2003/Vista. thay i cc thit lp bo mt, tun theo cc bc sau:
M Windows Explorer v tm th mc UserFiles ca ng dng. N u bn s dng gi ci
t, ng dn ny l C:\Inetpub\wwwroot\CMS\UserFiles (mc nh). N u bn ci t
bng tay v tun theo cc ch dn, ng dn ny l C:\Websites\CMS\UserFiles.
N hp phi vo th mc UserFiles v chn Properties. Trong hp thoi UserFiles Properties,
nhp th Security (xem hnh 7-18).
51
Chng 7. CMS
Hnh 7-18
Hnh 7-19
52
Chng 7. CMS
7.5
M rng CMS
Chng ny tp trung ch yu vo kha cnh c s d liu ca CMS, cc khi nim quan trng
lm nn tng ca CMS, khng chy theo nhng tnh nng hp dn v giao din bt mt. Tuy
nhin, bn c c c s vng chc xy dng, hin thc cc tnh nng p ng nhu cu
ca chnh bn hay khch hng. Vi cc khi nim v k thut c trnh by trong chng
ny, bn c th m rng CMS vi cc tnh nng ca ring mnh. Mt s m rng c th bao
gm:
9
9
Hin th thm thng tin cho mc ni dung. Thay v ch hin th tiu v phn
thn, bn c th hin th nhng thng tin nh ngy ng, ngy cp nht cui, v tc
gi ca mc ni dung.
Xp hng ni dung. Hy cho ngi dng xp hng mc ni dung theo quan im
ca h. Bn c th thu thp vic xp hng ca ngi dng bng mt iu kim ngi
dng n gin v hin th cc kt qu (chng hn dng biu ct) bng mt iu
kim ngi dng khc.
Phn hi ca ngi dng. Mt m rng thng thy cho mt website CMS l cho
php ngi dng phn hi v mt mc ni dung; v qua , mc ni dung c th
c nng gi tr, c hi nhng ngi khc c n s tng cao.
Mt tnh nng quan trng khc l b m (hit counter). S rt th v khi bit c c bao
nhiu ngi xem mc ni dung ca bn. iu ny gip bn nhn bit th no l mt bi
vit c a thch. N cng gy hng th cho khch, v cho thy mc ni dung c ng
c hay khng. Phn ny s trnh by cch hin thc b m.
C nhiu cch hin thc thc b m cho mi mc ni dung trong website ca bn. Trong
mi trng hp, bn cn c cch lu tr thng tin v ID ca mc ni dung v s lt xem mc
ni dung . V ton b CMS vn hnh theo c s d liu, nn thng tin ny cng nn c lu
trong c s d liu. Chng ta s cn mt bng vi tn l PageView, gm mt ct gi ID ca
mc ni dung v mt ct theo di s lt xem mc ni dung .
iu cn xem xt tip theo l thc hin thao tc m u. Ban u, dng nh th tc tn
tr sprocContentSelectSingleItem (thu ly mt mc ni dung t c s d liu) l ni thch
hp nht. Khi mc ni dung c thu ly t c s d liu, bn bit rng n s c hin th
trn website mt s dng. Tuy nhin, th tc tn tr ny cng c s dng ly mt mc
ni dung trong phn qun tr. iu ny c ngha mi khi bn mun chnh sa mt mc ni
dung, bn cng c th tng b m, dn n vic thng k ma.
Thc t, v tr tt nht theo di s lt xem l trong trang ContentDetail.aspx. Ti trang ny,
bn bit rng mc ni dung hin ang c yu cu nn d dng cp nht s lt xem trong
53
Chng 7. CMS
Bn trong
sprocPageViewUpdateSingleItem.
M lnh cho tng nghip v v tng truy xut d liu xong, bc k tip l hiu
chnh c s d liu. M Server Explorer trong Visual Studio 2005 (hay Visual Web Developer)
v to mt bng mi (nhp phi vo nt Tables trong c s d liu ca bn v chn
Add New Table). Bng mi c cc ct sau:
Tn ct
Kiu d liu
Ghi ch
Id
int
khng
54
Chng 7. CMS
ContentId
int
khng
Ct ny gi ID ca mc ni dung
ang c m.
PageViews
int
khng
Ct ny gi s lt xem mc ni
dung.
Hnh 7-20
Lu bng vi tn l PageView.
m bo ct ContentId ch c th gi ID ca cc mc trong bng Content, bn cn
to quan h gia hai bng ny. thc hin iu , nhp phi vo nt Database
Diagrams trong Server Explorer v chn Add New Diagram. N u y l lc u tin bn
thm vo c s d liu, Visual Studio 2005 (hay Visual Web Developer) s yu cu to mt
s bng v th tc bt buc. N hp Yes cc i tng ny c to.
Trong hp thoi Add Table, thm bng Content v bng PageView m bn va to.
Ko ct Id ca bng Content ln ct ContentId ca bng PageView. Mt hp thoi xut
hin cho php bn nh ngha hnh vi ca cc quan h. N hp OK hai ln to quan
h.
Hnh 7-21
55
Chng 7. CMS
56
Chng 7. CMS
57
Chng 7. CMS
Hnh 7-22
7.6
Kt chng
Qua chng ny, bn bit cch thit k, xy dng, v s dng mt h thng qun l ni
dung. Vi h thng ny, bn d dng truy xut cc ni dung c ng, thm v cp nht
ni dung trc tuyn.
Phn u ca chng gii thiu v website CMS. Bn thy c cch website hin th cc loi
ni dung v cc ch trn trnh n chnh v trnh n con. Bn cng thy c cch
website hin th cc mc ni dung, v cch thay i cc mc ny trong trang qun tr.
Trong phn thit k CMS, bn thy c cch t chc website bng vic xem tng file trong
website, cc lp trong tng nghip v v tng truy xut d liu. Phn ny cng gii thch bn
thit k c s d liu cho website.
Tip theo l kho st phn bn trong ca cc trang v cc lp cu thnh nn CMS. Bn bit
c cch s dng cc iu kim SqlDataSource a d liu vo/ra c s d liu. Bn cng
bit c cch to mt lp ty bin truy xut d liu, nhm trnh cc rc ri vi iu kim
SqlDataSource. N goi cc trang, cc iu kim ngi dng, v cc lp cu thnh nn website,
bn cng bit cch nhng FCKeditor vo ng dng, nhm cho php ngi dng cui nh dng
ni dung ca h trong mt HTML Editor.
Hai phn cui trnh by cch ci t CMS v ch dn mt ci tin nh cho CMS, l m s
lt xem cc mc ni dung.
58
Chng 7. CMS
59
60
61
Chng 8. Customer Support
chng tm thy thng tin v cc sn phNm hay dch v do cng ty bn cung cp. Mc d
chng ny ly mt cng ty bn phn cng (Codepro Hardware, khng c tht) lm mu nhng
cc nguyn l bn thu c trong chng ny c th c p dng cho nhiu website khc c
s dng m hnh ni dung phn cp.
Bi v y l quyn sch bn v ASP.NET nn chng ny tp trung nhiu vo cc tnh nng
mi ca ASP.NET 2.0. Tuy nhin, khi Microsoft tung ra .NET Framework phin bn 2.0 vi ASP.NET
2.0, khng ch c cc cng c cho nh pht trin nh Visual Studio v Visual Web Developer Express
Edition, m cn c mt phin bn mi ca h qun tr c s d liu quan h, l SQL Server
2005. Phin bn SQL Server mi ny kt hp cht ch vi .NET Framework 2.0 v Visual Web
Developer, c rt nhiu tnh nng v ci tin mi. Bi v nhiu ng dng web s dng c s d
liu, thu hiu nng lc vn hnh ca b my c s d liu l mt vic quan trng. Do ,
trong chng ny bn s kho st mt tnh nng mi ca SQL Server, l Common Table
Expressions (khi tho lun tng truy xut d liu v cc th tc tn tr).
8.1
Customer Support c gii thiu trong chng ny l website h tr khch hng ca cng ty
bn phn cng Codepro Hardware (khng c tht). Cng ty ny chuyn bn phn cng ca cc
nh sn xut ni ting nh BNH (Brand New Hardware), Eccentric Hardware Makers, v Rocks
Hardware. gim thiu chi ph cho b phn h tr, hu nh h thng h tr ca cng ty da
trn nn web.
62
Chng 8. Customer Support
Hnh 8-1
Hnh 8-2
63
Chng 8. Customer Support
Hnh 8-3
Hnh 8-4
64
Chng 8. Customer Support
Phn ny i su vo website v cho bn thy cch pht trin cc thnh phn ring l v chng
tng tc vi nhau nh th no.
V cui chng, bn s bit cch ci t Customer Support trn server bng gi ci t hay bng
tay, cng nh c nhng hng ci tin cho Customer Support.
8.2
Ging nh cc ng dng khc trong quyn sch ny, Customer Support da trn kin trc ba
tng. Tng trnh by bao gm cc trang ASPX v cc iu kim ngi dng ASCX trong th mc
gc v mt s th mc con ca website.
C tng nghip v v tng truy xut d liu u c lu trong th mc App_Code. d dng
xc nh m lnh nm ng tng, m lnh nghip v c lu trong th mc con BusinessLogic,
v m lnh truy xut d liu c lu trong th mc con DataAccess. Cc thuc tnh cu hnh
chung, c s dng bi cc tng khc, c lu trong file AppConfiguration.vb thuc th mc
App_Code.
Hu ht vic truy xut d liu c thc hin vi cc iu kim <asp:ObjectDataSource> trong
cc trang .aspx, chng lin h vi cc lp trong tng nghip v (thng qua cc phng thc
cng khai), ri li gi c chuyn hng n cc phng thc trong tng truy xut d liu.
Trong cc trang khc, chng hn nh cc trang InsertUpdate trong phn qun tr, m lnh trong
file code-behind trc tip th hin ha cc lp trong tng nghip v, khng cn n mt iu
kim ngun d liu no c.
Phn tip theo trnh by cc lp trong tng nghip v v l gii chng c s dng th no
v u. Trong phn sau na, bn s thy c bn thit k ca tng truy xut d liu v c
s d liu.
Lp ContentBase
v Download c nhiu im chung. Chng u c mt tiu v mt m t hin th
trn website. Chng cng c mt ID nhn dng duy nht mi mc. V sau cng, c hai u
c kt vi mt chng loi trong c s d liu. Khi bt tay thit k cc lp ny, bn c th
vit m cho lp Product trc, ri sao m ny vo lp Download. Tuy nhin, thit k kiu ny
c mt s tr ngi. Th nht, bn cn chp v dn m lnh t file Product vo file Download,
cho ra nhiu th tha thi. N hng quan trng hn, khi bn cn thay i m lnh, chng hn
nh mun i tn Category thnh CategoryId, bn phi thay i c hai ch!
Product
65
Chng 8. Customer Support
Hnh 8-5
N goi cc thnh vin c k tha, cc lp con hin thc cc thuc tnh v phng thc cho
ring chng. Bn s bit chi tit trong phn sau khi tho lun cc lp tng ng.
N gay bn di tn lp trong hnh 8-5, bn thy dng ch MustInherit Class. iu ny c ngha
khng c th hin ha mt cch trc tip, m bn phi to mt th hin t mt
lp con k tha t ContentBase. y chnh l iu bn mun, bi v khng ch no trn site
cn n mt i tng Content n thun, ch nhng lp con (nh Product v Download) mi
cn c hin th trn site.
ContentBase
Cc thuc tnh cng khai ca lp ContentBase c ni s qua, bng sau lit k chng mt
ln na, cng vi kiu d liu v m t v chng:
Thuc tnh
Kiu d liu
M t
CategoryId
Integer
Description
String
Id
Integer
Title
String
Tiu ca mc ni dung.
66
Chng 8. Customer Support
Lp Product
Lp u tin k tha t ContentBase l Product. Mt th hin ca lp Product biu din mt
sn phNm m khch hng c th mua. Trong Customer Support, lp Product c s dng
cung cp thm thng tin v sn phNm, nh cc c im k thut.
N goi cc thnh vin k tha t ContentBase, lp ny cn c cc thnh vin nh hnh 8-6.
Hnh 8-6
Kiu d liu
M t
ImageUrl
String
ng dn o n hnh sn phNm.
Keywords
String
TagLine
String
Mt m t ngn v hp dn v sn phNm.
Kiu tr v
khng
M t
67
Chng 8. Customer Support
Public Sub New (ByVal id
As Integer)
khng
Product
khng
khng
DataSet
DataSet
Lp Download
Lp Download biu din cc file m khch hng c th ti v t Codepro Hardware Customer
Support. Cc file ny c phn loi theo mt cu trc phn cp ba mc d dng tm thy
file cn thit. Ging nh lp Product, lp Download k tha t
thuc tnh v phng thc ca ring n (xem hnh 8-7).
Hnh 8-7
ContentBase
v c thm mt s
68
Chng 8. Customer Support
GetDownloadList,
phng thc
Lp Faq
Lp Faq biu din mt cu hi thng gp, c hin th trn website v c lu trong c s
d liu h tr khch hng. Dng nh Faq cng l mt ng vin tt k tha t ContentBase,
nhng thc ra khng phi nh vy. Trc ht, Faq khng c CategoryId. Cng vy, Faq khng
c tiu , nhng li c hai thuc tnh Question v mt thuc tnh Answer. N hng khc bit
ny khin Faq kh c th k tha t ContentBase. Do , lp Faq c hin thc l mt lp
c lp, vi cc thnh vin c hin th trong hnh 8-8.
Hnh 8-8
Kiu d liu
M t
Answer
String
Tr li cho cu hi.
QuestionLong
String
Id
Integer
QuestionShort
String
69
Chng 8. Customer Support
Kiu tr v
M t
DataSet
DataSet
Lp
ContentBase
Category
Lp Category
Lp Category (xem hnh 8-9) c s dng thu ly v to cc chng loi trong c s d
liu. Cc chng loi ny gip ngi dng nhanh chng xc nh c sn phNm hay file cn
tm trong phn cng khai ca website.
Hnh 8-9
Lp Category khng c thuc tnh cng khai hay thuc tnh ring no, ch trng ra cc phng
thc cng khai v chia s (ngoi phng thc khi dng ring) thu ly cc chng loi t c
s d liu v to cc chng loi mi. Bng sau m t ba phng thc ny:
Phng thc
Kiu tr v
M t
khng
DataSet
70
Chng 8. Customer Support
Public Shared Function
GetCategoryList (ByVal
parentCategoryId As
Integer) As DataSet
DataSet
Lp ProductDB
Lp ProductDB hin thc bn phng thc m bn thy trong lp Product. Tuy nhin, cc
phng thc trong lp ProductDB (xem hnh 8-10) thc s a d liu vo/ra c s d liu.
rng khng c phin bn np chng no ca GetProductList trong lp ny. Lp Product c
hai phin bn np chng, nhng cng gi n mt phng thc trong lp ProductDB.
Hnh 8-10
Kiu tr v
M t
khng
Product
DataSet
71
Chng 8. Customer Support
Public Shared Sub Save (ByVal
the Product As Product)
khng
Lu sn phNm vo c s d liu. y
ch l phng thc th hin (instance
method) duy nht.
Lp DownloadDB
Cc lp Product v Download tng t nhau th no, cc lp ProductDB v DownloadDB cng
tng t nhau nh th. iu ny c ngha lp ny hin thc cc phng thc Get, Save,
Delete, v GetDownloadList, nh c minh ha trong hnh 8-11.
Hnh 8-11
Lp FaqDB
Mc d lp Faq khng k tha t ContentBase, nhng n cng hin thc cc phng thc nh
lp Product v Download c. Do , lp FaqDB (xem hnh 8-12) hin thc cc phng thc Get,
Save, Delete, v GetFaqList.
Hnh 8-12
72
Chng 8. Customer Support
N goi cc phng thc quen thuc ny, lp FaqDB cn c phng thc BuildWhereClause.
Phng thc ny (c nh du l Private nn khng th c truy xut t bn ngoi lp
FaqDB) nhn mt t tm kim v tr v mt mnh WHERE chuNn dng c th c s dng
trong mt th tc tn tr. Mc d iu ny tim Nn kh nng b tn cng SQL Injection, nhng
phng thc ny trin khai mt s m lnh phng th trnh nguy c bo mt . Bn s
thy cch hot ng ny trong phn sau.
Lp CategoryDB
Lp cui cng trong tng truy xut d liu m bn nn xem qua l lp CategoryDB. Ging nh
bn sao ca n trong tng nghip v, lp ny hin thc ba phng thc nh trong hnh 8-13.
Hnh 8-13
Kiu tr v
M t
khng
DataSet
DataSet
N goi cc lp trong th mc DataAccess, tng truy xut d liu cn cha c s d liu thc s,
bao gm bn bng v mt s th tc tn tr.
73
Chng 8. Customer Support
M hnh d liu
C s d liu cho Customer Support gm bn bng, 16 th tc tn tr, v hai hm do ngi
dng nh ngha. Mt s bng trong c s d liu c quan h vi nhau, nh trong hnh 8-14.
Hnh 8-14
C hai bng Product v Download u c quan h vi bng Category thng qua ct CategoryId.
Tuy nhin, bn cng cn bng Category c quan h vi chnh n (ct ParentCategoryId
kt vi ct Id). Theo cch ny, mt chng loi c th c quan h vi mt chng loi khc,
c gi l chng loi cha, do to nn mt cu trc phn cp hoc cy cho cc chng loi.
thu ly d liu phn cp t c s d liu, ng dng s dng Common Table Expressions, s
c tho lun sau.
Mc d tn ca cc bng v cc ct t n ni ln ngha, cc bng di y m t r hn
v chng.
Bng Product
Bng di y m t cc ni dung ca bng Product trong c s d liu Customer Support:
Tn ct
Kiu d liu
M t
Id
int
Title
nvarchar(100)
Tiu ca sn phNm.
TagLine
nvarchar(100)
74
Chng 8. Customer Support
Description
nvarchar(MAX)
M t y v sn phNm, v d nh cha c im k
thut ca sn phNm.
CategoryId
int
ImageUrl
nvarchar(255)
ng dn o n hnh sn phNm.
Keywords
nvarchar(200)
Kiu d liu
M t
Id
int
Title
nvarchar(100)
Description
nvarchar(MAX)
M t y v download.
CategoryId
int
DownloadUrl
nvarchar(255)
ng dn o n file.
Kiu d liu
M t
Id
int
QuestionShort
nvarchar(200)
75
Chng 8. Customer Support
QuestionLong
nvarchar(MAX)
Answer
nvarchar(MAX)
Tr li cho cu hi.
Kiu d liu
M t
Id
int
nvarchar(100)
M t v chng loi.
ParentCategoryId
nvarchar(100)
tru tng mt s chc nng, hai hm do ngi dng nh ngha (UDF) c to. V bn
cht, UDF l mt s m T-SQL c kh nng ti s dng, c th c gi bi m lnh khc, bao
gm cc th tc tn tr, v c th tr v cc kiu d liu khc nhau, bao gm cc gi tr v
hng (chng hn nh mt s hoc mt vn bn) v ton b cc bng. Trong Customer Support,
hai UDF u tr v mt bng ty bin gm ct ID v ct Description cha cc chng loi t
bng Category. Bn s tm thy cc hm fnSelectChildCategories v
fnSelectParentCategories bn di nt Functions ca c s d liu trong ca s Server Explorer
ca Visual Studio 2005 (hay Visual Web Developer). Hot ng bn trong ca cc hm ny s c
tho lun sau.
8.2.3 Lp tr gip
N goi m lnh trong tng nghip v v tng truy xut d liu, Customer Support cn s dng
mt lp tr gip, l lp AppConfiguration, c lu trong th mc App_Code.
Lp AppConfiguration cung cp thng tin cu hnh cho m lnh trong tng trnh by v tng
truy xut d liu. N c ba thuc tnh cng khai-chia s-ch c, cung cp thng tin cu hnh
c lu trong file Web.config (xem hnh 8-15).
Thuc tnh ConnectionString c s dng bi cc phng thc trong tng truy xut d liu
kt ni c s d liu. Thuc tnh DefaultSiteDescription c s dng t ng xen mt
76
Chng 8. Customer Support
<head>
Hnh 8-15
8.3
Trc khi bt u tho lun cc tnh nng cao cp hn ca Customer Support nh Product Locator
v Download List, bn cn xem qua mt s file quan trng trc. Tt c cc file ny thuc th
mc gc ca website.
8.3.1 Cc file ti th mc gc
Th mc gc ca website c nm file quan trng: hai trang master vi phn m rng .master,
trang Default.aspx, file Global.asax, v file Web.config. File Web.config cha mt s thit lp dng
cho cc trang khc, do c tho lun trc.
Web.config
Tng t nh cc ng dng khc trong quyn sch ny, file Web.config c mt s kha ty
bin, chui kt ni cho ng dng, v thng tin cu hnh cho skin dng trong website. Hai kha
ty bin bn di nt <appSettings> c s dng thit lp ng dn lu cc file c
upload v xc nh dng ch mc nh m t v website.
Cng trong file Web.config, bn s thy nt <pages>. Kha ny thit lp theme cho website l
CustomerSupport. y l mt theme ty bin, c lu trong th mc App_Themes. Theme ny
ch c mt file l GridView.skin, file ny nh ngha cm quan ca mi GridView trong website.
Tt c cc thit lp khc trong Web.config rt quen thuc, do khng tho lun na.
Global.asax
Ging nh trong chng Blog, Global.asax cha m lnh gi e-mail mi khi li pht sinh
trong website. M lnh trong file ny ging ht nh trong chng Blog, cho nn bn hy
tham kho phn M lnh Blog hiu r cch hot ng ny.
Default.aspx
77
Chng 8. Customer Support
Cc trang master
Customer Support c hai trang master gn nh ging ht nhau: mt cho phn cng khai ca
website v mt cho phn qun tr. Khc bit ln nht gia hai trang ny l iu kim ngi
dng ManagementMenu. Trnh n ny cha cc mc cho giao din qun tr, c np mc nh
trong trang master qun tr. Mt khc bit khc l cc siu d liu c thm t ng vo
phn <head> ca trang master cng khai.
thy li hot ng ny, m file MainMaster.Master.vb gc website, y l file code-behind
ca trang master cng khai. Trong file ny, bn thy hai thuc tnh Keywords v Description.
Cc thuc tnh ny c th c truy xut t m lnh bn ngoi lp MainMaster bi v chng
c nh du l Public. Page_Load ca trang master s dng cc thuc tnh ny thay i
ng mt s th <meta> u trang.
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) _
Handles Me.Load
Dim metaTag As HtmlMeta = New HtmlMeta()
If Not Keywords Is String.Empty Then
metaTag.Name = keywords
metaTag.Content = Keywords
Page.Header.Controls.Add(metaTag)
End If
metaTag = New HtmlMeta()
metaTag.Name = description
If Not Description = String.Empty Then
metaTag.Content = Description
Else
metaTag.Content = AppConfiguration.DefaultSiteDescription
End If
Page.Header.Controls.Add(metaTag)
End Sub
78
Chng 8. Customer Support
Cc trang c s dng trang master gi y c th truy xut cc thuc tnh cng khai khi trang
np. Tuy nhin, mc nh bn khng th truy xut cc thuc tnh ny mt cch trc tip.
Thuc tnh Master mc nh m trang trng ra c kiu l System.Web.UI.MasterPage. Lp ny
khng c thuc tnh Keywords. c th truy xut cc thuc tnh ty bin ca mt trang
master, bn cn thit lp ch th MasterType ti trang mun truy xut cc thuc tnh ny. Mt v
d l trang ProductDetails.aspx trong th mc ContentFiles. Di y l m nh du u trang
ny:
<%@ MasterType VirtualPath=~/MainMaster.Master %>
Vi MasterType c thit lp, gi y trang c th truy xut thuc tnh Keywords ca trang
master trong s kin Load ca n:
Me.Master.Keywords = myProduct.Keywords
Dng m ny truy xut thuc tnh cng khai Keywords ca trang master. Bi v MasterType
c thit lp, Visual Studio 2005 nhn bit c cc thuc tnh v phng thc ca trang
master, cho nn bn nhn c s h tr IntelliSense.
Vi thuc tnh Keywords c thit lp trn trang master, cc th <meta> c thm t ng
vo trang khi trang c hin th.
Cc t kha c thm vo Product trang InsertUpdateProduct.aspx trong phn qun tr ni
dung ca website, s c tho lun sau.
Vi mt t m lnh trong file master, bn to nn mt cch rt linh hot xen siu d liu
vo phn <head> ca trang. Theo mc nh, trang master m bo mi trang c t nht mt th
meta description, nhn gi tr t file Web.config. Tuy nhin, gi y cc trang cn thit lp th
meta description hay keywords chi tit hn c th thc hin bng cch truy xut cc thuc
tnh cng khai ca trang master. Cng kh d dng m rng m lnh trong trang master
thm cc th meta khc nh copyright, author,
Cc file v th mc khc
N goi cc file ti th mc gc, Customer Support cn c nhiu file v th mc khc. Lt na
y bn s tm hiu cc file trong th mc ContentFiles (cu thnh giao din cng khai ca
website) v th mc Management (cha h thng qun tr ni dung ca website). y ch m
t ngn gn mt vi file v th mc khc:
website:
thy hp.
logo s dn n gc ca website.
79
Chng 8. Customer Support
9
9
9
CssTh mc ny cha hai file CSS: Core.css v Styles.css. Core.css cha tt c cc phn
t CSS kim sot cm quan ca website. Styles.css cha cc lp style ty bin, nh
hng n din mo ca cc phn t nh hn nh cc nt nhn, cc header v cc
hng ca iu kim GridView.
FCKeditorTh mc ny cha FCKeditor c s dng trong phn qun tr. Tham kho
chng Blog hiu r hn v editor ny.
ImagesCha cc hnh c s dng trong giao din website, nh logo. Ch rng,
y khng phi l th mc cha cc hnh v file c upload.
UserFilesc s dng bi FCKeditor v phn qun tr lu tr cc hnh nh v sn
phNm, download,
Trong on m trn, cc thuc tnh quan trng c in m d thy hn. Trong danh sch
th xung th nht, AppendDataBoundItems c thit lp l True m bo bt c mc tnh
no (nh mc Chn mt chng loi) cng c thm vo m nh du ca trang, khng b thay
th bi cc mc t c s d liu. N goi ra, AutoPostBack trn tt c cc iu kim u c
thit lp l True m bo trang s c lm ti khi ngi dng chn mt mc mi t mt
danh sch th xung. Ban u khi trang np, danh sch th xung th hai v th ba b Nn i
bng cch thit lp Visible l False. M lnh trong code-behind ca trang s lm cho cc
danh sch th xung ny hin th khi thch hp. M lnh s c xt sau.
80
Chng 8. Customer Support
Mt thuc tnh quan trng khc ca cc danh sch th xung l DataSourceID. Danh sch th
xung th nht tr n iu kim <asp:ObjectDataSource> c tn l odsCategoryLevell, th hai
l odsCategoryLevel2, v th ba l odsCategoryLevel3. C ba iu kim ObjectDataSource s
dng tn lp v phng thc ging nhau. on m sau l m nh du ca ObjectDataSource
th nht:
<asp:ObjectDataSource ID=odsCategoryLevel1 runat=server
SelectMethod=GetCategoryList TypeName=Category>
<SelectParameters>
<asp:Parameter Name=parentCategoryId Type=Int32 />
</SelectParameters>
</asp:ObjectDataSource>
im quan trng phng thc ny l t kha Shared, c ngha rng phng thc ny thc
thi trn mt kiu (lp Category) ch khng phi trn mt th hin ca kiu. Bi v phng
thc ny l chia s, cho nn ObjectDataSource khng cn tham chiu n mt th hin ca
Category m vn c th gi phng thc GetCategoryList mt cch trc tip. N u phng
thc ny khng c nh du l Shared, ObjectDataSource t ng to mt th hin ca lp
Category bng cch gi phng thc khi dng mc nh khng tham s ca n. N u phng
thc ny khng c nh du l Shared v lp khng c phng thc khi dng mc nh
khng tham s, ObjectDataSource khng th to mt th hin ca lp v gi phng thc. Tuy
nhin, bn vn c th cp cho ObjectDataSource mt th hin ca lp trong s kin
ObjectCreating ca n. Bn s thy cch lm vic ny trong chng 12 (BugBase).
Phng thc
CategoryDB:
GetCategoryList
81
Chng 8. Customer Support
Dim myDataAdapter As SqlDataAdapter = New SqlDataAdapter()
myDataAdapter.SelectCommand = myCommand
myDataAdapter.Fill(myDataSet)
myConnection.Close()
Return myDataSet
End Using
End Function
82
Chng 8. Customer Support
PropertyName=SelectedValue Type=Int32 />
</SelectParameters>
</asp:ObjectDataSource>
Khi
AddWithValue.
Khi
CategoryId
83
Chng 8. Customer Support
<asp:DataList ID=dlProducts runat=server DataKeyField=Id
DataSourceID=odsProducts EnableViewState=False >
<ItemTemplate>
<h2>
<%# Eval(Title) %>
</h2>
<p class=Summary>
<asp:Image ID=productImage runat=server
ImageUrl=<%# Eval(ImageUrl) %> ImageAlign=Right />
<%# Eval(TagLine) %>
</p>
<br />
<asp:HyperLink ID=hyperReadMore runat=server
NavigateUrl=<%# ProductDetails.aspx?Id= & Eval(Id) %>
Text=Xem tip />
</ItemTemplate>
</asp:DataList>
Bi v Get l mt t dnh ring trong Visual Basic .NET, bn phi bao quanh Get bng hai du
ngoc vung bo vi trnh bin dch b qua ngha c bit ca t kha . N u bn cm
thy iu ny khin m lnh rc ri, ch vic i tn phng thc thnh GetItem hoc
GetProduct l xong. Tt c cc phng thc Get trong tng nghip v v tng truy xut d liu
u c hai du ngoc vung bao quanh tn ca chng.
Bn thy cch lm vic ca Product Locator, gi n lc xem m lnh trong trang Downloads.
Trang ny s dng cc khi nim ging nh Product Locator, nhng cng c mt s im ng
xt k hn hn cht.
84
Chng 8. Customer Support
Hnh 8-16
T s ny, bn c th thy Rocks Hardware c hai chng loi con: 3D Printers v Power Printers.
Mi chng loi ny c ba mNu tin con. Khi chn Rocks Hardware t danh sch th xung th
nht, Download List hin th tt c cc mNu tin c lin quan vi Rocks Hardware, bao gm cc con
chu ca n. N u chn Power Printers t danh sch th xung th hai, bn s thy cc mNu tin
thuc chng loi gc Rocks Hardware (nh Warranty Document), Power Printers, v tt c cc chng
loi con ca n. Danh sch khng cn hin th cc mNu tin gn vi chng loi 3D Printers. Cui
cng, khi chn 850 T5 t danh sch th xung th ba, bn s thy cc download gn vi chng
loi mt cch trc tip hoc gn vi cha ng ca n, khng cn cc download ng vi
chng loi 850 hay V70.
Vic chn d liu phn cp nh trong v d trn lun gy kh khn cho cc phin bn SQL
Server c. Phin bn SQL Server 2005 a ra mt khi nim mi: Common Table Expressions (CTE).
CTE l mt kt qu tm thi vi tn c th c s dng trong cc biu thc v m lnh khc.
N ging nh mt bng trong b nh, v bn c th lin kt n vi cc bng khc. im hay
ca CTE l h tr quy, cho php bn thc hin cc truy vn rt mnh ch vi mt vi dng
m.
bit CTE lm vic ra sao, bn hy xem iu kim ObjectDataSource trong trang Downloads:
<asp:ObjectDataSource ID=odsDownloads runat=server
SelectMethod=GetDownloadList TypeName=Download>
<SelectParameters>
<asp:ControlParameter ControlID=lstCategoryLevel1 Name=categoryId
PropertyName=SelectedValue Type=Int32 />
<asp:Parameter Direction=InputOutput Name=recordsAffected Type=Int32 />
</SelectParameters>
</asp:ObjectDataSource>
85
Chng 8. Customer Support
DownloadDB,
m s
Phng thc
GetProductList
Mnh SELECT v FROM trng rt bnh thng, mnh ORDER BY cng vy. Mnh WHERE
hi phc tp. Th nht, bn thy mt cu lnh IN. Cu lnh ny trong ngn ng T-SQL l mt
cch tin li ly nhiu mNu tin, chng hn theo ID. Cu lnh SELECT di y tr v cc
download thuc chng loi c ID l 3, 7, hay 8:
SELECT Id, Description FROM Download WHERE CategoryId IN (3, 7, 8)
86
Chng 8. Customer Support
87
Chng 8. Customer Support
Hnh 8-17
Khi cu lnh SELECT ca thnh vin neo thc thi, n thm mNu tin u tin vo tp kt qu vi
Id l 67 v ParentCategoryId l 64. Sau thnh vin quy thc thi, v ly cc chng loi c
Id trng vi ParentCategoryId ca mNu tin V70. Ch c mt mNu tin nh th, l mNu tin
Power Printers vi ID l 64 v ParentCategoryId l 55. MNu tin ny cng c thm vo tp kt
qu. Sau , cu lnh SELECT c lp li cho mNu tin va c thm vo, v lc ny n ly
chng loi cha ca mNu tin Power Printers, dn n chng loi Rocks Hardware c thm vo tp
kt qu.
Hm fnSelectChildCategories ly cc mNu tin con ca mt chng loi, hot ng cng tng
t nh trn. Tuy nhin, bi v mt chng loi cha c th c nhiu mNu tin con, ri mNu tin con
c nhiu mNu tin con khc na, tp kt qu c th ln hn.
Th tc tn tr ly cc download t c s d liu s ly c cc mNu tin con v cc mNu tin cha
bng cu lnh UNION. Theo cch ny, ng dn y ca mt chng loi c tr v, bao
gm tt c cha ng v con chu ca n. N u bn ch mun thu ly cc mNu tin con ca mt
chng loi, hy b cu lnh UNION v dng chn t hm fnSelectParentCategories khi th
tc tn tr sprocDownloadSelectList.
Bn thy cch ly cc mNu tin t c s d liu ca th tc tn tr sprocDownloadSelectList,
phn k tip m bn cn tm hiu l cch nhn bit danh sch th xung ca trang Downloads.
Hy xem ObjectDataSource odsDownloads, tp trung vo nt <SelectParameters> vi mt
<asp:ControlParameter>:
<asp:ObjectDataSource ID=odsDownloads runat=server SelectMethod=GetDownloadList
TypeName=Download>
<SelectParameters>
<asp:ControlParameter
ControlID=lstCategoryLevel1 Name=categoryId PropertyName=SelectedValue
Type=Int32 />
<asp:Parameter Direction=InputOutput Name=recordsAffected Type=Int32 />
</SelectParameters>
</asp:ObjectDataSource>
88
Chng 8. Customer Support
Protected Sub lstCategoryLevel2_SelectedIndexChanged(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles lstCategoryLevel2.SelectedIndexChanged
If Not lstCategoryLevel2.SelectedValue = Then
Hin th danh sch th xung th ba
lstCategoryLevel3.Visible = True
Kt odsDownloads cho danh sch th xung ny
Dim myParam As ControlParameter = _
CType(odsDownloads.SelectParameters(0), ControlParameter)
myParam.ControlID = lstCategoryLevel2
lstCategoryLevel3.DataBind()
Else
Dim myParam As ControlParameter = _
CType(odsDownloads.SelectParameters(0), ControlParameter)
myParam.ControlID = lstCategoryLevel1
lstCategoryLevel3.Visible = False
End If
End Sub
M lnh ny thc thi khi bn c mt la chn khc trong danh sch th xung th hai. Bn
trong phng thc th s kin SelectedIndexChanged ca danh sch th xung ,
SelectedValue c kim tra. N u c gi tr (tc l c mt chng loi hp l c chn),
SelectParameter ca ObjectDataSource c thay i ng thnh danh sch th xung th hai:
Dim myParam As ControlParameter = _
CType(odsDownloads.SelectParameters(0), ControlParameter)
myParam.ControlID = lstCategoryLevel2
89
Chng 8. Customer Support
ByVal e As System.Web.UI.WebControls.ObjectDataSourceStatusEventArgs) Handles _
odsDownloads.Selected
Dim recordsAffected As Integer = _
Convert.ToInt32(e.OutputParameters.Item(recordsAffected))
End Sub
8.3.4 FAQ
Trang cha cc cu hi thng gp khc vi cc trang m bn thy. Thay v s dng cc
danh sch th xung cho cc chng loi, trang Faqs cho php ngi dng tm kim trn ton
b bng Faq vi mt truy vn h tr logic AND v OR. Do , truy vn driver AND failure s
tr v tt c cc cu hi thng gp c cha t driver v failure, trong khi truy vn
driver OR failure tr v cc FAQ cha t nht mt trong hai t .
Cc phin bn thng mi ca SQL Server 2005 cung cp khi nim Full Text Indexing. y l mt
k thut tm kim rt mnh, cho php bn t nhiu cu hi phc tp hn cc truy vn Boolean
n gin. Tuy nhin, Full Text Indexing khng c trong SQL Server Express Edition, do bn phi
ci phin bn y nu mun s dng tnh nng ny. Tham kho SQL Server Books Online hoc
website MSDN ca Microsoft (http://msdn.microsoft.com) hiu thm v Full Text Indexing.
M nh du ca trang Faqs rt n gin: dng ch gii thiu, mt textbox nhp chui tm
kim, mt nt nhn bt u tm kim, v hai placeholder hin th mt thng bo cho
ngi dng bit s lng kt qu tm c. N cng c mt iu kim DataList hin th
cc cu hi thng gp v cc cu tr li. C l bn n s vng bng ca cc iu kim
ngun d liu trong m nh du ca trang? Trang ny khng c iu kim ngun d liu,
mi php kt d liu u c thc hin trong code-behind ca trang, trong s kin Click ca
nt nhn:
Protected Sub btnSearch_Click(ByVal sender As Object, _
ByVal e As System.EventArgs) Handles btnSearch.Click
dlFaqs.DataSource = Faq.GetFaqList(txtSearchTerm.Text)
dlFaqs.DataBind()
If dlFaqs.Items.Count > 0 Then
lblSearchedFor2.Text = txtSearchTerm.Text
plcRecords.Visible = True
plcNoRecords.Visible = False
Else
lblSearchedFor1.Text = txtSearchTerm.Text
plcNoRecords.Visible = True
plcRecords.Visible = False
End If
End Sub
90
Chng 8. Customer Support
91
Chng 8. Customer Support
=
=
=
=
=
=
=
=
=
searchTerm.Trim()
searchTerm.Replace(', '')
searchTerm.Replace("", )
searchTerm.Replace(%, )
searchTerm.Replace(--, )
searchTerm.Replace(;, )
searchTerm.Replace((, )
searchTerm.Replace(), )
searchTerm.Replace(_, )
Next
92
Chng 8. Customer Support
Return whereClause
End Function
=
=
=
=
=
=
=
=
=
searchTerm.Trim()
searchTerm.Replace(', '')
searchTerm.Replace("", )
searchTerm.Replace(%, )
searchTerm.Replace(--, )
searchTerm.Replace(;, )
searchTerm.Replace((, )
searchTerm.Replace(), )
searchTerm.Replace(_, )
Bin simpleSearch c s dng xc nh chui tm kim ban u c cha t kha AND hay
OR hay khng. Bin whereClause c s dng cha mnh WHERE m phng thc ny
xy dng. Phng thc Replace c s dng nhiu ln loi b cc k t khng cn thit
cho cu lnh SQL. N u bn khng lm sch m SQL, c s d liu ca bn s d b hacker tn
cng theo kiu SQL Injection. Bnh thng, m lnh th tc tn tr c tham s ha s m
nhn vic ny; nhng vi mt cu lnh SQL ng, bn phi t thc hin vic ny. Trong bn
hin thc hin ti, m lnh lm sch c nhng trc tip trong phn thn ca phng thc,
nhng nu bn c nh s dng k thut ny thng hn th nn chuyn n thnh mt
phng thc ring bit. Bn c th thy mt s k t quan trng, c ngha c bit trong TSQL c thay th. V d, hai du gch ngang (--) c thay bng rng. Hai k t ny biu
th bt u mt ch thch, nhng cng c hacker s dng khng cho phn SQL cn li
thc thi. Du nhy n (') c thay bng hai du nhy n (''), v du nhy kp (") b loi
b hon ton bi v chng c th c s dng xen cc du phn cch chui khng hp l.
Du phn trm (%) b loi b ngn ngi dng tm vi cc k t i din (wildcard).
Cc cu lnh k tip s dng bin testReplace v phng thc
kim ban u cha cc t kha AND hay OR hay khng:
Replace
xem chui tm
N u mt trong hai t kha ny hin din trong chui tm kim, gi nh rng ngi dng c
s dng logic Boolean trong chui tm kim. N gc li, mi khong trng trong chui tm
kim c thay bng AND. Do , nu ngi dng tm driver OR failure, chui tm kim
khng thay i. Tuy nhin, nu ngi dng tm driver failure, chui tm kim c thay
bng driver AND failure.
93
Chng 8. Customer Support
Khi m tip theo s dng phng thc Split ca i tng Regex tch chui tm kim da
trn t kha AND, sau duyt qua mng ny v quan st tng phn t ring l:
Dim myAndSplits() As String = Regex.Split(searchTerm, and , _
RegexOptions.IgnoreCase)
For i As Integer = 0 To myAndSplits.Length - 1
Sau , m lnh tch phn t da trn t kha OR. N u t kha ny khng hin din trong
phn t, vng lp For j thc thi ng mt ln v thm phn t vo mnh WHERE (c bao
quanh bi du ngoc n). N u phn t c cha t kha OR, vng lp thm mi mc ring l
vo mnh WHERE (c phn tch bi t kha OR):
Dim myOrSplits() As String = Regex.Split(myAndSplits(i), or , _
RegexOptions.IgnoreCase)
whereClause += (
For j As Integer = 0 To myOrSplits.Length - 1
whereClause += (F.QuestionShort LIKE N% & myOrSplits(j) & % OR _
F.QuestionLong LIKE N% & myOrSplits(j) & % OR F.Answer LIKE N% & _
myOrSplits(j) & %)
If (j + 1) < myOrSplits.Length Then
whereClause += OR
End If
Next
whereClause += )
If (i + 1) < myAndSplits.Length Then
whereClause += AND
End If
Next
Return whereClause
End Function
94
Chng 8. Customer Support
(
(
)
OR
(
Cu lnh
thng.
EXEC
SELECT
thng
n y xem nh kt thc phn FAQ v ton b phn cng khai ca Customer Support. Vi cc
trang trong th mc ContentFiles, ngi dng c th d dng tm thy cc sn phNm, cc file i
km sn phNm, v duyt qua cc cu hi thng gp.
Phn cui cng ca M lnh Customer Support kho st cc trang trong th mc Management,
cha CMS cho Customer Support.
95
Chng 8. Customer Support
Trang Categories.aspx cho php bn thm cc chng loi mi vo c s d liu. Bng vic s
dng cc danh sch th xung quen thuc, bn c th i su vo cu trc phn cp chng loi
v thm mt chng loi mi ti mi mc. im quan trng cn lu trang ny l cch s
dng cc validator. Trang ny c ba textbox, cho php bn nhp mt chng loi mi thm
vo c s d liu ti mi mc. Mi textbox c mt iu kim <asp:RequiredFieldValidator>
gn vi n. Thng thng, vi ba validator, bn cn phi nhp d liu vo c ba textbox trc
khi trang xc nhn tnh hp l. Tuy nhin, trong trng hp ny, ch mt trong ba textbox l
bt buc. cho php ch mt validator ti mt thi im, mi validator c mt c tnh
ValidationGroup khc nhau. Di y l validator kim tra textbox th nht:
<asp:RequiredFieldValidator ID=reqLevel1 ValidationGroup=Level1 runat=server
ControlToValidate=txtLevel1 Display=Dynamic
ErrorMessage=* />
Cc iu kim kch hot vic kim tra hp l (nh cc nt nhn) gi y cng c c tnh
ValidationGroup. Theo cch ny, bn c th gn cc iu kim postback vi mt
ValidationGroup c th:
<asp:Button ID=btnAddNewLevel1 runat=server Text=Thm mc 1 mi
ValidationGroup=Level1 />
Cc trang lit k
Cc trang lit k sn phNm, download, v FAQ rt ging nhau. Chng s dng mt GridView
hin th cc mc. Cc nt Sa v Xa cho php bn thay i cc mc hin c v xa chng.
RowCommand cho mi GridView xt CommandName ca i s xc nh hnh ng phi c
thc hin, s dng mt mnh Select Case. Bn trong mi khi Case, m lnh chuyn
CommandArgument thnh Integer v s dng n thu ly DataKey ca khung li. Bn c th
di m lnh ny ra ngoi mnh Select Case bn ch phi vit c mt ln. Tuy nhin khi
lm th, bn s gp vn khi sp xp GridView. Mc d vic sp xp c thc hin t ng
bi ASP.NET, nhng n vn pht sinh RowCommand khi bn nhp vo mt trong cc tiu ct
sp xp khung li. Khi thc hin nh th, CommandArgument ca tham s e cha tn ca ct
cn sp. R rng, tn ct khng th no chuyn thnh Integer c, do m lnh s ph
sn.
Cc trang to v cp nht
Vi mi loi ni dungDownload, FAQ, v Sn phmc mt trang InsertUpdate cho php bn
to mi v cp nht cc mc ang tn ti. C ba u s dng FCKeditor. M lnh ca trang
Download v Product s dng phng thc GetCategoryPath ca lp Category. Phng thc ny
tr v ng dn ca mt chng loi t mNu tin con n mNu tin cha. Phng thc ny l cn
thit bi v mc ni dung trong c s d liu ch cha chng loi con su nht. c th chn
trc danh sch th xung ca cc mc cha, bn cn bit mt chng loi c cc chng loi
cha no. Th tc tn tr sprocCategorySelectPath ln na s dng Common Table Expressions
theo cch m bn thy trc y.
Vi cc trang ny v m lnh ca chng, bn i ht phn M lnh Customer Support. Gi
y, bn c th s dng v hiu r li hot ng bn trong ca Customer Support. Trong phn
tip theo, bn s bit cch ci t ng dng ln web server.
96
Chng 8. Customer Support
8.4
Ci t Customer Support
Cng nh cc chng khc trong quyn sch ny, bn c th chn ci t Customer Support t
ng hay bng tay. Qu trnh ci t t ng cho php bn thit lp ng dng chy di IIS.
iu ny hu ch nu bn mun trin khai h thng trn cc server internet hay intranet cc
b. N u mun xem xt chi tit m lnh v ci tin n, bn nn chn qu trnh ci t bng tay.
S dng gi ci t
N u bn mun ci t CustomerSupport nh mt website thc th trn mt my tnh hay my
server, khng c hiu chnh hay m rng g c, thc hin theo cc bc sau (s dng gi ci
t):
Chy file WebSetupProjects\CustomerSupport\Debug\CustomerSupport.msi t CD-ROM nh
km. Qu trnh ny ci t nhng file cn thit vo th mc C:\Inetpub\wwwroot\
CustomerSupport\. Ch rng, trong lc ci t, c mt mn hnh yu cu bn xc nhn
tn th mc o, bn hy gi nguyn tn mc nh l CustomerSupport (xem hnh 8-18).
Hnh 8-18
97
Chng 8. Customer Support
Ci t bng tay
Mc d s dng gi ci t l mt cch rt tin li ci t Customer Support, ci t bng tay
cng khng my kh. ci t Customer Support bng tay, tun theo cc bc sau:
Chp th mc Websites\CustomerSupport\ t CD-ROM nh km vo a cng, chng hn
C:\Websites\CustomerSupport\.
M Visual Studio 2005 (hay Visual Web Developer). Chn File | Open Web Site v tm n th
mc C:\Websites\CustomerSupport\. Khi , ca s Solution Explorer cha tt c cc file
ca d n.
K tip, m file Web.config t Solution Explorer v tm nt <connectionStrings>. Kim
tra chui kt ni c tr n bn ci t SQL Server ca bn hay khng v iu chnh
nu cn thit. Lu v ng file ny.
Cng ging nh chng 7 (CMS), bn cn cu hnh cc quyn bo mt cho th mc
UserFiles, website c th lu cc file c upload qua website v FCKeditor. Tham
kho chng c nhng ch dn chi tit.
By gi bn c th duyt website bng cch nhn Ctrl+F5. Visual Studio 2005 (hay Visual
Web Developer) s khi chy web server ni b v website s c hin th trong trnh
duyt mc nh.
98
Chng 8. Customer Support
Hnh 8-19
N hm to s thun li khi l gii cch hot ng ca Customer Support, cng nh cho php bn
truy xut d dng phn phn tr, khng c c ch xc thc no c s dng cho website ny.
iu ny c ngha: bt c ai cng c quyn truy xut phn qun tr ca website ny. D nhin
y khng phi l iu bn mun, cho nn bn cn bo v vng . thc hin vic ny,
chn Website | ASP.NET Configuration t trnh n chnh ca Visual Studio 2005 hay Visual Web
Developer. N h th, Web Site Administration Tool s xut hin trong ca s trnh duyt. To vai tr
ContentManagers v mt ngi dng, ri gn ngi dng ny vo vai tr . N u bn cn thm
thng tin v cch lm vic ca Web Site Administration Tool, nhp lin kt How do I use this tool?
gc trn phi ca mn hnh.
Bc k tip l thm on m sau vo cui file Web.config, ngay sau th ng ca nt
<system.web>:
</system.web>
<location path=Management>
<system.web>
<authorization>
<allow roles=ContentManagers />
<deny users=*/>
</authorization>
</system.web>
</location>
on m trn khng cho php truy xut th mc Management i vi nhng ngi dng khng
thuc vai tr ContentManagers.
Mt gii php khc l to mt website CMS hon ton mi, kt ni vi c s d liu Customer
Support. Vi cch ny, bn c th tch bit phn cng khai vi phn c bo v ca website.
99
Chng 8. Customer Support
Trong phn tip theo, bn s bit cch m rng Customer Support n hu ch hn. Phn ny
xut mt s tnh nng ci tin cho Customer Support v hin thc mt trong nhng tnh nng
.
8.5
Mt ci tin cho Customer Support l cho php ngi dng lin h vi bn thng qua mt form
Contact. Theo cch ny, ngi dng c th t nhng cu hi v sn phNm. Sau , cc cu hi
ny cng cc cu tr li c th c thm vo danh sch FAQ ca site.
Phn ny s hng dn bn to mt tnh nng nh th. Bn s bit cch to form v cch gi
e-mail cho b phn h tr khi mt ngi dng in vo form. Thm na, bn s bit cch lu
nhng chi tit v ngi dng vo Profile ngi dng khng phi nhp i nhp li nhng
chi tit v mnh. hin thc form Contact, tun theo cc bc sau:
Thm mt trang mi vi tn l Contact.aspx trong th mc ContentFiles. Cho trang ny
s dng trang MainMaster.master.
Trong iu kim MainMenu.ascx (thuc th mc Controls), thm mt lin kt n trang
mi ny ngi dng c th truy xut n.
Trn trang Contact, to mt form vi cc textbox cho tn ngi dng, a ch e-mail,
v cu hi/li bnh. t tn cho cc iu kim ny ln lt l txtUserName,
txtEmailAddress, v txtComments. Thit lp thuc tnh TextMode ca txtComments l
MultiLine. Thm nt btnSave vi text l Gi comment.
Thm checkbox chkRememberMe ngi dng chn lu nhng chi tit v h. Tip
tc, thm nhn lblStatus bo vi ngi dng rng thng ip c gi.
N u mun, bn c th thay i b cc trang thnh bt c g m bn thy hp. Bn c
th s dng cc bng v nhn trang c d c.
N hp p vo nt nhn trong Design View VWD thm m lnh th l s kin
ca nt nhn.
Click
100
Chng 8. Customer Support
Hnh 8-20
101
Chng 8. Customer Support
ca i tng SmtpClient. cui phng thc, nhng chi tit v ngi dng
c lu vo Profile nu ngi dng chn lu.
Send
Bc cui cng trong trang Contact l a nhng chi tit v ngi dng vo cc
TextBox nu chng tn ti trong profile. lm iu , thm on m sau vo
phng thc th l s kin Page_Load m bn thm bc 7:
If Not Page.IsPostBack Then
txtUserName.Text = Profile.Name
txtEmailAddress.Text = Profile.EmailAddress
End If
8.6
Kt chng
Trong chng ny, bn c gii thiu Customer Support, mt website cho php ngi dng
tm v ly thng tin v cc sn phNm m cng ty Codepro Hardware bn.
u tin, bn do qua h thng t gc ngi dng cui. Bn bit cch tm kim sn phNm,
cc file i km, v cc cu hi thng gp.
Tip n, bn c ci nhn khi qut v bn thit k ca h thng. Bn thy rng ng dng
c tch lm ba tng khc nhau: mt cho trnh by, mt cho logic nghip v, v mt cho
truy xut d liu. Bn thy qua danh sch cc lp c lin quan v cc phng thc m chng
h tr.
Trong phn M lnh Customer Support, bn xt k m lnh bn trong tt c cc lp v cc
trang. Bn bit cch trin khai cc iu kim ObjectDataSource p dng kin trc ba tng
cho ng dng. Cc iu kim ny cho php bn to cc ng dng thit k tt v d bo tr
(khng phi lm ri cc trang bng nhiu lnh SQL hay tn th tc tn tr). Bn cng bit cch
102
Chng 8. Customer Support
s dng tnh nng Common Table Expressions trong SQL Server, mt k thut mnh to m
quy, cho php bn thu ly cc cu trc d liu phc hp, phn cp t c s d liu.
Cui chng, bn bit cch ci t Customer Support v hin thc mt ci tin cho n.