5天學會使用NoahWeb表現層制作動態網站(第五天)


好了。休息了一天,現在有精神多了!同學們是否還記得昨天我們學的東西?

回憶一下吧,昨天我們實現了從數據庫把內容動態顯示到頁面上。用到了兩個NoahWeb表現層的指令。

一個是

<!-- NoahLoopStart SQLLinkId="mynews_S_All" AutoMode="True" AutoReset="True" NewRunMode="False" --><!-- NoahLoopEnd -->

該指令通俗點說就是根據數據庫操作返回的結果行數產生循環,循環的內容就是Start標簽和End標簽之間的內容。比如查詢返回的內容有6行,那么就會將此標簽所包含的內容產生6次循環。而SQLLinkId屬性就是指定根據那一個數據庫操作來產生循環,我們現在使用的是"mynews_S_All",那就表示會根據mynews_S_All這個操作集的返回結果來產生循環。

接着我們看另外一個指令

<!-- NoahValue ValueName="[_LOOP.*.title]" MaxChar="" DChar="" Safety="False" -->

<!-- NoahValue ValueName="date('O',mktime([_LOOP.*.newdate]))" MaxChar="" DChar="" Safety="False" -->

這兩個指令是同一個指令標簽,昨天的課程已經和大家講過NoahValue指令是用來回顯變量內容到該標簽所在的位置的,這兩個標簽內的ValueName是不相同的,一個是"[_LOOP.*.title]"另一個是"date('O',mktime([_LOOP.*.newdate]))"。

我們先看一下"[_LOOP.*.title]",在NoahWeb中用"[]"來包住的內容都是一個變量內容,而變量內容又通過變量前綴關鍵詞來區分訪問不同種類的變量。我們在這用到的是_LOOP變量前綴關鍵詞。_LOOP從字意上就能理解它指的就是指產生當前這個循環的數據庫操作,_LOOP后面的"."是分割符號,'*'指是就是循環時所指示的行,最后的title就是指的數據庫字段"title"中的內容。發散思維想一想就可以知道,如果我要返回的不是數據庫中的title,而是newcontent,則就寫成"[_LOOP.*.newcontent]",如果是訪問author就寫成"[_LOOP.*.author]",如此照搬就行,其實很容易。

再來看另一段指令中的ValueName內容,我們一開始寫的時候是直接寫成"[_LOOP.*.newdate]"了,按我們剛才的學的就知道這是返回數據庫中的newdate這個字段。可是顯示出來的日期會顯示出"YYYY-MM-DD hh:mm:ss"這樣的格式,顯示的時候我只想要顯示出"YYYY-MM-DD"部分,所以使用了NoahWeb的兩個日期函數來返回該部分,NoahWeb的函數和PHP的很接近,使用過PHP的人不會對這樣的函數格式陌生。

上面是昨天遺留沒講的內容,下面接着講今天要講的內容。

我們現在已經做出新聞列表,剩下的工作就是點擊查看某條新聞以后能顯示出新聞的詳細內容。傳統的做法是另外建一個新的頁面,比如新建一個"content.aspx"這樣的頁面來做。可是我們今天可以用一下NoahWeb中很有意思的一個新東西“動作”來做。有關“動作”的理論內容比較長,在這我就不多說了。有興趣的同學可以上官方站點看看文檔,我們今天僅是講一下在表現層里怎么使用。

我們先把昨天的新聞列表的代碼繼續修改成一個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" -->">,內容的意思是鏈接打開的地址是default.aspx,並且傳遞一個名為action的變量等於view,action是NoahWeb中默認的動作變量名,這樣的話就會激發view的動作,連接的地址內容上還帶一個名為newsid的變量值。傳遞的是新聞表中的id字段內容,如下

存盤以后在瀏覽器里打開的就是

<tr>
<td><a href="default.aspx?action=view&newsid=1">有關MYSITE的開發消息</a>(2005-06-21)</td>
</tr><tr>
<td><a href="default.aspx?action=view&newsid=2">MYSITE所使用技術</a>(2005-06-21)</td>
</tr><tr>
<td><a href="default.aspx?action=view&newsid=3">開發周期安排</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日發薪水通告</a>(2005-06-21)</td>
</tr>

類似上面的代碼。

接下來我們為了讓同一個頁面又能顯示列表又能顯示指定ID的新聞我們在DW中繼續對default.aspx做改動。

新加一個HTML的表格在里面用來准備顯示新聞的內容。具體如下圖:

