Elektronický katalog slouží návštěvníkovi k lepší orientaci mezi nabízenými produkty. U každého produktu by měl být uveden název, popis produktu, cena a DPH. Náš elektronický katalog bude obsahovat seznam produktů a jejich cen (ceník) a seznam produktů členěných podle kategorií i s jeho detailem (katalogový list).

Seznam kategorií (includes/kategorie.asp)

Produkty uložené v databázi je třeba nějakým způsobem členit do jednotlivých kategorií. Informace o těchto kategoriích jsou uloženy v databázi, v tabulce Kategorie, kterou jsme vytvořili v minulém díle. Jak ale získat tyto informace z databáze? Vytvoříme si soubor kategorie.asp, který bude obsahovat tři funkce: ZobrazKategorie, ZobrazPozici, ZobrazPopis. Soubor budeme vkládat do stránek katalogu vždy nahoru a v místě, kde budeme volat jednu z těchto funkcí, se objeví požadovaný řetězec, popřípadě menu. Před vložením tohoto souboru ještě musíme vložit soubor pro připojení k databázi – connect.asp.

Každá z uvedených funkcí přebírá pouze jeden argument: intKategorie, neboli číslo kategorie, které se akce týká. Celý obsah souboru musí být uzavřen do značek ASP skriptů: <% obsah_souboru %> Funkce ZobrazKategorii nejdříve získá z databáze název aktuální kategorie a výsledek zapíše do proměnné strMenu. V případě, že je číslo kategorie 0 (0 znamená nejvyšší kategorie), zapíše jako název kategorie Katalog:

  Sub ZobrazKategorie(intKategorie)
    Dim objData, strMenu
    ‚deklarace proměnných
    If intKategorie > 0 Then
    ‚když je kategorie větší než 0
      Set objData = objDatabaze.Execute(„SELECT Nazev, Nadrazena FROM Kategorie WHERE ID = “ & intKategorie)
      ‚připoj se do databáze a z tabulky Kategorie vyber pole Název a Nadřazená
      strMenu = „<b>“ & objData(„Nazev“) & „</b>“
      ‚zapiš do proměnné strMenu název kategorie
      objData.Close
      set objData = nothing
      ‚zavři objekt se záznamy
    Else
    ‚jinak
      intKategorie = 0
      ‚nastaví hodnotu proměnné na 0
      strMenu = „<b>Katalog</b>“
      ‚zapiš do proměnné strMenu Katalog
    End If

Dále pak funkce vyhledá v databázi všechny podkategorie a zapíše je do proměnné strMenu. Nakonec vloží obsah proměnné strMenu do stránky:

    Set objData = objDatabaze.Execute(„SELECT Nazev, ID FROM Kategorie WHERE Nadrazena=“ & intKategorie)
    ‚vyber z tabulky Kategorie všechny podkategorie
    strMenu = strMenu & „<ul>“
    do while not objData.EOF
    ‚pro každý nalezený záznam …
      strMenu = strMenu & „<li><a href=““katalog.asp?kategorie=“ & objData(„ID“) & „““>“ & objData(„Nazev“) & „</a><br /></li>“
      ‚zapiš do proměnné název kategorie a ID – QueryString kategorie (viz níže)
      objData.MoveNext
      ‚posuň se o záznam dál
    loop
    strMenu = strMenu & „</ul>“
    objData.Close
    set objData = nothing
    ‚zavři objekt se záznamy
    Response.Write(strMenu)
    ‚vypiš menu na obrazovku
  End Sub

Druhá funkce – ZobrazPopis, zobrazí na místě volání popis aktuální kategorie:

  Sub ZobrazPopis(intKategorie)
    Dim objData
    ‚deklarace proměnných
    If intKategorie > 0 Then
    ‚je kategorie větší než 0
      Set objData = objDatabaze.Execute(„SELECT Popis FROM Kategorie WHERE ID=“ & intKategorie)
      ‚vyhledej záznam v databázi
      Response.Write(objData(„Popis“))
      ‚vypiš Popis kategorie
      objData.Close
      set objData = nothing
      ‚zavři objekt se záznamy
    End If
  End Sub

