Webshops mit MiniVend
von Stefan Hornburg (racke@linuxia.de)

Üblicherweise basieren Webshops auf kommerzieller Software. Mit MiniVend ist jedoch auch eine hervorragende Open-Source-Alternative erhältlich. MiniVend kann für Webshops jeder Größe eingesetzt werden und kann aufgrund des Funktionsumfangs und der Flexibilität selbst mit den teuersten kommerziellen Systemen konkurrieren. Dieser Artikel beschreibt den Einsatz von MiniVend als Shopsystem für eine elektronische Materialbörse.

Inhalt

Webshops mit MiniVend
    Einführung
    Funktionsweise
    Bestandteile eines MiniVend-Shops
        Konfiguration
        MiniVend-Seiten
        Datenbanken
    Produktsuche
    Warenkorb und Preisgestaltung
    Bestellung
    Installation und Konfiguration
    Fehlersuche
    Wartung
    Fazit
    Informationen und Ausblick

Webshops mit MiniVend

Einführung

E-Commerce ist eines der am meisten strapazierten Buzzwords der Computerbranche heutzutage und meint den Handel im Internet. Einem potentiellen Betreiber eines Webshops stehen diverse Lösungen offen, die jedoch zum größten Teil von kommerziellen Anbietern stammen. Wer dagegen die Vorteile von Open-Source-Software zu schätzen weiß, dem steht mit MiniVend eine ausgereifte Anwendung zur Verfügung, die in punkto Funktionsumfang und Konfigurationsmöglichkeiten den Vergleich mit den Konkurrenzprodukten nicht zu scheuen braucht.

MiniVend ist fast ausschließlich in Perl implementiert und ist somit weitgehend plattformunabhängig. Zusätzlich machen die folgenden Eigenschaften MiniVend zu einer flexiblen und offenen Shopsoftware:

Der Autor von MiniVend ist Mike Heins <mike@minivend.com>, der die Weiterentwicklung von MiniVend aktiv betreibt und sich regelmäßig an der Mailingliste für MiniVend-Benutzer beteiligt.

Aufgrund dieser Eigenschaften und generell größerem Vertrauen in Open-Source-Software gerade in sicherheitsrelevanten Bereichen habe ich MiniVend als Basis für mein letztes Projekt ausgewählt, ein Onlineshop für Rest- und Überbestände von elektronischen Bauteilen. Diese Materialbörse wurde für die Firma ecoservice konzipiert.

Funktionsweise

Die Verwaltung eines MiniVend-Shops und die Interaktion mit dem Kunden obliegt dem MiniVend-Server, der wie ein Webserver als Dämon im Hintergrund läuft und auf Anfragen wartet. Der MiniVend-Server wird jedoch nicht direkt von einem Client angesprochen. Dafür sorgt ein kleines CGI-Programm, dass als Vermittler zum Webserver fungiert.

Dieses wird bei jeder Benutzeraktion innerhalb des Onlineshops vom Webserver aufgerufen, kontaktiert den MiniVend-Server und übermittelt alle Parameter. Als Antwort erhält er vom MiniVend-Server eine fertige HTML-Seite, die er zum Webserver weitergibt und die so schließlich zum Kunden gelangt.

Als Basis dienen gewöhnliche HTML-Dokumente, in die spezielle Tags und Attribute eingebettet sind, die vom MiniVend-Server ausgewertet werden. Die Tags werden durch eckige Klammern gekennzeichnet:

[page produktsuche]Produktsuche[/page]

Viele MiniVend-Tags können auch durch spezielle Attribute in normalen HTML-Tags ausgedrückt werden:

<A MV="page" MV.HREF="produktsuche">Produktsuche</A>

Jedem Besucher wird beim Betreten des Onlineshops eine Sitzungskennung zugewiesen, die solange weitergereicht wird, bis der Besucher den Onlineshop verlässt. Dabei wird die Sitzungskennung in die Hyperlinks eingebettet, die auf andere Seiten eines Katalogs verweisen. Deshalb dürfen diese URLs nur mit dem [page ...]-Tag und verwandten Tags referenziert werden und nicht mit normalen HTML-Code.

