Användargränssnittet i Dreamweaver och senare har förenklats. Det kan därför hända att du inte hittar vissa av alternativen i den här artikeln i Dreamweaver och senare. Mer information finns i den här artikeln.
Om anpassade serverfunktioner
Dreamweaver levereras med en uppsättning inbyggda serverbeteenden som gör att du enkelt kan lägga till dynamiska funktioner till en webbplats.Du kan utöka Dreamweaver-funktionen genom att skapa serverbeteenden som passar dina utvecklingsbehov, eller genom att skaffa serverbeteenden från webbsidan Dreamweaver Exchange.
Innan du skapar dina egna serverbeteenden bör du kontrollera webbsidan Dreamweaver Exchange för att se om någon annan redan har skapat ett serverbeteende som tillhandahåller den funktion du vill lägga till på din webbsida.Ofta har en utvecklare från tredje part skapat och testat ett serverbeteende som tillgodoser dina behov.
Besöka Dreamweaver Exchange
Välj Hjälp > Dreamweaver Exchange.
Välj Fönster > Serverbeteenden, klicka på plusknappen (+) och välj Hämta fler serverbeteenden.
Webbsidan Dreamweaver Exchange visas i webbläsaren.
Installera ett serverbeteende eller annat tillägg i Dreamweaver
Mer information finns i Använda tilläggshanteraren.
Arbetsflödet med anpassade serverfunktioner
Om du är en webbutvecklare som är skicklig inom ColdFusion, JavaScript, VBScript eller PHP kan du skriva dina egna serverbeteenden.Stegen för att skapa ett serverbeteende inkluderar följande uppgifter:
Skriv ett eller flera kodblock som utför den önskade åtgärden.
Ange var kodblocket ska infogas i sidans HTML-kod.
Om serverbeteendet kräver att ett värde anges för en parameter, skapa en dialogruta som uppmanar webbutvecklaren som tillämpar beteendet att ange ett lämpligt värde.
Testa serverfunktionen innan du gör det tillgängligt för andra.
Använda Serverfunktionsverktyget
Använd Server Behavior Builder för att lägga till kodblocket eller kodblockerna som beteendet infogar på en sida.
Dialogrutan Serverfunktionsverktyget visas.
Namnet du anger visas i Server Behavior Builder, med lämpliga Skript-taggar synliga i rutan Kodblock.
När du anger kod i rutan Kodblock kan du bara infoga en enda tagg eller ett kodblock för varje namngivet kodblock (till exempel myBehavior_block1, myBehavior_block2, myBehavior_blockn, osv.).Om du måste ange flera taggar eller kodblock, skapa ett individuellt kodblock för var och en.Du kan också kopiera och klistra in kod från andra sidor.
Parametern infogas i kodblocket på den plats där du placerade infogningspunkten innan du definierade parametern. Om du markerade en sträng ersätts varje instans av den markerade strängen i kodblocket med en parametermarkör (till exempel @@Session@@).
Funktionen visas i listan på panelen Serverfunktioner.
Avancerade alternativ
När du har angett källkoden och infogningsplatsen för varje kodblock är serverbeteendet fullständigt definierat.I de flesta fall behöver du inte ange någon ytterligare information.
Om du är en avancerad användare kan du ställa in något av följande alternativ:
Identifierare
Anger om kodblocket ska behandlas som en identifierare.
Varje kodblock är en identifierare om inget annat anges. Om Dreamweaver hittar ett identifierare-kodblock någonstans i ett dokument visas beteendet i panelen Server Behaviors. Använd alternativet Identifierare för att ange om kodblocket ska behandlas som en identifierare.
Minst ett av serverbeteendets kodblock måste vara en identifierare.Ett kodblock ska inte vara en identifierare om något av följande villkor gäller: samma kodblock används av något annat serverbeteende, eller kodblocket är så enkelt att det kan förekomma naturligt på sidan.
Serverfunktionsrubrik
Anger beteeendets rubrik på panelen Serverfunktioner.
När siddesignern klickar på Plus-knappen (+) i panelen Server Behaviors visas det nya server-beteendets titel i popup- menyn. När en designer tillämpar en instans av ett server-beteende på ett dokument visas beteendet i listan över tillämpade beteenden i panelen Server Behaviors. Använd rutan Server Behavior Title för att ange innehållet i Plus-popup-menyn (+) och listan över tillämpade beteenden.
Det ursprungliga värdet i rutan är det namn du angav i dialogrutan New Server Behavior. När parametrar definieras uppdateras namnet automatiskt så att parametrarna visas inom parentes efter serverbeteendets namn.
Set Session Variable (@@Name@@, @@Value@@)
Om användaren accepterar standardvärdet visas allt före parenteserna i Plus-popup-menyn (+) (till exempel Set Session Variable). Namnet plus parametrarna visas i listan över tillämpade beteenden—till exempel Set Session Variable ("abcd", "5").
Kodblock att välja
Anger vilket kodblock som väljs när användaren väljer beteendet i panelen Server Behaviors.
När du tillämpar ett server-beteende utses ett av kodblocken inom beteendet till "kodblock att välja". Om du tillämpar server-beteendet och sedan väljer beteendet i panelen Server Behaviors väljs det utsedda blocket i dokumentfönstret. Som standard väljer Dreamweaver det första kodblocket som inte ligger ovanför taggen html. Om alla kodblock ligger ovanför taggen html väljs det första. Avancerade användare kan ange vilket kodblock som är det valda.
Skapa kodblock
Kodblocken du skapar i Server Behavior Builder kapslas in i ett server-beteende som visas i panelen Server Behaviors. Koden kan vara vilken giltig körtidskod som helst för den angivna servermodellen. Om du till exempel väljer ColdFusion som dokumenttyp för ditt anpassade serverbeteende måste koden du skriver vara giltig ColdFusion-kod som körs på en ColdFusion-programserver.
Du kan skapa kodblocken antingen direkt i Server Behavior Builder eller kopiera och klistra in koden från andra källor. Varje kodblock du skapar i Server Behavior Builder måste vara en enskild tagg eller ett enskilt skriptblock.Om du måste infoga flera taggblock delar du upp dem i separata kodblock.
Villkor i kodblock
Dreamweaver låter dig utveckla kodblock som innehåller kontrollsatser som körs villkorligt. Server Behavior Builder använder satserna if, elseif och else och kan även innehålla serverbeteendeparametrar.Detta gör att du kan infoga alternativa textblock baserat på värdena för ELLER-relationer mellan server-beteendeparametrar.
Följande exempel visar satserna if, elseif och else. Hakparenteserna ([ ]) betecknar valfri kod och asterisken (*) betecknar noll eller fler instanser. För att köra en del av ett kodblock eller hela kodblocket endast om ett visst villkor eller vissa villkor gäller använder du följande syntax:
<@ if (expression1) @> villkorlig
text1[<@ elseif (expression2) @> villkorlig text2]*[<@ else @>
villkorlig text3]<@ endif @>
Villkorsuttryck kan vara vilket JavaScript-uttryck som helst som kan utvärderas med JavaScript-funktionen eval() och kan innehålla en serverbeteendeparameter markerad med @@'s.(@@'s skiljer parametern från JavaScript-variabler och nyckelord.)
Använda villkorsuttryck effektivt
När du använder if-, else- och elseif-direktiv inuti XML-taggen insertText förbearbetas deltagartexten för att lösa if-direktiven och för att avgöra vilken text som ska inkluderas i resultatet.if- och elseif-direktiven tar uttrycket som ett argument. Villkorsuttrycket är detsamma som för JavaScript-villkorsuttryck och kan även innehålla serverbeteendeparametrar.Direktiv som detta gör att du kan välja mellan alternativa kodblock baserat på värdena för, eller relationer mellan, server behavior-parametrar.
Till exempel kommer följande JSP-kod från en Dreamweaver server behavior som använder ett villkorligt kodblock:
@@rsName@@.close();
<@ if (@@callableName@@ != '') @>
@@callableName@@.execute();
@@rsName@@ = @@callableName@@.getResultSet();<@ else @>
@@rsName@@ = Statement@@rsName@@.executeQuery();
<@ endif @>
@@rsName@@_hasData = @@rsName@@.next();
Det villkorliga kodblocket börjar med <@ if (@@callableName@@ != '') @> och slutar med <@ endif @>. Enligt koden, om användaren matar in ett Värde för parametern @@callableName@@ i server behaviorns parameterdialog – med andra ord, om parametern @@callableName@@ inte är null, eller (@@callableName@@ != '') – då ersätts det villkorliga kodblocket med följande satser:
@@callableName@@.execute();
@@rsName@@ = @@callableName@@.getResultSet();
Annars ersätts kodblocket med följande sats:
@@rsName@@ = Statement@@rsName@@.executeQuery();
Placera ett kodblock
När du skapar kodblock med Server Behavior Builder måste du specificera var de ska infogas i sidans HTML-kod.
Till exempel, om du infogar ett kodblock ovanför den öppnande <html>-taggen, måste du sedan specificera kodblockets position i förhållande till andra taggar, skript och serverbeteenden i det avsnittet av sidans HTML-kod.Typiska exempel inkluderar att positionera en behavior antingen före eller efter eventuella recordset-frågor som också kan finnas i sidkoden ovanför den öppnande <html>-taggen.
När du väljer ett positionsalternativ från popup-menyn Infoga kod ändras alternativen som är tillgängliga i popup-menyn Relativ position för att tillhandahålla relevanta alternativ för den delen av sidan. Till exempel, om du väljer Ovanför <html>-taggen i popup-menyn Infoga kod, återspeglar positionsalternativen som är tillgängliga i popup-menyn Relativ position val som är relevanta för den delen av sidan.
Följande tabell visar alternativen för infogning av kodblock och de relativa positionsalternativen som är tillgängliga för vart och ett:
|
Alternativ för Infoga kod |
Alternativ för Relativ placering |
|
Ovanför <HTML>-koden |
|
|
Nedanför <HTML>-koden |
|
|
Relativt till en viss kod |
Välj en tagg från Tagg-popup-menyn och välj sedan bland taggpositionsalternativen. |
|
Relativt till markeringen |
Före markeringen Efter markeringen Ersätt valet Radbryt markeringen |
För att specificera en anpassad position måste du tilldela en vikt till kodblocket.Använd alternativet Anpassad position när du behöver infoga mer än ett kodblock i en viss ordning. Till exempel, för att infoga en ordnad serie med tre kodblock efter kodblocket som öppnar recordsets, skulle du ange en vikt på 60 för det första blocket, 65 för det andra och 70 för det tredje.
Som standard tilldelar Dreamweaver en vikt på 50 till alla kodblock som öppnar en postuppsättning och som infogas ovanför taggen <html>.Om vikten på två eller fler block matchar varandra, ställer Dreamweaver slumpmässigt in ordningen mellan blocken.
Placera ett kodblock (allmänna instruktioner)
Serverbeteendet listas i panelen Server Behaviors (Window > Server Behavior); klicka på plusknappen (+) för att visa serverbeteendet.
Placera ett kodblock i förhållande till en annan tagg på sidan
Om du anger en tagg, utelämnar du vinkelparenteserna (<>).
Placera ett kodblock i förhållande till en tagg som valts av siddesignern
Du kan infoga ditt kodblock precis före eller precis efter markeringen. Du kan också ersätta markeringen med ditt kodblock, eller så kan du omge markeringen med kodblocket.
För att omsluta kodblocket runt en markering måste markeringen bestå av en öppnande och stängande tagg utan något däremellan, enligt följande:
<CFIF Day="Monday"></CFIF>
Infoga den öppnande taggdelen av kodblocket före markeringens öppnande tagg och den stängande taggdelen av kodblocket efter markeringens stängande tagg.
Upprepa kodblock med direktivet loop
För att upprepa en del av ett kodblock eller hela kodblocket ett antal gånger, använd följande syntax:
<@ loop (@@param1@@,@@param2@@) @> kod
block<@ endloop @>
När du skapar serverbeteenden kan du använda loopningskonstruktioner för att upprepa ett kodblock ett angivet antal gånger. <@ loop (@@param1@@,@@param2@@,@@param3@@,@@param_n@@) @> kodblock <@ endloop @>Loop-direktivet accepterar en kommaseparerad lista med parameterarrayer som argument. I det här fallet tillåter parameterarrayargument en användare att ange flera värden för en enda parameter. Den upprepande texten dupliceras n gånger, där n är längden på parameterarrayargumenten. Om fler än ett parameterarrayargument specificeras måste alla arrayer ha samma längd. På den i:te utvärderingen av loopen ersätter de i:te elementen i parameterarrayerna de associerade parameterinstanserna i kodblocket.
När du skapar en dialogruta för serverbeteendet kan du lägga till en kontroll i dialogrutan som låter siddesignern skapa parameterarrayer. Dreamweaver inkluderar en enkel arraykontroll som du kan använda för att skapa dialogrutor. Denna kontroll, kallad Text Field Comma Separated List, är tillgänglig genom Server Behavior Builder. För att skapa användargränssnittselement av större komplexitet, se API-dokumentationen för att skapa en dialogruta med en kontroll för att skapa arrayer (en rutnätskontroll, till exempel).
Du kan bädda in valfritt antal villkor eller ett loop-direktiv inom ett villkorsdirektiv.Till exempel kan du specificera att om ett uttryck är sant ska en loop köras.
Följande exempel visar hur sådana upprepande kodblock kan användas för att skapa serverbeteenden (exemplet är ett ColdFusion-beteende som används för att komma åt en lagrad procedur):
<@ loop (@@param1@@,@@param2@@,@@param3@@,@@param_n@@) @> kodblock
<@ 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>
I det här exemplet kan CFSTOREDPROC-taggen innehålla noll eller fler CFPROCPARAM-taggar. Dock, utan stöd för loop-direktivet finns det inget sätt att inkludera CFPROCPARAM-taggarna inuti den infogade CFSTOREDPROC-taggen. Om detta skulle skapas som ett server-beteende utan användning av loop-direktivet, vore du tvungen att dela upp detta exempel i två deltagare: en huvud-CFSTOREDPROC-tagg, och en CFPROCPARAM-tagg vars deltagartyp är multipel.
Med loop-direktivet kan du skriva samma procedur på följande sätt:
<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>
Radmatningar efter ”@>” ignoreras.
Om användaren angav följande parametervärden i dialogrutan Server Behavior Builder:
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"]
Server-beteendet skulle infoga följande körtidskod i sidan:
<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>
Parametermatriser kan inte användas utanför en loop förutom som del av ett villkorligt direktivuttryck.
Använda slingdirektivets variabler _length och _index
Loop-direktivet innehåller två inbyggda variabler som du kan använda för inbäddade if-villkor. Variablerna är: _length och _index. Variabeln _length utvärderas till längden på matriserna som bearbetas av loop-direktivet, medan variabeln _index utvärderas till det aktuella indexet för loop-direktivet. För att säkerställa att variablerna endast känns igen som direktiv, och inte som faktiska parametrar som ska skickas till loopen, omslut inte någon av variablerna med @@.
Ett exempel på att använda inbyggda variabler är att tillämpa dem på import-attributet för siddirektivet.Attributet import kräver kommaseparation av paket. Om loop-direktivet sträcker sig runt hela import-attributet, skulle du bara ge ut attributnamnet import= på den första iterationen av loopen—detta inkluderar det avslutande dubbla citattecknet (")—och inte ge ut ett komma på den sista iterationen av loopen. Med den inbyggda variabeln kan du uttrycka detta enligt följande:
<@loop (@@Import@@)@>
<@ if(_index == 0)@>import="
<@endif@>@@Import@@<@if (_index == _length-1)@>"<@else@>,
<@ endif @>
<@endloop@>
Begär en parameter för server- beteendet
Serverbeteenden kräver ofta att siddesignern tillhandahåller ett parametervärde. Detta värde måste infogas innan serverbeteendets kod infogas på sidan.
Du skapar dialogrutan genom att definiera de Designer-tillhandahållna parametrarna i koden. Sedan genererar du en dialogruta för serverbeteendet, som uppmanar siddesignern att ange ett parametervärde.
En parameter läggs till i ditt kodblock utan din medverkan om du anger att din kod ska infogas i förhållande till en specifik tagg som valts av siddesignern (det vill säga du valde Relativ till en specifik tagg i popup-menyn Infoga kod).Parametern lägger till en taggmeny i beteendets dialogruta så att siddesignern kan välja en tagg.
Definiera parametern i serverbeteendekoden
@@parameterName@@
<% Session("lang_pref") = Request.Form("@@formParam@@"); %>
Om serverbeteendet till exempel innehåller följande kodblock:
<% Session("lang_pref") = Request.Form("Form_Object_Name"); %>
För att kräva att siddesignern anger värdet för Form_Object_Name, omslut strängen med parametermarkörer (@@):<% Session("lang_pref") = Request.Form("@@Form_Object_Name@@"); %>
<% Session("lang_pref") = Request.Form("@@Form_Object_Name@@"); %>
Du kan även markera strängen och klicka på knappen Infoga parameter i kodblock. Ange ett parameternamn och klicka på OK. Dreamweaver ersätter samtliga instanser av den markerade strängen med det angivna parameternamnet omslutet av parametermarkörer.
Dreamweaver utnyttjar strängarna som du omsluter med parametermarkörer för att etikettera kontrollerna i dialogrutan som genereras (se nästa procedur). I det föregående exemplet skapar Dreamweaver en dialogruta med följande etikett:
Parameternamn i serverfunktionskod får inte innehålla mellanslag. Därför går det inte att ha mellanslag i etiketterna i dialogrutan. Om du vill att etiketten ska innehålla mellanslag kan du redigera den genererade HTML-filen.
Skapa en dialogruta för ditt serverbeteende för att begära parametervärdet
Dreamweaver genererar en dialogruta med en märkt kontroll för varje designerlevererad parameter som du definierade.
Visa dialogrutan
Redigera dialogrutan du skapade för serverbeteendet
En dialogruta visas med alla designerangivna parametrar som du definierade i din kod.
Redigera och ändra serverfunktioner
Du kan redigera alla serverbeteenden som skapats med Server Behavior Builder, inklusive serverbeteenden du hämtar från Dreamweaver Exchange-webbplatsen och andra tredjepartsutvecklare.
Om du tillämpar ett serverbeteende på en sida och sedan redigerar beteendet i Dreamweaver, visas inte längre instanser av det gamla beteendet i panelen Serverbeteenden. Panelen Serverbeteenden söker igenom sidan efter kod som matchar koden för kända serverbeteenden. Om koden för ett serverbeteende ändras känner panelen inte igen tidigare versioner av beteendet på den sidan.
Behåll de gamla och nya versionerna av beteendet i panelen
Redigera koden för ett serverbeteende som skapats med Server Behavior Builder
Dialogrutan Redigera serverbeteenden visar alla beteenden för den aktuella servertekniken.
Dreamweaver återskapar serverbeteendet utan en dialogruta. Det nya serverbeteendet visas i Plus-menyn (+) i panelen Serverbeteenden.
Dreamweaver frågar dig om du vill skapa en ny dialogruta och skriva över den gamla. Gör dina ändringar och klicka på OK.
Dreamweaver sparar alla ändringar i serverbeteendets EDML-fil.
Riktlinjer för kod
Generellt bör koden för ditt serverbeteende vara kompakt och robust.Webbutvecklare är mycket känsliga för koden som läggs till på deras sidor. Följ allmänt accepterade kodningsmetoder för dokumenttypens språk (ColdFusion, JavaScript, VBScript eller PHP). När du skriver kommentarer bör du tänka på de olika tekniska målgrupperna som kan behöva förstå koden, såsom webb- och interaktionsdesigners eller andra webbutvecklare. Inkludera kommentarer som korrekt beskriver kodens syfte och eventuella särskilda instruktioner för att inkludera den på en sida.
Kom ihåg följande kodriktlinjer när du skapar serverbeteenden:
Felkontroll
Ett viktigt krav. Serverbeteendets kod bör hantera felfall på ett elegant sätt. Försök förutse alla möjligheter. Till exempel, vad händer om en parameterförfrågan misslyckas? Vad händer om inga poster returneras från en fråga?
Unika namn
Hjälper till att säkerställa att din kod är tydligt identifierbar och undviker namnkollisioner med befintlig kod. Om sidan till exempel innehåller en funktion som heter hideLayer() och en global variabel som heter ERROR_STRING, och ditt serverbeteende infogar kod som också använder dessa namn, kan serverbeteendet komma i konflikt med den befintliga koden.
Kodprefix
Gör att du kan identifiera dina egna körningsfunktioner och globala variabler i en sida. En konvention är att använda dina initialer. Använd aldrig prefixet MM_, eftersom det är reserverat endast för Dreamweaver. Dreamweaver föregår alla funktioner och globala variabler med prefixet MM_ för att förhindra att de kommer i konflikt med kod som du skriver.
var MM_ERROR_STRING = "...";
function MM_hideLayer() {
Undvik likartade kodblock
så att koden du skriver inte liknar alltför mycket koden i andra block. Om ett kodblock liknar ett annat kodblock på sidan alltför mycket, kan panelen Server Behaviors av misstag identifiera det första kodblocket som en instans av det andra kodblocket (eller tvärtom).En enkel lösning är att lägga till en kommentar till ett kodblock för att göra det mer unikt.
Testa serverfunktioner
Dreamweaver Exchange rekommenderar att du utför följande tester på varje serverbeteende du skapar:
Använd funktionen från panelen Serverfunktioner. Om det har en dialogruta, ange giltiga data i varje fält och klicka på OK. Kontrollera att inga fel inträffat då funktionen används. Kontrollera att körningskoden för serverbeteendet visas i Kodinspektören.
Tillämpa serverbeteendet igen och ange ogiltiga data i varje fält i dialogrutan. Försök lämna fältet tomt, använda stora eller negativa tal, använda ogiltiga tecken (som /, ?, :, *, och så vidare) och använda bokstäver i numeriska fält.Du kan skriva formulärvalideringsrutiner för att hantera ogiltiga data (valideringsrutiner innefattar handkodning, vilket ligger utanför denna boks omfattning).
När du har tillämpat ditt serverbeteende på sidan kontrollerar du följande:
Kontrollera panelen Serverbeteenden för att se till att namnet på serverbeteendet visas i listan över beteenden som lagts till på sidan.
Om det är tillämpligt, kontrollera att ikoner för skript på serversidan visas på sidan.De generiska serverskriptikonerna är guldbrickor. För att se ikonerna, aktivera Osynliga element (Visa > Visuella hjälpmedel > Osynliga element).
I Kodvyn (Visa > Kod), kontrollera att ingen ogiltig kod genereras.
Om ditt serverbeteende dessutom infogar kod i dokumentet som upprättar en anslutning till en databas, skapa en testdatabas för att testa koden som infogats i dokumentet. Kontrollera anslutningen genom att definiera frågor som producerar olika uppsättningar av data, och olika storlekar av datauppsättningar.
Ladda slutligen upp sidan till servern och öppna den i en webbläsare.Visa sidans HTML- källkod och kontrollera att ingen ogiltig HTML har genererats av skripten på serversidan.
Skapa snygga webbplatser i Dreamweaver
Designa, koda och hantera dynamiska webbplatser med ett kraftfullt allt-i-ett-verktyg.