Dreamweaver 和更高版本的用戶介面已經簡化。 因此,您在 Dreamweaver 和更高版本中可能會找不到本文所描述的一些選項。 如需詳細資訊,請參閱本文。
關於自訂伺服器行為
Dreamweaver 附帶一組內建伺服器行為,讓您能夠輕鬆為網站新增動態功能。您可以透過建立伺服器行為來滿足您的開發需求,或 從 Dreamweaver Exchange 網站取得伺服器行為,來擴充 Dreamweaver 功能。
在建立您自己的伺服器行為之前,您應該查看 Dreamweaver Exchange 網站,以了解是否有其他開發者已經 建立了伺服器行為,可提供您想要 新增到網站的功能。通常,第三方開發者已經 建立並測試了能夠滿足您需求的伺服器行為。
存取 Dreamweaver Exchange
選取「說明>Dreamweaver Exchange」。
選取「視窗」>「伺服器行為」,按一下 加號 (+) 按鈕,然後選取「取得更多伺服器行為」。
Dreamweaver Exchange 網頁會在您的瀏覽器中開啟。
在 Dreamweaver 中安裝伺服器行為或其他 擴充功能
如需詳細資訊,請參閱使用 Extension Manager。
自訂伺服器行為工作流程
如果您是精通 ColdFusion、JavaScript、VBScript 或 PHP 的網頁開發者,您可以撰寫自己的 伺服器行為。建立伺服器行為的步驟包括 以下任務:
撰寫一個或多個執行所需 動作的程式碼區塊。
指定程式碼區塊應在頁面的 HTML 程式碼中的 插入位置。
如果伺服器行為需要為參數指定 值,請建立一個對話框,提示套用該行為的網頁開發者 提供適當的值。
將伺服器行為供其他人使用之前先加以測試。
使用伺服器行為建立器
使用「伺服器行為產生器」新增 該行為插入到頁面中的程式碼區塊。
「伺服器行為建立者」對話方塊便會出現。
您輸入的名稱會出現在「伺服器行為產生器」中, 並在「程式碼區塊」方塊中顯示適當的指令碼標記。
在「程式碼區塊」方塊中輸入程式碼時,每個已命名的程式碼區塊只能 插入單一標記或程式碼區塊 (例如 myBehavior_block1、myBehavior_block2、myBehavior_blockn 等等)。如果您必須輸入多個標記或程式碼區塊,請為每個標記或程式碼區塊 建立個別的程式碼區塊。您也可以從其他頁面 複製並貼上程式碼。
參數會插入到程式碼區塊中您在定義參數之前置入插入點的位置。 如果您選取了字串,程式碼區塊中所選字串的每個執行個體都會以參數標記取代 (例如,@@Session@@)。
「伺服器行為」面板會列出伺服器行為。
進階選項
在您指定每個程式碼區塊的原始程式碼和插入位置之後,伺服器行為就完全定義好了。在大多數情況下,您不需要指定任何其他資訊。
如果您是進階使用者,可以設定下列任何選項:
識別符
指定程式碼區塊是否應視為 識別碼。
依預設值,每個程式碼區塊都是識別名稱。 如果 Dreamweaver 在文件任何地方找到識別碼程式碼區塊, 它會在「伺服器行為」面板中列出該行為。 使用「識別碼」選項來指定程式碼區塊是否應 視為識別碼。
伺服器行為的程式碼區塊中 至少有一個必須是識別碼。在下列情況下,程式碼區塊不應為 識別碼:相同的程式碼區塊由某些其他伺服器行為使用;或程式碼區塊 過於簡單,可能會自然地出現在頁面上。
伺服器行為標題
在「伺服器行為」面板中指定行為的標題。
當 頁面設計師按一下「伺服器行為」面板上的加號 (+) 按鈕時, 新伺服器行為的標題將出現在快顯 選單中。當設計師將伺服器行為的執行個體套用至 文件時,該行為會出現在「伺服器行為」面板的 已套用行為清單中。使用「伺服器行為標題」方塊 來指定加號 (+) 快顯選單和已套用 行為清單的內容。
方塊中的初始值是您 在「新增伺服器行為」對話框中提供的名稱。定義參數時, 名稱會自動更新,讓參數 出現在伺服器行為名稱後面的括弧內。
設定工作階段變數 (@@Name@@, @@Value@@)
如果 使用者接受預設值,括弧前的所有內容 會出現在加號 (+) 快顯選單中 (例如,設定工作階段變數)。 名稱加上參數將出現在已套用 行為的清單中,例如,設定工作階段變數 ("abcd", "5")。
選取程式碼區塊
指定當使用者在「伺服器行為」面板中選取 行為時,要選取哪個程式碼區塊。
當您套用 伺服器行為時,行為內的其中一個程式碼區塊會被指定為 「要選取的程式碼區塊」。如果您套用伺服器行為,然後 在「伺服器行為」面板中選取該行為,指定的 區塊會在「文件」視窗中被選取。根據預設,Dreamweaver 會選取第一個不在 html 標記上方的程式碼區塊。如果所有程式碼 區塊都在 html 標記上方,則會選取第一個。進階使用者可以指定哪個程式碼區塊為 選定的區塊。
建立程式碼區塊
您在「伺服器行為產生器」中建立的程式碼區塊 會封裝在出現於「伺服器 行為」面板的伺服器行為中。代碼可以是指定伺服器模型的任何有效執行階段代碼。例如,如果您為自訂伺服器行為選擇 ColdFusion 作為文件類型,您撰寫的代碼必須是在 ColdFusion 應用程式伺服器上執行的有效 ColdFusion 代碼。
您可以直接在「伺服器 行為產生器」中建立程式碼區塊,或從其他 來源複製並貼上程式碼。您在「伺服器行為產生器」中建立的每個程式碼區塊 都必須是單一標記或指令碼區塊。如果您必須插入多個 標記區塊,請將其分成個別的程式碼區塊。
程式碼區塊中的條件
Dreamweaver 讓您開發包含 條件式執行控制陳述式的程式碼區塊。 「伺服器行為產生器」使用 if、elseif 和 else 陳述式, 而且還可能包含伺服器行為參數。這讓您能夠 根據伺服器行為參數之間的 OR 關係值 插入替代文字區塊。
下列範例顯示 if、elseif 和 else 陳述式。 方括弧 ([ ]) 表示選擇性程式碼,星號 (*) 表示零個或多個執行個體。若要只在某個條件或多個條件 適用時執行程式碼區塊的一部分或整個程式碼區塊,請使用下列語法:
<@ if (expression1) @> conditional
text1[<@ elseif (expression2) @> conditional text2]*[<@ else @>
conditional text3]<@ endif @>
條件 運算式可以是任何可使用 JavaScript eval() 函數評估的 JavaScript 運算式,而且可能包含 以 @@ 標記的伺服器行為參數。(@@符號將 參數與 JavaScript 變數和關鍵字區別開來。)
有效率地使用條件運算式
在 insertText XML 標記內使用 if、else 和 elseif 指示詞時,參與者 文字會經過預先處理以解析 if 指示詞 並決定要在結果中包含哪些文字。if 和 elseif 指示詞 將運算式當作引數。條件運算式與 JavaScript 條件運算式相同,而且也可以 包含伺服器行為參數。這類指令可讓您根據伺服器行為參數的值或參數之間的關係,在替代代碼區塊間進行選擇。
例如,以下 JSP 程式碼來自使用條件程式碼區塊的 Dreamweaver 伺服器行為:
@@rsName@@.close();
<@ if (@@callableName@@ != '') @>
@@callableName@@.execute();
@@rsName@@ = @@callableName@@.getResultSet();<@ else @>
@@rsName@@ = Statement@@rsName@@.executeQuery();
<@ endif @>
@@rsName@@_hasData = @@rsName@@.next();
條件程式碼區塊以 <@ if (@@callableName@@ != '') @> 開始,以 <@ endif @> 結束。根據程式碼,如果使用者在伺服器行為的參數對話框中為 @@callableName@@ 參數輸入一個值,換句話說,如果 @@callableName@@ 參數值不是 null,或是 (@@callableName@@ != ''),那麼條件程式碼區塊會被下列陳述式取代:
@@callableName@@.execute();
@@rsName@@ = @@callableName@@.getResultSet();
否則, 程式碼區塊會替換為下列陳述式:
@@rsName@@ = Statement@@rsName@@.executeQuery();
定位程式碼區塊
當您使用 Server Behavior Builder 建立代碼區塊時,必須指定在該頁面的 HTML 代碼中插入這些區塊的位置。
例如,如果您在開頭 <html> 標記上方插入程式碼區塊,則必須指定程式碼區塊相對於頁面 HTML 程式碼該區段中其他標記、指令碼和伺服器行為的位置。典型範例包括將行為定位在 該頁面代碼中開頭 <html> 標記上方可能也存在的任何記錄集查詢之前或之後。
當您從「插入程式碼」彈出式 選單中選取定位選項時,「相對位置」彈出式選單中的可用選項 會變更以提供該頁面部分的相關選項。例如,如果您在「插入代碼」彈出式選單中選取「在 <html> 標記上方」,「相對位置」彈出式選單中可用的定位選項會反映該頁面部分的相關選擇。
下表顯示程式碼區塊插入選項,以及 每個選項可用的相對定位選項:
|
插入程式碼選項 |
相對位置選項 |
|
在 <html> 標籤上方 |
|
|
在 </html> 標籤之下 |
|
|
相對於一個特別的標籤 |
從「標記」彈出式選單中選取標記,然後從標記定位選項中選擇。 |
|
相對於選取內容 |
選取範圍前 選取範圍後 取代 選定範圍 圍繞選取範圍 |
若要指定自訂位置,您必須為程式碼區塊指派權重。當您需要以特定順序 插入多個程式碼區塊時,請使用「自訂位置」選項。例如,若要在開啟記錄集的程式碼區塊後插入三個有序的程式碼區塊,您需要為第一個區塊輸入權重 60,第二個輸入 65,第三個輸入 70。
根據預設,Dreamweaver 會為所有插入在 <html> 標記上方的記錄集開啟程式碼區塊指定權重 50。如果兩個或更多區塊的權重相符,Dreamweaver 會隨機設定這些區塊之間的順序。
定位程式碼區塊 (一般 指示)
伺服器行為會列在「伺服器行為」面板中 (「視窗」>「伺服器行為」);按一下加號 (+) 按鈕 即可檢視伺服器行為。
相對於頁面上的另一個標記 定位程式碼區塊
如果您輸入標籤,請不要包含角括號 (< >)。
相對於頁面設計師所選取的標記 定位程式碼區塊
您可以在選取範圍的正前方或正後方 插入程式碼區塊。 您也可以用程式碼區塊取代選取範圍,或者可以將程式碼區塊 包圍選取範圍。
若要 將程式碼區塊包圍選取範圍,選取範圍必須包含 開啟和關閉標記,且標記之間沒有任何內容,如下所示:
<CFIF Day="Monday"></CFIF>
將 程式碼區塊的開啟標記部分插入在選取範圍開啟 標記之前,將程式碼區塊的關閉標記部分插入在選取範圍的 關閉標記之後。
使用 loop 指示詞重複程式碼區塊
若要重複代碼區塊的一部分或整個代碼區塊若干次,請使用下列語法:
<@ loop (@@param1@@,@@param2@@) @> 代碼
區塊<@ endloop @>
在建立伺服器行為時,您可以使用迴圈建構 重複執行指定次數的程式碼區塊。<@ loop (@@param1@@,@@param2@@,@@param3@@,@@param_n@@) @> code block <@ endloop @>迴圈指示詞接受以逗號分隔的 參數陣列清單作為引數。在此情況下,參數陣列 引數允許使用者為單一參數提供多個值。 重複文字會重複 n 次,其中 n 是 參數陣列引數的長度。如果指定了多個參數 陣列引數,所有陣列都必須具有相同的長度。在迴圈的第 i 次評估中,參數陣列的第 i 個元素會取代代碼區塊中相關聯的參數執行個體。
當您為伺服器行為建立對話框時,您可以 在對話框中新增控制項,讓頁面設計師建立 參數陣列。Dreamweaver 包含一個 您可以用來建立對話框的簡單陣列控制項。此 控制項名為「文字欄位逗號分隔清單」,可透過 伺服器行為產生器取得。若要建立更複雜的使用者介面元素,請參閱 API 文件以建立包含建立陣列控制項的對話框(例如拼貼控制項)。
您可以在 條件指示詞中嵌套任何數量的條件或迴圈指示詞。例如,您可以指定如果 運算式為真時執行迴圈。
以下範例顯示如何使用這類重複的程式碼區塊來建立伺服器行為(此範例是用於存取預存程序的 ColdFusion 行為):
<@ loop (@@param1@@,@@param2@@,@@param3@@,@@param_n@@) @> code block
<@ endloop @>
<CFSTOREDPROC procedure="AddNewBook"
datasource=#MM_connection_DSN#
username=#MM_connection_USERNAME#
password=#MM_connection_PASSWORD#>
<CFPROCPARAM type="IN" dbvarname="@CategoryId" value="#Form.CategoryID#"
cfsqltype="CF_SQL_INTEGER">
<CFPROCPARAM type="IN" dbvarname="@ISBN" value="#Form.ISBN#"
cfsqltype="CF_SQL_VARCHAR">
</CFSTOREDPROC>
在此範例中,CFSTOREDPROC 標記可包含零個或多個 CFPROCPARAM 標記。不過,如果不支援迴圈指示,就無法在插入的 CFSTOREDPROC 標記中包含 CFPROCPARAM 標記。如果不使用迴圈指示而將其建立為伺服器行為,您必須將此範例分為兩個參與者:一個主要的 CFSTOREDPROC 標記,以及一個參與者類型為多重的 CFPROCPARAM 標記。
使用迴圈指示,您可以按照以下方式撰寫相同的程序:
<CFSTOREDPROC procedure="@@procedure@@"
datasource=#MM_@@conn@@_DSN#
username=#MM_@@conn@@_USERNAME#
password=#MM_@@conn@@_PASSWORD#>
<@ loop (@@paramName@@,@@value@@,@@type@@) @>
<CFPROCPARAM type="IN"
dbvarname="@@paramName@@"
value="@@value@@"
cfsqltype="@@type@@">
<@ endloop @>
</CFSTOREDPROC>
每個「@>」之後的新行都會忽略。
如果使用者在「伺服器行為產生器」對話框中輸入以下參數值:
procedure = "proc1"
conn = "connection1"
paramName = ["@CategoryId", "@Year", "@ISBN"]
value = ["#Form.CategoryId#", "#Form.Year#", "#Form.ISBN#"]
type = ["CF_SQL_INTEGER", "CF_SQL_INTEGER", "CF_SQL_VARCHAR"]
伺服器行為會在頁面中插入以下執行階段程式碼:
<CFSTOREDPROC procedure="proc1"
datasource=#MM_connection1_DSN#
username=#MM_connection1_USERNAME#
password=#MM_connection1_PASSWORD#>
<CFPROCPARAM type="IN" dbvarname="@CategoryId" value="#Form.CategoryId#"
cfsqltype="CF_SQL_INTEGER">
<CFPROCPARAM type="IN" dbvarname="@Year" value="#Form.Year#"
cfsqltype="CF_SQL_INTEGER">
<CFPROCPARAM type="IN" dbvarname="@ISBN" value="#Form.ISBN#"
cfsqltype="CF_SQL_VARCHAR">
</CFSTOREDPROC>
參數陣列不能在迴圈之外使用,除非作為條件指示詞運算式的一部分。
使用 loop 指示詞的 _length 和 _index 變數
這個 迴圈指示詞包含兩個內建變數,您可以將其用於 內嵌的 if 條件。變數為:_length 和 _index。 _length 變數用來取得迴圈指示詞所處理陣列的長度,而 _index 變數則代表迴圈指示詞的目前索引。為了確保 變數只會被認定為指示詞,而不是要 傳遞到迴圈中的實際參數,請勿將任一變數 放在 @@ 中。
使用內建變數 的範例是將它們套用到 頁面指示詞的 import 屬性。import 屬性需要以逗號 分隔套件。如果 loop 指示詞擴充 到整個 import 屬性周圍,您只會在 迴圈的第一次迭代中輸出屬性名稱 import=(包括結尾的雙引號 (")), 而不會在迴圈的最後一次迭代中輸出逗號。使用 內建變數,您可以表示如下:
<@loop (@@Import@@)@>
<@ if(_index == 0)@>import="
<@endif@>@@Import@@<@if (_index == _length-1)@>"<@else@>,
<@ endif @>
<@endloop@>
為伺服器 行為要求參數
伺服器行為通常 需要頁面設計師提供參數值。此值必須在伺服器行為的代碼插入頁面之前插入。
您可以透過在程式碼中定義設計師提供的 參數來建立對話框。然後您為伺服器 行為產生對話框,這會提示頁面設計師輸入參數值。
如果您指定程式碼應相對於頁面設計師選擇的特定標記插入(也就是說,您在「插入程式碼」彈出式選單中選擇了「相對於特定標記」),系統會在您不介入的情況下將參數新增至您的程式碼區塊。參數會將標記選單新增至行為的對話框,讓頁面設計師選取標記。
在伺服器行為程式碼中定義參數
@@parameterName@@
<% Session("lang_pref") = Request.Form("@@formParam@@"); %>
例如,如果伺服器行為包含下列程式碼區塊:
<% Session("lang_pref") = Request.Form("Form_Object_Name"); %>
若要要求頁面設計師提供 Form_Object_Name 的值,請將字串包圍在參數標記(@@)中:<% Session("lang_pref") = Request.Form("@@Form_Object_Name@@"); %>
<% Session("lang_pref") = Request.Form("@@Form_Object_Name@@"); %>
您也可以反白標示該字串,然後按一下「插入參數至程式碼區塊」按鈕。 輸入參數名稱,然後按一下「確定」。 Dreamweaver 會使用由參數標記所包含的指定參數名稱來取代反白標示字串的每個實體。
Dreamweaver 會使用您包含在參數標記內的字串,在它所產生的對話方塊中為控制項加上標籤 (請參閱下列程序)。 在上一個範例中,Dreamweaver 會建立具有下列標籤的對話方塊:
伺服器行為程式碼中的參數名稱不可以有任何空格。 因此,對話方塊標籤不能有任何空格。 如果您想要在標籤內包含空格,您可以編輯所產生的 HTML 檔。
為您的伺服器行為建立對話框,以要求參數值
Dreamweaver 會產生對話框,其中包含您所定義的每個設計師提供參數的標籤控制項。
檢視對話方塊
編輯您為伺服器行為建立的對話框
會出現對話框,列出您在代碼中定義的所有 Designer 提供的參數。
編輯和修改伺服器行為
您可以編輯任何使用「伺服器行為建立器」建立的伺服器行為,包括從 Dreamweaver Exchange 網站下載的伺服器行為以及其他協力廠商開發者的伺服器行為。
如果您將伺服器行為套用至頁面,然後在 Dreamweaver 中編輯行為,舊行為的執行個體將不再出現在「伺服器行為」面板中。「伺服器行為」面板會在頁面中搜尋與已知伺服器行為程式碼相符的程式碼。如果伺服器行為的程式碼發生變更,面板就無法識別該頁面上舊版本的行為。
在面板中保留舊版本和新版本的行為
編輯以「伺服器行為產生器」建立的伺服器行為程式碼
「編輯伺服器行為」對話框會顯示目前伺服器技術的所有行為。
Dreamweaver 會重新產生伺服器行為,而不顯示對話框。新的伺服器行為會出現在「伺服器行為」面板的加號 (+) 彈出式選單中。
Dreamweaver 會詢問您是否要建立新的對話框,並覆寫舊的對話框。進行變更後按一下「確定」。
Dreamweaver 會將所有變更儲存在伺服器行為的 EDML 檔案中。
程式碼撰寫方針
一般而言,您的伺服器行為代碼應該緊湊且強固。網站應用程式開發人員對新增至其頁面的程式碼非常敏感。遵循文件類型語言 (ColdFusion、JavaScript、VBScript 或 PHP) 的一般公認編碼作法。撰寫註解時,請考慮可能需要了解程式碼的不同技術客群,例如網頁和互動設計師,或其他網站應用程式開發人員。加入能準確說明程式碼用途的註解,以及將其納入頁面中的任何特殊指示。
建立伺服器行為時,請遵守以下編碼準則:
錯誤檢查
重要的需求。 伺服器行為的程式碼應該能妥善處理錯誤情況。試著預見每種可能的錯誤情況。 例如,如果參數請求失敗會如何?如果查詢沒有傳回任何記錄會如何?
唯一名稱
協助確保您的程式碼清楚可識別,並避免與現有程式碼的名稱發生衝突。例如,如果頁面包含名為 hideLayer() 的函式和名為 ERROR_STRING 的全域變數,而您的伺服器行為插入使用這些名稱的代碼,則伺服器行為可能會與現有代碼發生衝突。
程式碼前置詞
讓您識別頁面中自己的執行階段函式和全域變數。有一個慣例是使用您的姓名縮寫。 絕不使用 MM_ 前綴,因為它僅供 Dreamweaver 使用。Dreamweaver 會在所有函式和全域變數前面加上 MM_ 前綴,以防止它們與您撰寫的任何程式碼發生衝突。
var MM_ERROR_STRING = "...";
function MM_hideLayer() {
避免類似的程式碼區塊
這樣您撰寫的程式碼就不會與其他區塊中的程式碼太過相似。如果程式碼區塊與頁面上的另一個程式碼區塊太過相似,「伺服器行為」面板可能會錯誤地將第一個程式碼區塊識別為第二個程式碼區塊的執行個體 (或相反)。簡單的解決方案是在程式碼區塊中新增註解,使其更具唯一性。
測試伺服器行為
Dreamweaver Exchange 建議對您建立的每個伺服器行為執行以下測試:
從「伺服器行為」面板套用行為。 如果它有對話框,請在每個欄位中輸入有效資料,然後按一下「確定」。在套用行為時,請確定沒有發生錯誤。 確認伺服器行為的執行階段程式碼會出現在「程式碼檢視器」中。
重新套用伺服器行為,並在 對話框的每個欄位中輸入無效資料。嘗試將欄位留空、使用 過大或負數、使用無效字元 (例如 /、 ?、:、* 等等),以及在數值欄位中使用字母。您可以撰寫表單驗證程序來處理無效資料(驗證程序涉及手動撰寫程式碼,這超出了本書的範圍)。
成功 將伺服器行為套用到頁面後,請確認下列項目:
檢查「伺服器行為」面板,確認 伺服器行為的名稱出現在新增到 頁面的行為清單中。
如果適用,請確認頁面上會顯示 伺服器端指令碼圖示。一般伺服器端 Script 圖示是金黃色的外觀。 若要查看圖示,請啟用「隱藏元件」(檢視 > 視覺輔助 > 隱藏元件)。
在「程式碼」檢視 (檢視 > 程式碼) 中,確認沒有產生 無效程式碼。
此外,如果您的伺服器行為在 文件中插入程式碼來建立與資料庫的連線,請建立 測試資料庫來測試文件中插入的程式碼。透過定義產生不同資料集 以及不同大小資料集的查詢來確認 連線。
最後,將 頁面上傳到伺服器並在瀏覽器中開啟。檢視頁面的 HTML 原始程式碼,並確認伺服器端指令碼沒有產生 無效的 HTML。