Dies ist nicht notwendig, wenn Cookies mit der gleichnamigen Konfigurationsanweisung aktiviert wurden, da hier die Sitzungskennung im Cookie gespeichert wird. Man sollte jedoch bedenken, dass dadurch potentielle Kunden ausgeschlossen werden können, die Cookies deaktiviert haben.

Bestandteile eines MiniVend-Shops

Jeder MiniVend-Shop, der auch als Katalog bezeichnet wird, setzt sich im Wesentlichen aus drei Komponenten zusammen: einer Konfigurationsdatei, einer Verzeichnisstruktur mit den für MiniVend aufbereiteten HTML-Seiten und einer Anzahl von Datenbanken.

Konfiguration

Zusätzlich zu einer globalen Konfigurationsdatei gehört zu jedem MiniVend-Shop eine Konfigurationsdatei, die dem Shopbetreiber zahlreiche Einflussmöglichkeiten gibt. Eine minimale Konfigurationsdatei sieht wie folgt aus:

VendURL http://www.materialboerse.de/mvend/
SecureURL https://www.materialboerse.de/mvend/
MailOrderTo order@ecoservice.de

Empfehlenswert ist es jedoch mit einer Konfigurationsdatei aus einem Beispielshop zu beginnen und diese nach und nach an die eigenen Zwecke anzupassen. Diese Konfigurationsdateien sind ausführlich kommentiert:

########### Cookies
##
## Default: Yes
#
# Determines whether we will send (and read back) a cookie to
# get the session ID for links that go outside the catalog.

Cookies No

Neben den üblichen Konfigurationsoptionen können auch Variablen und benutzereigene Tags definiert werden.

MiniVend-Seiten

Als Grundlage für die MiniVend-Seiten können entweder die Seiten eines Beispielshop dienen oder ein Satz vorgegebener HTML-Seiten. Im ersteren Fall bemüht man am besten das makecat-Skript, das den Benutzer nach einer Anzahl von Parametern für den Katalog befragt, den Katalog und das CGI-Programm installiert sowie den MiniVend-Server neu startet. Alternativ kann auch das WWW-Interface zur MiniVend-Administration verwendet werden, das auf dem lokalen Rechner unter der Adresse http://localhost:7786/mv_admin zu erreichen ist.

Als Beispiel folgt jetzt die Seite der Materialbörse für die Volltextsuche, zunächst als Quelltext und dann als fertige Seite. Zusätzlich zu den Tags ersetzt MiniVend sämtliche Variablen, die in den Konfigurationsdateien definiert wurden, durch die entsprechende Werte. Die Variablen werden dabei durch umschließende doppelte Unterstriche gekennzeichnet, z.B. __COMPANY__.

<html>
<head>
<title>materialboerse.de - Produktsuche</title>
<!-- Changed by: Stefan Hornburg, 23-Apr-1999 -->
</head>
[body 1]
[include pages/langbar.html]
[include pages/navbar.html]
<table border="0" cellpadding="0" cellspacing="0" width="216">
<tr> 	
<td><img src="__IMAGE_DIR__/electronic.gif" width=200 height=24
BORDER=0 ALT="electronic"></td>
<td><img src="__IMAGE_DIR__/dot2.gif" width=40 height=1
BORDER=0 ALT=""></td>
<td><IMG SRC="__IMAGE_DIR__/voll_suche.gif" WIDTH=140 HEIGHT=26
ALT="Produktsuche" BORDER="0"></td>
</tr>
</table>
<FORM ACTION="[process-search]" METHOD=POST>
<INPUT TYPE=hidden NAME="mv_searchtype" VALUE="sql">
<INPUT TYPE=hidden NAME="mv_matchlimit" VALUE=10>
<INPUT TYPE=hidden NAME="mv_return_fields" VALUE="id,catid,manufacturer,name,sell">

<P>
<DIR>
<TABLE WIDTH="90%" BORDER="0">
<TR>
<TD COLSPAN=2>Bei der Volltextsuche werden die Felder
Benennung, Typ und Bemerkung nach dem eingegebenen Suchbegriff
durchsucht.
<P> 
</td> 
</tr>
<TR>
<TD>Suchbegriff: </TD>
<TD><INPUT TYPE="text" NAME="mv_searchspec" VALUE="">
<INPUT TYPE=hidden NAME="mv_substring_match" VALUE="yes">
<TD>
<INPUT TYPE=hidden NAME="mv_search_field" VALUE="comment">
<INPUT TYPE=hidden NAME="mv_search_field" VALUE="class">
<INPUT TYPE=hidden NAME="mv_search_field" VALUE="name">
</TD>
</TR>
<TR>
<td></td>
<TD>
<INPUT TYPE="IMAGE" NAME="mv_submit" SRC="__IMAGE_DIR__/suchen.gif" 
VALUE="Suchen" BORDER="0">
</TD>
</TR>
</table>
</form>
</dir>
[include pages/bar2.html]
</body>
</html>

