回憶一下吧,昨天我們實現(xiàn)了從數(shù)據(jù)庫把內(nèi)容動態(tài)顯示到頁面上。用到了兩個NoahWeb表現(xiàn)層的指令。
一個是
<!-- NoahLoopStart SQLLinkId="mynews_S_All" AutoMode="True" AutoReset="True" NewRunMode="False" --><!-- NoahLoopEnd -->
該指令通俗點說就是根據(jù)數(shù)據(jù)庫操作返回的結(jié)果行數(shù)產(chǎn)生循環(huán),循環(huán)的內(nèi)容就是Start標(biāo)簽和End標(biāo)簽之間的內(nèi)容。比如查詢返回的內(nèi)容有6行,那么就會將此標(biāo)簽所包含的內(nèi)容產(chǎn)生6次循環(huán)。而SQLLinkId屬性就是指定根據(jù)那一個數(shù)據(jù)庫操作來產(chǎn)生循環(huán),我們現(xiàn)在使用的是"mynews_S_All",那就表示會根據(jù)mynews_S_All這個操作集的返回結(jié)果來產(chǎn)生循環(huán)。
接著我們看另外一個指令
<!-- NoahValue ValueName="[_LOOP.*.title]" MaxChar="" DChar="" Safety="False" -->
和
<!-- NoahValue ValueName="date('O',mktime([_LOOP.*.newdate]))" MaxChar="" DChar="" Safety="False" -->
這兩個指令是同一個指令標(biāo)簽,昨天的課程已經(jīng)和大家講過NoahValue指令是用來回顯變量內(nèi)容到該標(biāo)簽所在的位置的,這兩個標(biāo)簽內(nèi)的ValueName是不相同的,一個是"[_LOOP.*.title]"另一個是"date('O',mktime([_LOOP.*.newdate]))"。
我們先看一下"[_LOOP.*.title]",在NoahWeb中用"[]"來包住的內(nèi)容都是一個變量內(nèi)容,而變量內(nèi)容又通過變量前綴關(guān)鍵詞來區(qū)分訪問不同種類的變量。我們在這用到的是_LOOP變量前綴關(guān)鍵詞。_LOOP從字意上就能理解它指的就是指產(chǎn)生當(dāng)前這個循環(huán)的數(shù)據(jù)庫操作,_LOOP后面的"."是分割符號,'*'指是就是循環(huán)時所指示的行,最后的title就是指的數(shù)據(jù)庫字段"title"中的內(nèi)容。發(fā)散思維想一想就可以知道,如果我要返回的不是數(shù)據(jù)庫中的title,而是newcontent,則就寫成"[_LOOP.*.newcontent]",如果是訪問author就寫成"[_LOOP.*.author]",如此照搬就行,其實很容易。
再來看另一段指令中的ValueName內(nèi)容,我們一開始寫的時候是直接寫成"[_LOOP.*.newdate]"了,按我們剛才的學(xué)的就知道這是返回數(shù)據(jù)庫中的newdate這個字段?墒秋@示出來的日期會顯示出"YYYY-MM-DD hh:mm:ss"這樣的格式,顯示的時候我只想要顯示出"YYYY-MM-DD"部分,所以使用了NoahWeb的兩個日期函數(shù)來返回該部分,NoahWeb的函數(shù)和PHP的很接近,使用過PHP的人不會對這樣的函數(shù)格式陌生。
上面是昨天遺留沒講的內(nèi)容,下面接著講今天要講的內(nèi)容。
我們現(xiàn)在已經(jīng)做出新聞列表,剩下的工作就是點擊查看某條新聞以后能顯示出新聞的詳細(xì)內(nèi)容。傳統(tǒng)的做法是另外建一個新的頁面,比如新建一個"content.aspx"這樣的頁面來做。可是我們今天可以用一下NoahWeb中很有意思的一個新東西“動作”來做。有關(guān)“動作”的理論內(nèi)容比較長,在這我就不多說了。有興趣的同學(xué)可以上官方站點看看文檔,我們今天僅是講一下在表現(xiàn)層里怎么使用。
我們先把昨天的新聞列表的代碼繼續(xù)修改成一個HTML中的超鏈接。修改的方式如下
在顯示<!-- NoahValue ValueName="[_LOOP.*.title]" MaxChar="" DChar="" Safety="False" -->前后加上<a href="">和</a>
這樣在瀏覽器里顯示出來的就是一個帶鏈接的列表。如下:
然后我們來指定一下鏈接后打開的地址,方式是把<a href="">寫成<a href="default.aspx?action=view&newsid=<!-- NoahValue ValueName="[_LOOP.*.id]" MaxChar="" DChar="" Safety="False" -->">,內(nèi)容的意思是鏈接打開的地址是default.aspx,并且傳遞一個名為action的變量等于view,action是NoahWeb中默認(rèn)的動作變量名,這樣的話就會激發(fā)view的動作,連接的地址內(nèi)容上還帶一個名為newsid的變量值。傳遞的是新聞表中的id字段內(nèi)容,如下
存盤以后在瀏覽器里打開的就是
<tr> <td><a href="default.aspx?action=view&newsid=1">有關(guān)MYSITE的開發(fā)消息</a>(2005-06-21)</td> </tr><tr> <td><a href="default.aspx?action=view&newsid=2">MYSITE所使用技術(shù)</a>(2005-06-21)</td> </tr><tr> <td><a href="default.aspx?action=view&newsid=3">開發(fā)周期安排</a>(2005-06-21)</td> </tr><tr> <td><a href="default.aspx?action=view&newsid=4">MYSITE其他安排</a>(2005-06-21)</td> </tr><tr> <td><a href="default.aspx?action=view&newsid=5">招聘公告</a>(2005-06-21)</td> </tr><tr> <td><a href="default.aspx?action=view&newsid=6">10日發(fā)薪水通告</a>(2005-06-21)</td> </tr>
類似上面的代碼。
接下來我們?yōu)榱俗屚粋頁面又能顯示列表又能顯示指定ID的新聞我們在DW中繼續(xù)對default.aspx做改動。
新加一個HTML的表格在里面用來準(zhǔn)備顯示新聞的內(nèi)容。具體如下圖:
這樣在保存以后在瀏覽器中顯示的結(jié)果如下圖:
為了讓新聞顯示的部分只出現(xiàn)在執(zhí)行動作view的時候,我們可以DW來幫助我們插入另一個指令"NoahWeb Objects"下的"NoahIfAction",具體方式如下:
然后在Action屬性里輸入"view",如下圖:
這樣就表示當(dāng)執(zhí)行動作view的時候才會顯示此部分內(nèi)容,我們可以存盤以后在瀏覽器里刷新一下,看看輸出的樣子,如下:
顯示內(nèi)容的表格在default.aspx默認(rèn)打開的已經(jīng)不顯示,只有當(dāng)我們點中其中某條新聞鏈接后才會看到下面的內(nèi)容,如圖:
我們?nèi)绻研侣劻斜淼倪@個表格也用一個動作指令來劃分的話,就可以讓執(zhí)行view動作的時候不顯示出列表,操作方法如下:
這次插入后不用在Action的屬性里填寫任何內(nèi)容,這樣也就表示在不執(zhí)行任何動作的時才執(zhí)行該部分代碼,存盤保存以后刷新瀏覽器就能看到下面的結(jié)果:
OK,現(xiàn)在就差一步了!把要選擇的新聞內(nèi)容顯示在這個表格里,我們還是僅借助一下NoahLoop指令和NoahValue指令配合查詢集就能做到,為了此目的,我們還是再通過設(shè)計器建一個數(shù)據(jù)庫操作集出來,不知道大家是否還記得怎么建呢?我放幾張截圖吧,大家看看圖回憶一下,話就不多說了。
請看截圖:
第一步:建一個操作集
第二步:修改操作集的各種參數(shù),被修改過的地方我用紅圈標(biāo)記出來,注意一下,這次我加了一個局部變量的內(nèi)容,并加了一個查詢的條件。
第三步:保存以后看到操作集中出現(xiàn)下面的內(nèi)容。
上面的操作就相當(dāng)于我們寫了一個"select * from mynews where id='[newsid]'"的數(shù)據(jù)庫查詢。
然后我們繼續(xù)在DW中對顯示新聞內(nèi)容的表格插入NoahLoop指令,具體操作我們以前也做過,現(xiàn)在還是回憶一下,如下:
當(dāng)執(zhí)行完插入操作以后因為我們準(zhǔn)備調(diào)用的mynews_S_newid是需要傳遞一個局部變量的,所以這次我們使用NoahWeb設(shè)計器自帶的輔助功能來獲得LoopStart的代碼,方式很簡單,就是在設(shè)計器中操作集"mynews_S_newid"上面用鼠標(biāo)右鍵點出輔助功能,如下圖:
然后設(shè)計器就會為我們生成一段代碼放入計算機的剪貼板中。我們把他直接貼到DW中替換掉剛才新建的LoopStart指令,如下圖:
仔細(xì)看的話會發(fā)現(xiàn),貼進(jìn)去的代碼除了幫我們自動填寫了SQLLinkId成為"mynews_S_newid"外,還多了一個Value屬性,我們現(xiàn)在需要的就是填寫一下這個屬性。
那應(yīng)該填寫什么內(nèi)容呢?我們這樣做是為了顯示出新聞的內(nèi)容,而這部分代碼又只有在執(zhí)行view動作的時候才被執(zhí)行,為了顯示新聞我們已經(jīng)通過了鏈接傳遞了一個叫newsid的變量過來。現(xiàn)在我們就是需要填寫這個變量作為查詢的條件,具體寫法如下:
我們剛才已經(jīng)講過"[]"在NoahWeb表示的都是變量,而現(xiàn)在的_root又是一個變量前綴關(guān)鍵詞,表示的是訪問全局變量內(nèi)容或是客戶端用GET和POST方式提交上來的變量值。這樣我們就可以在這獲得從地址上面?zhèn)鬟f進(jìn)來的newsid的值內(nèi)容。并傳遞給數(shù)據(jù)庫操作集去進(jìn)行查詢。
接下來把表格內(nèi)的文字
"標(biāo)題部分"用之前學(xué)過的方式替換成<!-- NoahValue ValueName="[_LOOP.*.title]" MaxChar="" DChar="" Safety="False" -->
"新聞內(nèi)容部分"也替換成<!-- NoahValue ValueName="[_LOOP.*.newcontent]" MaxChar="" DChar="" Safety="False" -->
OK,大功告成!
保存以后在瀏覽器里刷新一下
怎么樣可以看到內(nèi)容了吧!這樣就完成了。我們可以重新進(jìn)入一下,看一下默認(rèn)進(jìn)來的時候是如下的:
然后這次我點一下"MYSITE所使用的技術(shù)",看到內(nèi)容就是
這個是動態(tài)頁面的做法,小弟近期使用下來對NoahWeb表現(xiàn)層的感覺是熟悉DW的人可以非?斓耐ㄟ^DW開發(fā)出動態(tài)站點,靈活使用設(shè)計器配合DW開發(fā)起來更加容易。表現(xiàn)層里面還有大半指令沒有提到大家有興趣可以自己學(xué)一下,每個都非常有用,而且編寫時也類似這樣的方式,最近小弟還在學(xué)習(xí)NoahWeb邏輯層的東西,過段時間再寫教材給大家共享。謝謝各位同學(xué)的捧場!有不足的地方也請同學(xué)們多多包涵!
出處:藍(lán)色理想
責(zé)任編輯:藍(lán)色
上一頁 用NoahWeb表現(xiàn)層制作動態(tài)網(wǎng)站 第四天 下一頁
◎進(jìn)入論壇網(wǎng)絡(luò)編程版塊參加討論
|