V předchozím článku jsme si sestavili skript, který nám vygeneroval z databáze seznam odkazů, který jsme pomocí INLUDE vložili do stránky. Dnes si ukážeme, že si můžeme takto předgenerovat nejen HTML kód, ale i část ASP skriptu.
Vytvoříme skript, který nám vygeneruje formulářový prvek SELECT obsahující seznam kategorií. A protože tento SELECT může být součástí nejen formuláře použitého nejen k zadávání, ale i k editaci dat, budeme chtít, aby tento vygenerovaný SELECT uměl nastavit jako vybranou tu kategorii, jejíž kód je v zadané proměnné, takže námi vygenerovaný skript bude pro každý řádek OPTION obsahovat kousek ASP kódu, který porovná hodnotu VALUE s danou proměnnou a na odpovídajícím řádku přidá SELECTED.
Potřebné údaje opět přečteme na začátku skriptu z Requestu:
data = request(„data“) ‚relativní cesta a název databáze sql = request(„sql“) ‚SQL dotaz, který vrací dva sloupce, první je hodnota pro VALUE, druhý je zobrazený text file = request(„file“) ‚relativní cesta a název INCLUDE souboru name = request(„name“) ‚jméno formulářového prvku none = request(„none“) ‚text prvního řádku s VALUE=0 varname = request(„varname“) ‚proměnná, se kterou budeme porovnávat VALUE jednotlivých položek |
|
Anebo můžeme zadat hodnoty přímo:
data = „data/zbozi.mbd“ sql = „SELECT ‚kod, nazev FROM kategorie ORDER BY nazev“ file = „select.inc“ name = „kodkategorie“ none = „vyber kategorii“ varname = „vybrana“ |
|
SQL dotaz je tentokrát jednodušší, vrací kod a nazev z tabulky kategorie, seřazeno podle názvu.
Další dva kroky budou stejné jako v minulém případě. Otevření textového souboru, kam budeme zapisovat, otevření databáze a vytvoření RecordSetu.
Set fs = CreateObject(„Scripting.FileSystemObject“) Set soubor = fs.OpenTextFile(Server.MapPath(file), 2, true) set db = Server.CreateObject(„AdoDB.Connection“) db.Open „Driver={Microsoft Access Driver (*.mdb)}; DBQ=“ & Server.MapPath(data) & „;“ set rs = db.execute(sql) |
|
A nyní začneme sestavovat výsledný soubor. Na začátku bude definice prvku SELECT:
soubor.write „<select name=“““ & name & „““>“ & vbCrLf |
|
Pokud je zadán text pro nulovou položku, přidáme na začátek OPTION s VALUE=0 a zadaným textem:
if none<>““ then soubor.write “ <option value=““0″“>“ & none & „</option>“ & vbCrLf end if |
|
Pak budeme v cyklu while – loop procházet postupně celý RecordSet a zapisovat řádky s jednotlivými OPTION. Celé sestavení jednoho řádku si pro přehlednost rozdělíme na tři části:
- nejpve přijde OPTION a parametr VALUE s hodnotou z prvního sloupece recordsetu (rs(0)).
- pak přijde ASP skript, který bude porovnávat hodnotu ve VALUE s proměnnou, jejíž jméno je ve varname. Tato část zde však bude pouze tehdy, pokud je varname zadáno.
- a nakonec uzavřeme tag OPTION, vypíšeme druhý sloupec (rs(1)) coby vlastní text a ukončíme řádek.
Celé to tedy bude vypadat takto:
do while not rs.EOF soubor.write “ <option value=“““ & rs(0) & „“““ if varname<>““ then soubor.write „<% if “ & varname & „=“ & rs(0) & “ then response.write „“ selected““ “ & chr(37) & „>“ end if soubor.write „>“ & rs(text) & „</option>“ & vbCrLf rs.moveNext loop |
|
Zde bych se zastavil u dvou věcí: za if, před then a před selected musí být mezera (tedy if mezera uvozovka…); koncový tag skriptu musíte zadat jako chr(37) což je znak % a znak >, pokud napíšete %> bude to považováno za ukončení skriptu.
Na konec ještě přijde řádek ukončující SELECT:
soubor.write „</select>“ & vbCrLf |
|
A nakonec opět pozavírat Recordset, databázi i textový soubor a zrušit vytvořené objekty:
rs.close db.close set db = nothing soubor.close set fs = nothing |
|
Vygenerovaný soubor by měl vypadat nějak takhle:
<select name=“kodkategorie“> <option value=“0″> vyber kategorii</option> <option value=“1″ <% if vybrana=1 then response.write “ selected“ %>>Auto</option> <option value=“2″ <% if vybrana=2 then response.write “ selected“ %>>Moto</option> <option value=“3″ <% if vybrana=3 then response.write “ selected“ %>>Traktory</option> </select> |
|
A tento soubor nakonec vložíme do stránky pomocí INCLUDE:
<!–#INCLUDE file=“select.inc“–> |
|
Podobným způsobem si můžeme předgenerovat spoustu dalších částí stránek, které se mění moc málo na to, abychom je sestavovali při každém požadavku na stránku, ale na druhou stranu, příliš často na to, abychom si vystačili se statickou HTML stránkou.