[Volltextsuche]

Jeder Katalog sollte für jedes Produkt eine eigene Seite mit ausführliche Informationen über das Produkt zur Verfügung stellen. Diese Seiten können dynamisch aus einer Datenbank erzeugt werden oder speziell für MiniVend aufbereitet als statische Seiten vorliegen. Da die Materialbörse auf einer SQL-Datenbank aufsetzt, wurde dort die erstere Möglichkeit gewählt. Mit den MiniVend-Tags, die eine Verzweigung erlauben wie z.B. [if ...], braucht man nur die Informationen darstellen, die tatsächlich vorhanden sind:

[Produktinformationen]

Datenbanken

Zur Verwaltung eines MiniVend-Shops wird auf eine oder mehrere Datenbanken zurückgegriffen. Die Datenbanken können z.B. als ASCII-Dateien vorliegen oder als Tabellen in einer SQL-Datenbank. Beliebige Datenbanken können mit MiniVend verwaltet werden. Dabei haben die folgende Datenbanken eine besondere Bedeutung für MiniVend:

products
Waren
inventory
Warenbestand
pricing
Preisgestaltung
shipping
Versandkosten
salestax
Steuern
userdb
Kundendaten

Im einfachsten Fall hat man lediglich eine Produktdatenbank, die als ASCII-Datei vorliegt:

bestellnummer|titel|kuenstler|standort|preis|kategorie
00-0011|Mona Lisa|Leonardo Da Vinci|The Louvre|50000000|Renaissance
19-202|Radioactive Cats|Sandy Skoglund|Getty Museum|400000|Zeitgenössisch
00-341|Sonnenblumen|Vincent Van Gogh|Louvre|40000000|Impressionismus

Die Datenbank mit dem Warenbestand ist getrennt von der Produktdatenbank. Der Zugriff auf diese Datenbank bei der Bestellung erfolgt atomar, so dass die Datenbank währenddessen gesperrt ist.

Produktsuche

Die von MiniVend zur Verfügung gestellte Suchmaschine durchsucht die Produktdatenbank unter Berücksichtigung verschiedener Suchkriterien. Beispielsweise habe ich für die Materialbörse drei verschiedene Suchen implementiert:

Unterschiedliche Arten der Suche sind möglich. Wenn nichts anderes angegeben wird, erfolgt eine textbasierte Suche in der products.asc. Alternativ kann eine binäre Suche in einer lexikalisch sortierten Datei, eine Suche mittels Glimpse oder mit SQL-Kommandos durchgeführt werden.

Das Suchergebnis wird auf einer speziellen Seite präsentiert.. Bei Überschreiten eines optionalen Limits wird nur ein Teil des Resultats dargestellt und zusätzlich Links auf weitere Ergebnisse:

[Suchergebnisse]

Warenkorb und Preisgestaltung

Produkte können dem Warenkorb direkt von den Produktseiten oder aus Suchergebnissen heraus hinzugefügt werden. Im Warenkorb kann die Anzahl der Produkte verändert werden, oder es können Produkte gelöscht werden:

[Warenkorb]

Zusätzlich können verwandte Produkte angeboten werden.

Die Produktbepreisung kann sowohl auf der Basis von fixen Preisen erfolgen oder in Abhängigkeit von der bestellten Menge und der gewünschten Ausführung (z.B. die Größe von Textilien) bestimmt werden.

Darüberhinaus können ausgewählten Kunden Rabatte gewährt werden (z.B. für Clubmitglieder):

Komplettiert werden die von MiniVend zur Verfügung gestellten Möglichkeiten zur Berechnung des Gesamtpreises durch den Aufschlag von Steuern und Versandkosten. Letztere können unter Berücksichtigung von beliebigen Kriterien wie z.B. Gewicht und Anzahl bestimmt werden.