Poslední funkcí v souboru kategorie.asp bude ZobrazPozici. Tato funkce zobrazí cestu od nejvyšší kategorie až k té aktuální:

  Sub ZobrazPozici(intKategorie)
    Dim I, objData, strPozice
    ‚deklarace proměnných
    i = intKategorie
    strPozice = „“
    ‚inicializace proměnných
    do while not i = 0
    ‚dokud není nadřazená kategorie 0 (= Katalog)…
      Set objData = objDatabaze.Execute(„SELECT Nazev, Nadrazena FROM Kategorie WHERE ID=“ & i)
      ‚najdi nadřazenou kategorie
      strPozice = “ >> <a href=““katalog.asp?kategorie=“ & i & „““>“ & objData(„Nazev“) & „</a>“ & strPozice
      ‚zapiš název kategorie a odkaz
      i = objData(„Nadrazena“)
      ‚změň hodnotu i na cislo nadrazene kategorie
      objData.Close
      set objData = nothing
      ‚zavři objekt se záznamy
    loop
    ‚pokračuj dalším záznamem
    strPozice = „<a href=““katalog.asp““>Katalog</a>“ & strPozice
    ‚doplň nejvyšší kategorii – Katalog
    Response.Write(strPozice)
    ‚vypiš pozici
  End Sub

Seznam produktů (katalog.asp)

Funkce uložené v souboru kategorie.asp budeme využívat hlavně v souboru katalog.asp. Tato stránka bude obsahovat seznam produktů v dané kategorii řazený podle výrobců.

Na začátek souboru musíme přidat příkazy pro vložení souboru connect.asp a také kategorie.asp:

<!– #include file=“includes/connect.asp“ –>
<!– #include file=“includes/kategorie.asp“ –>

Dále musíme získat proměnou kategorie v kolekci QueryString, pomocí níž si mezi stránkami předáváme informaci o kategorii, kterou chceme otevřít. Následující kód napíšeme hned za příkazy pro vkládání souborů:

  <%
    Dim intQSKategorie
    ‚deklarace proměnných
    PripojDatabazi
    ‚připojení k databázi
    intQSKategorie = CInt(Request.QueryString(„kategorie“))
    ‚získání hodnoty proměnné kategorie z kolekce QueryString (proměnná je součástí adresy za ?) a převod na číslo
    If not intQSKategorie > 0 Then
    ‚když intQSKategorie je menší než 0 nebo je délka nulová nebo to není číslo …
      intQSKategorie = 0
      ‚nastav hodnotu proměnné na 0
    End If
  %>

Za tímto kódem následuje obsah stránky v HTML. Funkce ze souboru kategorie.asp vložíme tam, kde chceme zobrazit jejich výsledek. Jako argument těchto funkcí použijeme proměnnou intQSKategorie, která obsahuje číslo aktuální kategorie:

<% ZobrazKategorie(intQSKategorie) %>
<% ZobrazPopis(intQSKategorie) %>
<% ZobrazPozici(intQSKategorie) %>

Na místo, kde chceme zobrazit seznam produktů, vložíme zbylý kód skriptu:

  <%
    Dim objData
    ‚deklarace proměnných
    Set objData = objDatabaze.Execute(„SELECT ID, Nazev, Vyrobce FROM Produkty WHERE Kategorie=“ & intQSKategorie & “ ORDER BY Vyrobce“)
    ‚z tabulky Produkty vyber všechny záznamy pro aktuální kategorii
    If not objData.EOF Then
    ‚když kategorie obsahuje nějaké produkty …
      Response.Write(„<table width=““90%““><tr><td width=““120″“><b>Výrobce</b></td><td><b> Název</b></td></tr>“)
      ‚zapiš hlavičku tabulky
      Do while not objData.EOF
      ‚pro každý produkt …
        Response.Write(„<tr><td>“ & objData(„Vyrobce“) & „</td>“)
        Response.Write(„<td><a href=““detail.asp?produkt=“ & objData(„ID“) & „““>“ & objData(„Nazev“) & „</a></td></tr>“)
        ‚přidej řádek tabulky s výrobcem a názvem zboží s odkazem na jeho detail
        objData.MoveNext
        ‚přesun na další záznam
      loop
      ‚další produkt …
      Response.Write(„</table>“)
      ‚zapiš zápatí tabulky
    Else
      Response.Write(„<b>Kategorie neobsahuje žádný produkt, zkuste podkategorie!</b>“)
      ‚když neexistuje žádný produkt, zapiš varování
    End If
    objData.Close
    set objData = nothing
    ‚zavři objekt se záznamy
    OdpojDatabazi
    ‚ukončí spojení s databází
  %>

Ceník (cenik.asp)

