Masterpage look-a-like i ASP

8. marts 2008

Selvom ASP efterhånden er ved langsomt at dø hen til fordel for .NET sidder mange stadig og udvikler eller vedligeholder i ASP - det er der for så vidt intet i vejen med, men mange glemmer stadig bare enten at gøre opdateringer let ved at dele siden op i mindre genbrugelig stykker eller overser de mere bløde ting som fx dynamisk title, hvilket søgemaskiner er glade for og også må kunne kategoriseres som brugervenligt.

Genbrugeligheden løses normalt ved Server.Execute, hvor man fx styrer hele siden ud fra en default.asp med querystrings, eller includes, hvor det mest normale er at inkludere fx top, bund og navigation - og det er der for så vidt selvfølgelig intet i vejen med, men de sidste småting kommer i de fleste tilfælde til at mangle ved sådan en løsning. Så hvorfor nøjes når man kan få mere :)

En måde at løse dette på indebærer stadig includes, men det på en måde, der kan give meget mere frie hænder, primært i form af dynamik i retning af styring af title, meta og inkludering af javascripts; Vi laver simpelthen to funktioner vi kan kalde og som indeholder alt det genbrugelige samt kan modtage parametre til at styre dynamikken - en slags skabelon for hele vores side som man måske også kender det fra fx Frontpage eller MasterPages i ASP.NET.

Først opretter vi lige en meget simpel skabelon - layout.asp

<%
Sub startPage(title,keywords,description,js)
 
'Hvis ingen titel er sendt med sætter vi en standard titel
 
If title = "" Then
   
title = "standard title"
 
End If
 
'Hvis ingen keywords er sendt med sætter vi et par standard keywords
 
If keywords = "" Then
   
keywords = "standard keywords"
 
End If
 
'Hvis ingen description er sendt med sætter vi en beskrivelse
 
If description = "" Then
   
description = "standard description"
 
End If
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<
html xmlns="http://www.w3.org/1999/xhtml">
<
head>
 
<title><%=title%></title>
 
<meta name="keywords" content="<%=keywords%>" />
 
<meta name="description" content="<%=description%>" />
 
<link rel="stylesheet" href="stylesheet.css" type="text/css" />
 
<%=js%>
</head>
<
body>

<
div class="content">
<%
End Sub

Sub
endPage()
%>
</div>

</
body>
</
html>
<%
End Sub
%>

Mit layout er, som de fleste nok kan gennemskue, ret simpelt da jeg kun har én div - men ellers ville jeg lægge alt design inde i disse to funktioner, dvs top, bund, navigering osv. Det vigtige her er, at den div/td, der vil komme til at indeholde det egentlige indhold starter i den første funktion, startPage, og slutter i den sidste funktion, endPage.

De skarpe kan nok også se, at min første funktion tager imod parametrene title, keywords, description samt js og disse variabler bliver altså brugt til netop disse 4 ting.

Slutteligt skal vi have implementeret vores skabelon på vores sider - default.asp

<!--#include file="layout.asp" -->
<%
Call startPage("Sidens titel","masterpage, lookalike, cool","Cool eksempel på en MasterPage look-a-like til ASP.","<script type=""text/javascript"" src=""javascript.js""></script>")
%>

Sidens indhold

<%
Call endPage()
%>

Alt vi skal gøre så snart vores skabelon er oprettet er at inkludere den på vores sider og lige før samt lige efter vores egentlig indhold på siden kalder vi de to funktioner fra vores layout.asp.

Hver side kan nu få unik title og meta og vi kan overføre javascripts til at blive placeret korrekt, altså i headeren. Udvidder vi funktionaliteten kan vi fx også komme til at overføre onload parametre til body eller variabler, der bestemmer om elementer i vores skabelon skal vises eller ej.

Jeg håber mit eksempel er til at gennemskue og at det kan bringe nytte rundt omkring - jeg har i hvert fald sparet masser af tid og bragt en masse både dynamik og genbrugelighed ind i løsninger ved at benytte denne metode fremfor de mere gængse, der ikke kan give mig de helt samme resultater.

ASP , ,

Tilføj kommentar


(Viser dit Gravatar icon)

  Country flag

biuquote
  • Kommentar
  • Eksempel
Loading