Bestellung

MiniVend bietet verschiedene Möglichkeiten, um die Bestellung eines Kundens zu bearbeiten. Dazu gehört die Versendung der Bestellung mittels verschlüsselter E-Mail oder Fax an den Betreiber und die automatische Verarbeitung durch ein Programm. Weiterhin ist der sofortige Verkauf von geeigneter Ware (z.B. Software) unter Verwendung von elektronischen Zahlungssystemen möglich. Auf die Bestellung reagiert MiniVend mit einer Bestätigungsseite:

[Bestätigung]

Installation und Konfiguration

Für MiniVend benötigt man Perl in der Version 5.004 oder höher. Die aktuelle Version (z.Z. 3.12) von MiniVend kann von ftp.minivend.com heruntergeladen werden. Mitgeliefert werden zwei Beispielshops, simple und flycat. Einen weiteren Shop namens sample findet man auf dem FTP-Server.

wget ftp://ftp.minivend.com/pub/minivend-latest.tar.gz

Nach dem Auspacken des Archivs wechselt man in das entstandene Verzeichnis und ruft das Skript ./configure auf. Die bekannte Vorgehensweise zur Installation eines Perlmoduls kann ebenso verwendet werden.

tar -xzvf minivend-latest.tar.gz
cd minivend-3.12

Als erstes wird das Installationsverzeichnis erfragt:

 MiniVend V3.12
 
 Copyright 1996-1999 by Michael J. Heins <mikeh@minivend.com>

 MiniVend is free under the terms of the GNU General Public License.

Where is your MiniVend to be installed? [/home/racke/mvend] /home/racke/shopware

Die nächsten Schritte, einschließlich der Installation der Perlmodule und -skripte, erfolgen nun automatisch. Dabei kann es zu einem Fehler beim Testen des Servers kommen:

server.......ok 1
ok= def: 1 connect: Connection refused
socket link..make: *** [test_dynamic] Error 111

Dieser Fehler verschwindet normalerweise bei einem erneuten Installationsversuch.

Schließlich werden die CGI-Programme compiliert und es besteht die Möglichkeit, einen Beispielkatalog zu erzeugen.

Fehlersuche

Im Wurzelverzeichnis jedes Katalogs befindet sich eine Logdatei error.log, in der Fehler, z.B. in eingebundenem Perlcode, protokolliert werden. Außerdem kann MiniVend im Debugmodus gestartet werden, wozu jedoch ein kleiner Patch benötigt wird.

Wartung

Um Performanceverluste vorzubeugen, sollten regelmäßig die Sitzungsdatenbanken aufgeräumt werden. Dies macht man am besten mit einem Eintrag in der crontab:

# once a day at 4:40 am
40 4 * * *    perl /home/racke/shopware/bin/expireall -r

Zusätzlich sollte man noch prüfen, ob der MiniVend-Dämon noch aktiv ist. Dies ist besonders wichtig, wenn MiniVend beim Provider läuft, um zu garantieren, dass MiniVend nach einem Reboot wieder neu gestartet wird. Auch hierfür bietet MiniVend ein Skript namens checkstat.sh. In diesem müssen jedoch die ersten Zeilen editiert werden, um es dem System anzupassen.

Fazit

MiniVend ist ein mächtiges Instrument zum Erstellen und Verwalten von Onlineshops, dessen Möglichkeiten sich einem erst nach und nach erschließen und die in diesem Artikel nur teilweise dargestellt werden konnten. Damit geht jedoch eine Komplexizität einher, die eine intensive Einarbeitung erforderlich macht. Somit ist es ungeeignet, um schnell mal nebenbei einen kleinen Shop auf die Beine zu stellen. Wer sich jedoch langfristig mit Onlineshops beschäftigen möchte oder sich an größere Shops heranwagt, dem ist MiniVend als ausgereiftes Werkzeug zu empfehlen.

Informationen und Ausblick

Mehr über MiniVend erfährt man auf der Website www.minivend.com. Dort kann man sich auch in die Mailinglisten eintragen und diese durchsuchen. Der Autor arbeitet z.Z. an der Version 4 von MiniVend, die auf XML basiert wird. Das dadurch vereinbarte Parsen wird nach Aussage des Autors zu einen Performancegewinn führen.