Další stránkou, kterou v rámci elektronického katalogu vytvoříme, bude stránka cenik.asp. Tato stránka bude obsahovat seznam všech produktů s odkazy na jednotlivé katalogové listy. Na začátek stránky musíme opět vložit soubor connect.asp, a to příkazem:

<!– #include file=“includes/connect.asp“ –>

Nyní zbývá do stránky vložit kód podobný tomu předchozímu. Musíme jen vymazat z dotazu SQL příkaz WHERE, který omezuje výběr produktů z databáze pouze na určité položky, a přidat informaci o ceně. Upravený kód vypadá takto:

  <%
    Dim objData, intCena
    ‚deklarace proměnných
    PripojDatabazi
    ‚připojení k databázi
    Set objData = objDatabaze.Execute(„SELECT ID, Nazev, Vyrobce, Cena, DPH, Sleva FROM Produkty ORDER BY Vyrobce“)
    ‚z tabulky Produkty vyber všechny záznamy
    If not objData.EOF Then
    ‚když existují nějaké produkty …
      Response.Write(„<table width=““90%““><tr><td width=““120″“><b>Výrobce</b></td><td><b> Název</b></td></tr>“)
      ‚zapiš hlavičku tabulky
      Do while not objData.EOF
      ‚pro každý produkt …
        Response.Write(„<tr><td>“ & objData(„Vyrobce“) & „</td>“)
        Response.Write(„<td><a href=““detail.asp?produkt=“ & objData(„ID“) & „““>“ & objData(„Nazev“) & „</a></td>“)
        intCena = Round(objData(„Cena“) * ((objData(„DPH“) + 100) / 100) * (1 – (objData(„Sleva“) / 100)), 1)
        ‚vypočítej koncovou cenu
        Response.Write(„<td>“ & intCena & “ Kč</td></tr>“)
        ‚přidej řádek tabulky s výrobcem a názvem zboží s odkazem na jeho detail
        objData.MoveNext
        ‚posuň se na další produkt
      loop
      ‚další produkt …
      Response.Write(„</table>“)
      ‚zapiš zápatí tabulky
    Else
      Response.Write(„<b>V e-shopu není žádný produkt!</b>“)
      ‚když neexistuje žádný produkt, zapiš varování
    End If
    objData.Close
    set objData = nothing
    ‚zavři objekt se záznamy
    OdpojDatabazi
    ‚ukončí spojení s databází
  %>

Detail produktu (detail.asp)

Pouhý seznam produktů s cenami zákazníkovi většinou nestačí. Pro elektronické obchodování je důležité, aby u každého produktu byly detailní informace jako popis, barva, technické parametry a podobně. Stránka, obsahující tato data, se bude jmenovat detail.asp. Pomocí adresy URL předáme proměnnou produkt, která obsahuje identifikační číslo produktu z databáze.

Na začátek souboru přidáme opět příkaz pro vložení souboru connect.asp:

<!– #include file=“includes/connect.asp“ –>

ASP kód stránky:

  <%
    Dim intProdukt, objData, intCena
    ‚deklarace proměnných
    PripojDatabazi
    ‚připojení k databázi
    intProdukt = Request.QueryString(„produkt“)
    ‚získání proměnné produkt z adresy URL
    If not intProdukt > 0 Then
    ‚v případě, že je proměnná produkt prázdná…
      Response.Redirect(„katalog.asp“)
      ‚přesměruj do katalogu
    End If
    Set objData = objDatabaze.Execute(„SELECT * FROM Produkty WHERE ID=“ & intProdukt)
    ‚z tabulky produkty vyber produkty
    If not objData.EOF Then
    ‚jestliže produkt existuje …
      Response.Write(„<table width=““90%““ border=““1″“>“)
      ‚zapiš do tabulky…
      Response.Write(„<tr><td>ID</td><td>“ & objData(„ID“) & „</td></tr>“)
      Response.Write(„<tr><td>Výrobce</td><td>“ & objData(„Vyrobce“) & „</td></tr>“)
      Response.Write(„<tr><td>Název</td><td>“ & objData(„Nazev“) & „</td></tr>“)
      Response.Write(„<tr><td>Popis</td><td>“ & objData(„Popis“) & „</td></tr>“)
      Response.Write(„<tr><td>Cena</td><td>“ & objData(„Cena“) & „</td></tr>“)
      Response.Write(„<tr><td>DPH</td><td>“ & objData(„DPH“) & „</td></tr>“)
      Response.Write(„<tr><td>Sleva</td><td>“ & objData(„Sleva“) & „</td></tr>“)
      intCena = Round(objData(„Cena“) * ((objData(„DPH“) + 100) / 100) * (1 – (objData(„Sleva“) / 100)), 1)
      ‚vypočítej koncovou cenu
      Response.Write(„<tr><td>Koncová cena</td><td>“ & intCena & “ Kč</td></tr>“)
      Response.Write(„<tr><td><a href=““katalog.asp?kategorie=“ & objData(„Kategorie“) & „““>Zpět do katalogu</a></td>“)
      Response.Write(„<td>“)
      If objData(„Prodavat“) = true Then
        Response.Write(„<a href=““kosik.asp?akce=pridej&produkt=“ & objData(„ID“) & „““>Vložit do košíku</a>“)
      Else
        Response.Write(“ „)
      End If
      Response.Write(„</td></tr>“)
      ‚vlož odkazy pro vložení do košíku a vrácení do katalogu
      Response.Write(„</table>“)
    Else
    ‚když produkt neexistuje
      Response.Redirect(„katalog.asp“)
      ‚přesměruj do katalogu
    End If
    objData.Close
    set objData = nothing
    ‚zavři objekt se záznamy
    OdpojDatabazi
    ‚ukončí spojení s databází
  %>

