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:

  1. nejpve přijde OPTION a parametr VALUE s hodnotou z prvního sloupece recordsetu (rs(0)).
  2. 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.
  3. 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.

Žádný příspěvek v diskuzi

Odpovědět