Elektronický obchod v ASP – nákupní košík
Aby si vaši zákaznící mohli vybírat zboží a nakoupit ho ve větším množství, potřebují nákupní košík. nenechte si tedy ujít dnešní pokračování, neboť právě o něj doplníme vytvářený elektronický obchod.
Způsobů, jak lze nákupní košík vytvořit je několik. Lze využít například databázi, proměnné na úrovni Session nebo textové soubory. Náš nákupní košík bude využívat právě proměnné na úrovni Session, respektive dvoudimensionální pole a proměnnou, do které budeme ukládat počet položek.
Konstanty (includes/konstanty.asp)
Pro lepší práci s nákupním košíkem si vytvoříme několik konstant – konstanty, které budou určovat velikost pole (intMaxPocetPolozek a intVlastnosti) a konstanty, které budou sloužit k přístupu k jednotlivým „vlastnostem“. Konstanty budou uloženy do souboru konstanty.asp
.
<%
const cintVlastnosti = 5
‚počet vlastností – 1
const cintMaxPocetPolozek = 99
‚maximální počet položek v košíku – 1
const cintID = 0
const cintVyrobce = 1
const cintNazev = 2
const cintMnozstvi = 3
const cintCena = 4
const cintZobrazit = 5
‚konstanty pro přístup k vlastnostem
%>
Konstanty velikosti pole se musí zadat, protože pole musí být před svým definováním přesně ohraničené, a to kvůli vyhrazení místa v paměti počítače. (Určitými funkcemi VBScritpu lze dosáhnout i „dynamického“ zvětšování nebo zmenšování pole.)
Global.asa
Tento soubor slouží mimo jiné k provedení určitých činností při spuštění aplikace nebo při vytvoření objektu Session a také k provedení činností při ukončování platnosti objektu Session nebo ukončování aplikace. My budeme využívat pouze událost Session_OnStart, kde budeme inicializovat pole nákupního košíku a proměnnou intPocetPolozek. Soubor global.asa
bude vypadat takto:
<SCRIPT Language=“VBScript“ RUNAT=“SERVER“>
Sub Application_OnStart
End Sub
Sub Application_OnEnd
End Sub
Sub Session_OnStart
Dim arrKosik(), intPocetPolozek
‚deklarace proměnných
const cintVlastnosti = 5
const cintMaxPocetPolozek = 99
ReDim arrKosik(cintMaxPocetPolozek, cintVlastnosti)
‚vytváření pole nákupního košíku
intPocetPolozek = 0
‚nastavení počtu položek v košíku na 0
Session(„arrKosik“) = arrKosik
‚inicializovat proměnnou na úrovni objektu Session
Session(„intPocetPolozek“) = intPocetPolozek
‚ inicializovat proměnnou na úrovni objektu Session
End Sub
Sub Session_OnEnd
End Sub
</SCRIPT>
Kosik.asp
V souboru kosik.asp
bude poměrně rozsáhlý skript, který bude obsluhovat přidávání položek, odebírání položek, změnu množství, rušení objednávky a další. Na začátek souboru nejdříve vložíme soubor connect.asp
a poté ještě soubor konstanty.asp
.
<!– #include virtual=“includes/connect.asp“ –>
<!– #include virtual=“includes/konstanty.asp“ –>
Dále deklarujeme proměnné, které budeme v rámci skriptu využívat, vytvoříme nákupní košík (objekt Array) a načteme data do proměnných. Nakonec ještě podle proměnné strAkce rozdělíme úkoly.
Případ | Akce |
pridej | zavolá proceduru ProdejPolozku |
vymaz | zavolá proceduru ZrusPolozku -> Prepocitej |
prepocitej | zavolá proceduru NactiHodnoty -> Prepocitej |
katalog | uloží proměnné, přesměruje stránku na katalog.asp |
objednat | uloží proměnné, přesměruje stránku na objednat.asp |
zrusit | vymaže obsah košíku, nastaví intPocetPolozek na 0, přesměruje na stránku katalog.asp |
Poté následuje uložení proměnných a zobrazení obsahu košíku:
<%
Dim intID, strAkce, arrKosik, intPocetPolozek, intI, intJ, intMnoztvi, intCelkem
‚deklarace proměnných
ReDim arrKosik(cintMaxPocetPolozek, cintVlastnosti)
‚vytvoření košíku na úrovni stránky (skriptu)
intID = Request.QueryString(„produkt“)
‚načtení čísla produktu, o který se bude jednat (akce přidávání a odebírání, jinak 0)
strAkce = Request(„akce“)
‚ zjištění, jaká akce se má provést
arrKosik = Session(„arrKosik“)
‚naplnění košíku na úrovni skriptu daty z košíku na úrovni Session
intPocetPolozek = Session(„intPocetPolozek“)
‚načtení počtu položek z proměnné na úrovni Session
select case LCase(strAkce)
‚výbět akce
case „pridej“
If not intID = „“ Then
PridejPolozku(intID)
End If
case „přidej“
If not intID = „“ Then
PridejPolozku(intID)
End If
case „vymaz“
If not intID = „“ Then
ZrusPolozku(intID)
End If
case „vymaž“
If not intID = „“ Then
ZrusPolozku(intID)
End If
case „prepocitej“
NactiHodnoty
case „přepočítat“
NactiHodnoty
case „katalog“
Session(„arrKosik“) = arrKosik
Session(„intPocetPolozek“) = intPocetPolozek
‚ulož hodnoty proměnných
Response.Redirect(„katalog.asp“)
‚přesměruj do katalogu
case „objednat“
Session(„arrKosik“) = arrKosik
Session(„intPocetPolozek“) = intPocetPolozek
‚ulož hodnoty proměnných
Response.Redirect(„objednat.asp“)
‚přesměruj na objednávkový list
case „zrusit“
For intI = 0 To UBound(arrKosik, 1)
For intJ = 0 To UBound(arrKosik, 2)
arrKosik(intI, intJ) = „“
Next
Next
‚vymaž obsah košíku
intPocetPolozek = 0
‚vynuluj počet položek
Session(„arrKosik“) = arrKosik
Session(„intPocetPolozek“) = intPocetPolozek
‚ulož hodnoty proměnných
Response.Redirect(„katalog.asp“)
‚přesměruj do katalogu
case „zrušit“
For intI = 0 To UBound(arrKosik, 1)
For intJ = 0 To UBound(arrKosik, 2)
arrKosik(intI, intJ) = „“
Next
Next
‚vymaž obsah košíku
intPocetPolozek = 0
‚vynuluj počet položek
Session(„arrKosik“) = arrKosik
Session(„intPocetPolozek“) = intPocetPolozek
‚ulož hodnoty proměnných
Response.Redirect(„katalog.asp“)
‚přesměruj do katalogu
end select
Session(„arrKosik“) = arrKosik
Session(„intPocetPolozek“) = intPocetPolozek
‚ulož hodnoty proměnných
%>
Dalším krokem je vytvoření čtyř funkcí (procedur) pro manipulaci s daty v košíku: PridejPolozku, ZrusPolozku, Prepocitej, NactiHodnoty.
Procedura PridejPolozku
Funkce, nebo lépe řečeno procedura, PridejPolozku bude přebírat jako parametr ID produktu. Prvním úkolem procedury bude ověřit, zda již není produkt se stejným číslem produktu v košíku. V případě, že produkt v košíku obsažen je, bude pouze k počtu kusů připočtena 1 (aby nebyl přidáván dvakrát).
<%
Sub PridejPolozku(intID)
Dim boolVKosiku, intI, objData, intIndex
‚deklarace promenných
For intI = 0 To intPocetPolozek – 1
‚vyhledávání položky se stejným ID v košíku
If arrKosik(intI, cintID) = intID and arrKosik(intI, cintZobrazit) = true Then
‚když se ID shodují
boolVKosiku = true
‚položka v košíku je
arrKosik(intI, cintMnozstvi) = arrKosik(intI, cintMnozstvi) + 1
‚přičti k množství 1
Exit For
‚dál už není nutné hledat
Else
‚jinak
boolVKosiku = false
‚položka v košíku není
End If
Next
If not boolVKosiku Then
‚když položka není v košíku
pripojDatabazi
‚připoj databázi (musí být vložen soubor connect.inc)
Set objData = objDatabaze.Execute(„SELECT vyrobce, nazev, cena, dph, sleva FROM produkty WHERE id=“ & intID)
‚vyhledej data v databázi
If not objData.EOF Then
‚pokud existují nějaká data
intPocetPolozek = intPocetPolozek + 1
‚zvětši počet položek
intIndex = intPocetPolozek – 1
‚nastav index pole (pole jsou číslována od 0 => je nutné odečíst 1 od počtu položek)
arrKosik(intIndex, cintID) = intID
arrKosik(intIndex, cintVyrobce) = objData(„Vyrobce“)
arrKosik(intIndex, cintNazev) = objData(„Nazev“)
arrKosik(intIndex, cintMnozstvi) = 1
arrKosik(intIndex, cintCena) = Round(objData(„Cena“) * ((objData(„DPH“) + 100) / 100) * (1 – (objData(„Sleva“) / 100)), 1)
arrKosik(intIndex, cintZobrazit) = true
‚zapiš hodnoty do košíku
End If
objData.Close
Set objData = nothing
‚zavři objekt data
odpojDatabazi
‚odpoj databázi
End If
End Sub
%>
Procedura ZrusPolozku
Procedura ZrusPolozku má jako vstupní parametr ID výrobku obsazeného v košíku. Nejdříve procedura vyhledá v košíku položku se stejným ID, po nalezení položky změní vlastnost Množství na „0“ a vlastnost Zobrazit na „false“. Nakonec zavolá funkci Prepocitej.
<%
Sub ZrusPolozku(intID)
Dim intI
‚deklarace proměnných
For intI = 0 To intPocetPolozek – 1
‚vyhledej v košíku položku se stejným ID
If arrKosik(intI, cintID) = intID Then
arrKosik(intI, cintMnozstvi) = 0
arrKosik(intI, cintZobrazit) = false
‚nastav hodnotu Mnozstvi na 0 a Zobrazit na false.
Exit For
‚dál není potřeba hledat
End If
Next
Prepocitej
‚přepočítej obsah nákupního košíku
End Sub
%>
Procedura NactiHodnoty
Procedura NactiHodnoty slouží k načítání údajů o množství jednotlivých produktů v nákupním košíku z formuláře. Nejdříve ověří, jestli byl formulář odeslán, poté načte jednotlivé hodnoty polí pocetn (kde n je pořadové číslo položky).
<%
Sub NactiHodnoty
Dim intI, intMnozstvi
If not Request.Form(„formular_odeslan“) = „“ Then
For intI = 0 To intPocetPolozek – 1
intMnozstvi = Request.Form(„pocet“ & intI)
‚pro každou položku získej hodnotu
If IsNumeric(intMnozstvi) Then
arrKosik(intI, cintMnozstvi) = CInt(intMnozstvi)
Else
arrKosik(intI, cintMnozstvi) = 1
End If
‚zkonvertuj na číslo
If arrKosik(intI, cintMnozstvi) = 0 Then
arrKosik(intI, cintZobrazit) = false
End If
‚je-li hodnota 0, vymaž položku
Next
End If
Prepocitej
‚přepočítej obsah nákupního košíku
End Sub
%>
Procedura Prepocitej
Procedura Prepocitej vyhledá v nákupním košíku položky, které mají nastavenu vlastnost Zobrazit na „false“. Když narazí na takovou položku, vymaže data z nákupního košíku a položku za ní přesune na její místo.
<%
Sub Prepocitej
Dim intI, intX, intY
‚deklarace proměnných
For intI = 0 To intPocetPolozek – 1
‚pro každou položku košíku
If arrKosik(intI, cintZobrazit) = false Then
‚když má být položka vymazána (má nastavenu vlastnost Zobrazit na false)
For intY = 0 To UBound(arrKosik, 2)
‚vymaž všechny vlastnosti položky
arrKosik(intI, intY) = „“
Next
intX = intI
Do While not intX = UBound(arrKosik, 1)
For intY = 0 To UBound(arrKosik, 2)
arrKosik(intX, intY) = arrKosik(intX + 1, intY)
arrKosik(intX + 1, intY) = „“
Next
intX = intX + 1
Loop
‚posuň všechny položky o „jedno místo nahoru“
intPocetPolozek = intPocetPolozek – 1
‚sniž počet položek v košíku
End If
Next
End Sub
%>
Zobrazení obsahu nákupního košíku
Obsah nákupního košíku bude vypsán do tabulky. K ovládání funkcí nákupního košíku slouží formulářová tlačítka a textová pole určená pro zadávání počtu kusů.
<form action=“kosik.asp?“ method=“POST“>
<input type=“hidden“ name=“formular_odeslan“ value=“ano“>
<table width=“75%“ align=“center“ border=“1″>
<tr>
<td width=“20″><b>X</b></td>
<td><b>Název (Výrobce)</b></td>
<td width=“80″><b>Cena za kus</b></td>
<td width=“80″><b>Množství</b></td>
<td width=“100″><b>Cena za položku</b></td>
</tr>
<%
intCelkem = 0
If intPocetPolozek > 0 Then
For intI = 0 To intPocetPolozek – 1
If arrKosik(intI, cintZobrazit) = true Then
‚pro každou položku, je-li viditelná
Response.Write(„<tr>“)
Response.Write(„<td><a href=kosik.asp?akce=vymaz&produkt=“ & arrKosik(intI, cintID) &“>X</a></td>“)
Response.Write(„<td>“ & arrKosik(intI, cintNazev) & “ (“ & arrKosik(intI, cintVyrobce) & „)</td>“)
Response.Write(„<td>“ & arrKosik(intI, cintCena) & “ Kč / kus</td>“)
Response.Write(„<td><input type=text name=pocet“ & intI & “ value=“ & arrKosik(intI, cintMnozstvi) & “ ></td>“)
Response.Write(„<td><b>“ & (arrKosik(intI, cintCena) * arrKosik(intI, cintMnozstvi)) & “ Kč</b></td>“)
Response.Write(„</tr>“)
‚zapiš řádek nákupního košíku
intCelkem = intCelkem + (arrKosik(intI, cintCena) * arrKosik(intI, cintMnozstvi))
‚připočítej k celkové sumě cenu položky
End If
Next
Response.Write(„<tr>“)
Response.Write(„<td colspan=4>Počet položek:</td>“)
Response.Write(„<td>“ & intPocetPolozek & „</td>“)
Response.Write(„</tr>“)
‚vypiš počet položek
Response.Write(„<tr>“)
Response.Write(„<td colspan=4>Celková cena včetně DPH a slev:</td>“)
Response.Write(„<td><b>“ & intCelkem & “ Kč</b></td>“)
Response.Write(„</tr>“)
‚vypiš celkovou cenu
End If
Response.Write(„<tr>“)
Response.Write(„<td colspan=5 align=center>“)
If not cintMaxPocetPolozek = intPocetPolozek Then
Response.Write(„<input type=submit name=akce value=Katalog> „)
End If
If intPocetPolozek > 0 Then
Response.Write(„<input type=submit name=akce value=Přepočítat> „)
Response.Write(„<input type=submit name=akce value=Zrušit> „)
Response.Write(„<input type=submit name=akce value=Objednat>“)
End If
Response.Write(„</tr>“)
‚zapiš ovládací tlačítka
%>
</table>
</form>
Nakonec si můžete stáhnout zdrojové kódy a ukázku hotového košíku. Příště už budeme pomocí našeho elektronického obchodu objednávat.
Starší komentáře ke článku
Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.
Mohlo by vás také zajímat
-
Globální výpadek IT systémů: Může za to jediná aktualizace
19. července 2024 -
Aktualizujete svoji .NET webovou aplikaci? Může se hodit app_offline.htm
10. července 2024 -
10 nejpopulárnějších programovacích jazyků a jejich využití
9. listopadu 2023
Nejnovější
-
Jak rozšířit úložiště Macu za pětinovou cenu?
16. prosince 2024 -
Nové trendy v doménách pro osobní projekty – DIY, LIVING a LIFESTYLE
9. prosince 2024 -
Jak chránit webové stránky před Web/AI Scrapingem
27. listopadu 2024 -
Jaký monitor je nejlepší k novému Macu Mini?
25. listopadu 2024