Vyhledávání (hledej.asp)

Důležitou součástí každého katalogu je i vyhledávací stránka. V katalogu, čítajícím několik set až tisíc různých produktů, se těžce orientuje jen podle kategorií. Někdy také uživatel neví přesně, co by chtěl. Vyhledávací systém se skládá ze dvou částí, a sice z vyhledávacího formuláře, který můžete umístit na libovolnou stránku, a vyhledávací stránky hledej.asp.

Vyhledávací formulář bude vypadat takto:

  <form action=“hledej.asp“ method=“POST“>
    Hledat: <input type=“text“ name=“vyraz“ />
    <input type=“submit“ name=“hledej“ value=“Vyhledat“ />
  </form>

Vyhledávací stránka nejdříve načte z formuláře hledaný řetězec a poté prochází jednotlivé záznamy a hledá v nich. Na začátek stránky musíme opět vložit soubor connect.asp:

  <%
    Dim objData, strHledej, strSeznam, intPocet
    ‚deklarace proměnných
    PripojDatabazi
    ‚připojení k databázi
    strHledej = Request.Form(„vyraz“)
    ‚získání hledaného řetězce z formuláře
    intPocet = 0
    ‚počet nalezení
    Set objData = objDatabaze.Execute(„SELECT ID, Nazev, Vyrobce, Popis FROM Produkty“)
    ‚vyber všechny produkty z databáze
    do while not objData.EOF
    ‚pro každý produkt …
      If strHledej = „“ or InStr(UCase(objData(„Vyrobce“)), UCase(strHledej)) > 0 or InStr(UCase(objData(„Nazev“)), UCase(strHledej)) > 0 or InStr(UCase(objData(„Popis“)), UCase(strHledej)) > 0 Then
      ‚je hledaný řetězec v poli: Výrobce, Název, Popis …
        strSeznam = strSeznam & „<a href=““detail.asp?produkt=“ & objData(„ID“) & „““>“ & objData(„Nazev“) & “ (“ & objData(„Vyrobce“) & „)</a><br />“
        ‚zapiš do seznamu nalezených produktů
        intPocet = intPocet + 1
        ‚zvyš počet nalezení o 1
      End If
      objData.MoveNext
      ‚posuň se na další produkt
    loop
    objData.Close
    set objData = nothing
    ‚zavři objekt se záznamy
    If intPocet > 0 Then
    ‚v případě, že počet výskytů je větší než 0
      Response.Write(„<p><b>Hledaný řetězec „““ & strHledej & „““ byl nalezen “ & intPocet & „-krát:</b><br />“)
      Response.Write(strSeznam)
      Response.Write(„</p>“)
      ‚vypiš seznam
    Else
    ‚jinak
      Response.Write(„<p><b>Hledaný řetězec „““ & strHledej & „““ nebyl nalezen!</p>“)
      ‚vypiš „chybu“
    End If
    OdpojDatabazi
    ‚ukončí spojení s databází
  %>

Vyhledávací systém by se také dal řešit funkcemi pro SQL Server, což by bylo celkově rychlejší, ale nepoužitelné pro databáze Access (Access není celkově vhodný pro aplikaci elektronického obchodu).

Na závěr si ještě můžete stáhnout dnešní zdrojové kódy a ukázku hotového katalogu (využívá databázi Access).

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

Odpovědět