這樣在保存以后在瀏覽器中顯示的結果如下圖:

為了讓新聞顯示的部分只出現在執行動作view的時候,我們可以DW來幫助我們插入另一個指令"NoahWeb Objects"下的"NoahIfAction",具體方式如下:

然后在Action屬性里輸入"view",如下圖:

這樣就表示當執行動作view的時候才會顯示此部分內容,我們可以存盤以后在瀏覽器里刷新一下,看看輸出的樣子,如下:

顯示內容的表格在default.aspx默認打開的已經不顯示,只有當我們點中其中某條新聞鏈接后才會看到下面的內容,如圖:

我們如果把新聞列表的這個表格也用一個動作指令來划分的話,就可以讓執行view動作的時候不顯示出列表,操作方法如下:

這次插入后不用在Action的屬性里填寫任何內容,這樣也就表示在不執行任何動作的時才執行該部分代碼,存盤保存以后刷新瀏覽器就能看到下面的結果:

OK,現在就差一步了!把要選擇的新聞內容顯示在這個表格里,我們還是僅借助一下NoahLoop指令和NoahValue指令配合查詢集就能做到,為了此目的,我們還是再通過設計器建一個數據庫操作集出來,不知道大家是否還記得怎么建呢?我放幾張截圖吧,大家看看圖回憶一下,話就不多說了。

請看截圖:

第一步:建一個操作集

第二步:修改操作集的各種參數,被修改過的地方我用紅圈標記出來,注意一下,這次我加了一個局部變量的內容,並加了一個查詢的條件。

第三步:保存以后看到操作集中出現下面的內容。

上面的操作就相當於我們寫了一個"select * from mynews where id='[newsid]'"的數據庫查詢。

然后我們繼續在DW中對顯示新聞內容的表格插入NoahLoop指令,具體操作我們以前也做過,現在還是回憶一下,如下:

當執行完插入操作以后因為我們准備調用的mynews_S_newid是需要傳遞一個局部變量的,所以這次我們使用NoahWeb設計器自帶的輔助功能來獲得LoopStart的代碼,方式很簡單,就是在設計器中操作集"mynews_S_newid"上面用鼠標右鍵點出輔助功能,如下圖:

然后設計器就會為我們生成一段代碼放入計算機的剪貼板中。我們把他直接貼到DW中替換掉剛才新建的LoopStart指令,如下圖:

仔細看的話會發現,貼進去的代碼除了幫我們自動填寫了SQLLinkId成為"mynews_S_newid"外,還多了一個Value屬性,我們現在需要的就是填寫一下這個屬性。

那應該填寫什么內容呢?我們這樣做是為了顯示出新聞的內容,而這部分代碼又只有在執行view動作的時候才被執行,為了顯示新聞我們已經通過了鏈接傳遞了一個叫newsid的變量過來。現在我們就是需要填寫這個變量作為查詢的條件,具體寫法如下:

我們剛才已經講過"[]"在NoahWeb表示的都是變量,而現在的_root又是一個變量前綴關鍵詞,表示的是訪問全局變量內容或是客戶端用GET和POST方式提交上來的變量值。這樣我們就可以在這獲得從地址上面傳遞進來的newsid的值內容。並傳遞給數據庫操作集去進行查詢。

接下來把表格內的文字

"標題部分"用之前學過的方式替換成<!-- NoahValue ValueName="[_LOOP.*.title]" MaxChar="" DChar="" Safety="False" -->

"新聞內容部分"也替換成<!-- NoahValue ValueName="[_LOOP.*.newcontent]" MaxChar="" DChar="" Safety="False" -->

OK,大功告成!

保存以后在瀏覽器里刷新一下

怎么樣可以看到內容了吧!這樣就完成了。我們可以重新進入一下,看一下默認進來的時候是如下的:

然后這次我點一下"MYSITE所使用的技術",看到內容就是

這個是動態頁面的做法,小弟近期使用下來對NoahWeb表現層的感覺是熟悉DW的人可以非常快的通過DW開發出動態站點,靈活使用設計器配合DW開發起來更加容易。表現層里面還有大半指令沒有提到大家有興趣可以自己學一下,每個都非常有用,而且編寫時也類似這樣的方式,最近小弟還在學習NoahWeb邏輯層的東西,過段時間再寫教材給大家共享。謝謝各位同學的捧場!有不足的地方也請同學們多多包涵!

 如果需要了解更多NoahWeb的內容,請訪問其主站:http://www.noahweb.net


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: