View
1
Download
0
Category
Preview:
Citation preview
Fachhochschule MunsterFachbereich Elektrotechnik und Informatik
Diplomarbeit
Erstellung eines Web-basierten Konfigurators fur
Renn- und Triathlonrader mittels PHP und MySQL
von
Marco Ressler
Betreuer/Prufer:
Prof. Dr. rer. nat. Nikolaus Wulff
Dipl.-Kfm. Christian Pyrrek
Eidesstattliche Erklarung
Ich versichere hiermit, dass ich diese Diplomarbeit ohne fremde Hilfe selbststandig
verfasst und nur die angegebenen Quellen und Hilfsmittel benutzt habe. Wortlich
oder dem Sinn nach aus anderen Werken entnommene Stellen sind unter Angabe
der Quelle kenntlich gemacht.
Die Arbeit wurde bisher in gleicher oder ahnlicher Form keiner anderen Prufungs-
behorde vorgelegt und auch nicht veroffentlicht.
Munster, den 22.Juli 2006
Inhaltsverzeichnis
Einfuhrung V
1 PHP vs. Java 1
1.1 Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1.1 Die Vor- und Nachteile bei Java und JSP . . . . . . . . . . . 3
1.1.2 Anwendungsbereiche von Java . . . . . . . . . . . . . . . . . 4
1.2 PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.2.1 Die Vor- und Nachteile bei PHP . . . . . . . . . . . . . . . . 6
1.2.2 Typische Anwendungen bei PHP . . . . . . . . . . . . . . . 7
1.3 PHP vs. Java - uberhaupt vergleichbar? . . . . . . . . . . . . . . . 7
2 Das Renn-/Triathlonrad 10
2.1 Aufbau und Komponenten . . . . . . . . . . . . . . . . . . . . . . . 11
2.2 Abhangigkeiten der Komponenten . . . . . . . . . . . . . . . . . . . 14
3 Das Programm aus Sicht des Nutzers 19
3.1 Programmablauf . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.2 Bildschirmausgabe . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
3.2.1 Navigationsleiste . . . . . . . . . . . . . . . . . . . . . . . . 21
3.2.2 Komponententabelle . . . . . . . . . . . . . . . . . . . . . . 22
3.2.3 Ubersichtstabelle . . . . . . . . . . . . . . . . . . . . . . . . 24
3.2.4 Sonstige Anzeigen . . . . . . . . . . . . . . . . . . . . . . . . 24
3.2.5 Showroom . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
Diplomarbeit I
INHALTSVERZEICHNIS
4 MySQL Datenbank 27
4.1 Aufbau der Tables . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.1.1 Gemeinsame Eigenschaften . . . . . . . . . . . . . . . . . . . 28
4.1.2 Einzelne Tabellen . . . . . . . . . . . . . . . . . . . . . . . . 29
5 Die Progamm-Dateien 35
5.1 Programmablauf . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
5.2 Darstellung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
5.2.1 index.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
5.2.2 Main.php . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
5.2.3 Showroom.php . . . . . . . . . . . . . . . . . . . . . . . . . 42
5.3 XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
5.3.1 XML-Datei . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
5.3.2 XML-Handler Klasse . . . . . . . . . . . . . . . . . . . . . . 46
5.4 Event-Handler Klasse . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5.4.1 Die Ereignisse . . . . . . . . . . . . . . . . . . . . . . . . . . 49
5.4.2 Weitere Funktionen . . . . . . . . . . . . . . . . . . . . . . . 50
6 Das Programm aus Sicht des Entwicklers 53
6.1 Events . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
6.1.1 Navigation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
6.1.2 Entfernen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
6.1.3 Auswahl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
6.1.4 Zusatzliche Auswahl . . . . . . . . . . . . . . . . . . . . . . 56
6.1.5 Reset . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
6.2 Komponentenklassen . . . . . . . . . . . . . . . . . . . . . . . . . . 58
6.2.1 Funktion set session . . . . . . . . . . . . . . . . . . . . . . 59
6.2.2 Funktion display . . . . . . . . . . . . . . . . . . . . . . . . 61
6.2.3 Weitere Funktionen . . . . . . . . . . . . . . . . . . . . . . . 63
6.3 Elternklasse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
6.3.1 Komponentendarstellung . . . . . . . . . . . . . . . . . . . . 65
6.3.2 Komponenten entfernen . . . . . . . . . . . . . . . . . . . . 68
6.3.3 Preis- und Gewichtsaktualisierung . . . . . . . . . . . . . . . 69
Diplomarbeit II
INHALTSVERZEICHNIS
6.4 Weitere Klassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
6.4.1 XML Handler Klasse . . . . . . . . . . . . . . . . . . . . . . 70
6.4.2 Session Handler Klasse . . . . . . . . . . . . . . . . . . . . . 72
6.4.3 Datenbank Handler Klasse . . . . . . . . . . . . . . . . . . . 72
6.5 Interaktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
6.5.1 Event: Navigation . . . . . . . . . . . . . . . . . . . . . . . . 73
6.5.2 Event: Auswahl . . . . . . . . . . . . . . . . . . . . . . . . . 74
6.5.3 Event: Auswahl mit Zusatz . . . . . . . . . . . . . . . . . . 77
7 Zusammenfassung und Ausblick 79
7.1 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
7.2 Ausblick . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
7.3 Schlusswort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
A Tables der Datenbank 83
B Screenshots 91
Quellenverzeichnis 94
Diplomarbeit III
Abbildungsverzeichnis
2.1 Ubersicht Fahrrad-Komponenten . . . . . . . . . . . . . . . . . . . 11
3.1 Pfade im Programmablauf . . . . . . . . . . . . . . . . . . . . . . . 20
3.2 Navigatonsleiste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.3 Komponententabelle . . . . . . . . . . . . . . . . . . . . . . . . . . 23
3.4 Ubersichtstabelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
4.1 Aufbau der Artikelnummer . . . . . . . . . . . . . . . . . . . . . . . 29
5.1 Klassendiagramm . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
5.2 Diagramm zur index.php . . . . . . . . . . . . . . . . . . . . . . . . 41
6.1 Aufteilung zwischen Footer und Head . . . . . . . . . . . . . . . . . 66
6.2 Ablauf beim Event Navigation . . . . . . . . . . . . . . . . . . . . . 75
6.3 Ablauf beim Event Auswahl . . . . . . . . . . . . . . . . . . . . . . 76
6.4 Ablauf beim Event zusatzliche Auswahl . . . . . . . . . . . . . . . . 78
B.1 Die Startseite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
B.2 Konfigurator fur Triathlonrader . . . . . . . . . . . . . . . . . . . . 92
B.3 Konfigurator fur Rennrader . . . . . . . . . . . . . . . . . . . . . . 93
Diplomarbeit IV
Einfuhrung
Das Ziel dieser Arbeit war es mit Hilfe von kostengunstigen Mitteln einen Web-
basierten Konfigurator fur Renn- und Triathlonrader zu erstellen. Um die Entwick-
lungskosten zu minimieren wurden die Skriptsprache PHP und die open-source Da-
tenbank MySQL gewahlt. In Auftrag gegeben wurde das Projekt won der Firma
all4triathlon.com, einem Internethandel, der sich auf die Nischensportart Triathlon
spezialisiert hat. Eine Recherche im Internet hat ergeben, dass viele schon vorhan-
dene Konfiguratoren fur z. B. Rennrader sehr unzureichend sind [NR05] oder nur
eine Marke unterstutzen [Bik06]. Dieser Umstand sollte mit diesem Konfigurator
geandert werden, so dass ein benutzerfreundliches Programm unabhangig von Her-
stellern existiert.
Mit Hilfe des Konfigurators kann sich ein Benutzer, unter Berucksichtigung der
Abhangigkeiten der einzelnen Komponenten, sein”Wunsch-Fahrrad“ erstellen. Die-
se Abhangigkeiten galt es in PHP zu realisieren, in dem eine so genannte”Rule-
Engine“ entworfen wurde, so dass am Ende ein Rennrad erstellt wird, bei dem die
einzelnen Teile sich auch tatsachlich von einem Mechaniker zusammenbauen lassen.
Zusatzlich mussten nicht nur die komponentenspezifischen Daten gespeichert und
dargestellt werden, sondern es sollten auch der Preis und das Gewicht automatisch
berechnet werden. Eine weitere Anforderung an den Prototypen war, dass, nach-
dem ein Rad zusammengestellt war, es moglich sein sollte ein oder mehr weitere
Rader zu konfigurieren. In einer Gesamtubersicht sollten dann alle erstellten Rader
angezeigt werden, so dass man die Gelegenheit hat alle Rennrader miteinander zu
vergleichen.
Der fertige Prototyp ist unter der Internetadresse http://www.radtraum.de
erreichbar.
Diplomarbeit V
Kapitel 1
PHP vs. Java
Am Anfang er Entwicklung stellte sich naturlich die Frage mit welchen Mitteln der
Konfigurator erstellt werden sollte. Manche Programmiersprachen schieden von
vornherein aus. Dazu gehoren z. B. C/C++, Delphi oder Pascal. Unter anderem
weil die Sprachen nicht fur Webanwendungen zu verwenden sind. Am Ende kamen
nur Java bzw. JSP1 oder PHP in Frage. Beide (Skript-)Sprachen sind hervorragend
geeignet fur Anwendungen im Internet und ebenso konnen beiden Sprachen den
Anforderungen des Konfigurators gerecht werden.
In diesem Kapitel soll auf die Eigenschaften und auf die Vor-/Nachteile der jewei-
ligen Sprache eingegangen werden. Auch werden typische Anwendungen von Java
und PHP vorgestellt. Gegen Ende des Kapitels wird ein Resumee gezogen, wobei
sich von vornherein die Frage stellt, ob sich diese Sprachen uberhaupt vergleichen
lassen.
1.1 Java
Angefangen hat die Entwicklung von Java im Jahre 1991 unter dem Namen”Green
Project“. Ursprunglich war eine komplette Betriebssystemumgebung geplant und
1992 gab es die erste funktionsfahige Anwendung, in der mittels Touchscreen und
1Java Server Pages
Diplomarbeit 1
KAPITEL 1. PHP VS. JAVA
GUI2 mehrere Gerate interaktiv gesteuert werden konnten. Das bevorzugte Betati-
gungsfeld sollte aber das immer popularere Internet werden. Im Jahre 1995 wurde
dann Java erstmals offiziell der Offentlichkeit vorgestellt. Mit der Kooperation
zwischen Netscape und Sun kam der Durchbruch fur Java. Die erste Version, also
Java 1.0, wurde dann 1996 veroffentlicht. Es waren zwar noch nicht viele Pakete
enthalten, was sich aber mit der Version 1.1 aus dem Jahre 1997 anderte. Damals
wurden heute selbstverstandliche Funktionen, wie JavaBeans oder JDBC3 zum Zu-
griff auf Datenbanken, erstmals implementiert. Mit der ein Jahr spater erschienen
Version 1.2 anderte sich der Name in Java 2. So hießen die Produkte nicht mehr
JDK1.2 sondern J2SDK4. Eine herausragende Neuerung in dieser Version war ein
so genannter Just-in-Time Compiler, so dass Java-Programme deutlich schneller
liefen als vorher. Hinzu kamen noch verschiede Anderungen an den Standard-
Bibliotheken. Im Jahr 2000 kam die nachste Version auf den Markt, bei dem neben
einer erweiterten API5 auch weitere Optimierungsroutinen implementiert wurden.
Nach zwei weiteren Jahren erschien die Version 1.4, in welcher erneut Anderungen
an der Programmiersprache selbst vorgenommen wurden. Zuletzt geschah dies in
Version 1.1. Implementiert wurden auch Erweiterungen die eine Serverprogram-
mierung vereinfachen sollten, wie z. B. mit JSPs. Die momentan (Stand Juli 2006)
aktuelle Version ist 1.5, in der unter anderem generische Typen oder weitere Hilfs-
klassen eingefuhrt wurden. Die Version wurde aber wieder umbenannt und heißt
nun Java 5.0 [Wik06a].
So weit der Uberblick der Geschichte von Java. Doch warum sollte ein Entwickler
uberhaupt Java oder Java Server Pages wahlen? Die ublichen Vorteile, die immer
wieder genannt werden, sind z. B. die Portabilitat und die Vielseitigkeit der Spra-
che. Nachfolgend werden die Vor- und Nachteile von Java, JSP usw. hervorgehoben
und analysiert.
2Graphical User Interface3Java DataBase Connectivity4Java 2 Software Development Kit5Application Programming Interface
Diplomarbeit 2
KAPITEL 1. PHP VS. JAVA
1.1.1 Die Vor- und Nachteile bei Java und JSP
Zum Anfang eine Eigenschaft von Java,, welche noch immer im Internet zu lesen,
jedoch mittlerweile uberholt ist. Es wird oft genannt, dass Java eine clientseitige
Sprache sei [Ind06]. Z. B. durch JSP ist Java heute eher eine serverseitige Sprache
geworden.
Den großten Vorteil, den Java besitzt ist die Plattformunabhangigkeit. So ist ein
einmal kompilierter Code auf jedem System einsetzbar, dass die JVM installiert
hat. Dies wird auch als”write once, run everywhere“ umschrieben. Aber durch die
Java Virtual Machine ergeben sich auch Nachteile. Es muss eine JVM erst einmal
auf dem System vorhanden sein, damit der Java-Code lauft. Als großer Vorteil
wird bei Java immer wieder die Skalierbarkeit angefuhrt. Skalierbarkeit bedeutet,
dass eine Anwendung problemlos auf großere Rechnersysteme ubertragen werden
kann, wenn es die Benutzerzahlen bzw. die Systembelastung erfordert. So kann ein
Javaprogramm ohne weitere Optimierung viele Aufgaben bewaltigen, so lange die
Hardware stimmt [Hom06b].
Der nachste Vorteil ist die Testbarkeit von Programmen. Dieses wird haufig durch
Komponentenmodelle wie EJB erreicht. Da diese Enterprise Java Beans
unabhangig voneinander Aufgaben erfullen konnen, werden diese Funktionen ubli-
cherweise auch getrennt getestet, so dass das Aufspuren von Fehlern leichter ist
[Ihn06]. Dieser Vorteil wird seit PHP4, und besonders seit PHP5, aufgehoben, da
objektorientiertes Programmieren nun auch dort moglich ist. Wobei man allerdings
sehr viel mehr”
Disziplin“ beim Erstellen des Codes haben muss, um die gleiche
Testbarkeit und Modularitat von Java zu erreichen.
Das fuhrt direkt zu einem weitern Vorteil bzw. Nachteil, je nach Sichtweise: Bei
Java ist Vieles von vornherein definiert und abstrahiert. So mussen bei Java Varia-
blentypen und Klassen deklariert werden, oder es mussen Referenztypen angegeben
werden um objektorientiert zu arbeiten. Das bringt aber auch Typensicherheit. Au-
ßerdem muss Java uber eine main-Funktion verfugen damit der Java-Interpreter
einen so genannten Startpunkt hat.
Falls eine komplette Entwicklungsumgebung mit dazugehorigem Server gekauft,
bzw. gemietet werden soll, so sind die Kosten ublicherweise nicht gering. Eine
Diplomarbeit 3
KAPITEL 1. PHP VS. JAVA
einzige Benutzerlizenz fur Sun Java Studio Enterprise 7 kostet schon 1.850 e; eine
Verlangerung der Lizenz kostet nochmals 1.300 e6. Fur eine Java-Application-
Server Software wird jahrlich nochmals 1.950 e7 verlangt [Cat06]. Allein an diesen
Preisdimensionen kann man sofort sehen, dass dies ein großer Nachteil von Java ist,
und sich entweder nur fur gut situierte Unternehmen und/oder große Anwendungen
eignet.
Ein weiterer Nachteil mag in dem relativ schweren Erlernen der Programmier-
sprache liegen. Auch die strikte Objektorientierung mag fur manchen Anfanger
zu abstrakt erscheinen. Weiterhin wird als Nachteil die langere”Anlaufzeit“ eines
Java-Projekts genannt. Wie lange allerdings die Gesamtentwicklungszeit einer An-
wendung dauert, kommt naturlich auf das Projekt an. Dabei heißt es, dass je großer
die Anwendung, desto kurzer ist die Entwicklungszeit gegenuber PHP [XF04].
1.1.2 Anwendungsbereiche von Java
Hauptsachlich wird Java in E-Business Anwendungen eingesetzt. Auch auf Web-
und Applikationsservern wird Java in diesem Bereich verwendet. Die J2EE bietet
hierfur einen modularen Aufbau und die Moglichkeit mehrschichtige Anwendungen
zu erstellen. Das Spektrum reicht hier von Call-Center Losungen uber Kundenin-
formationssystemen bis hin zu graphischen Editoren [ID06].
Applets sind bzw. waren ein wichtiges Aufgabengebiet von Java. Gegen Ende der
neunziger Jahre war ein Java-Chatraum, das eigentlich eine Applet war, Norma-
litat. Andere Anwendungen fanden sich in der Datenprasentation, in Animationen
und Visualisierungen. Heute sind Applets nicht mehr so verbreitet, werden aber
immer noch gerne zu Visualisierungszwecken in Wissenschaft und Technik benutzt.
Heutzutage findet man Java auch in kleinen, mobilen Geraten wie einen PDA
oder das Mobiltelefon. Hier konnen dann verschiedenste Anwendungen, vom Spiel
bis zum Fahrplan8, ausgefuhrt werden. Allerdings wird nur das Notwendigste der
6jeweils ohne MWSt.7ohne MWSt.8siehe www.mofahr.de
Diplomarbeit 4
KAPITEL 1. PHP VS. JAVA
JVM implementiert - die kleinste Version der J2ME, CLDC genannt [Hom06a],
verzichtet sogar auf Berechnung von Fließkommazahlen.
1.2 PHP
PHP ist als Programmiersprache relativ jung. Erst 1995 wurde sie aus einer Samm-
lung Perl-Skripten erschaffen. Der Name stand damals noch fur”Personal Home
Page“. 1997 wurde dann PHP 2.0 veroffentlicht, in dem ein Form Interpreter bein-
haltet war. Deshalb wurde auch von PHP/FI gesprochen. Es war Perl recht ahnlich,
wenn auch eingeschrankter und einfacher.
PHP3 wurde neu geschrieben, da die alten Versionen dem e-commerce nicht mehr
genugten. Es erschien 1998. Die Entwicklung des Form Interpreters wurde bald
darauf eingestellt. Es wurde die Firma Zend Technologies gegrundet und somit
wurde 2000 die Zend-Engine, die das Herzstuck von PHP4 darstellte veroffent-
licht, in der auch einfache objektorientierte Programmierung moglich war. Auch
die Bedeutung der Abkurzung wurde geandert. PHP steht nun fur ein rekursi-
ves Akronym und heißt PHP: Hypertext Processor. Der nachste Meilenstein fur
diese Sprache kam 2004, als PHP5 veroffentlicht wurde. Nun war ernsthafte OO-
Programmierung moglich, und es kamen Java-ahnliche Funktionen wie Exceptions
vor. Die aktuellste Version ist derzeit 5.1. [Wik06b] [Bra05]
Vor allem das gegen Ende der neunziger Jahre stark anwachsende World Wide
Web verlangte nach einer Skriptsprache, die fahig ist, dynamische Webseiten dar-
zustellen. Die damals als Standard geltende Sprache Perl wurde von PHP in der
Popularitat uberholt, da sie als einfacher zu erlernen gilt.
PHP ist eine serverseitige Skriptsprache und wird fast ausschließlich fur Weban-
wendungen angewandt. Naturlich ist auch ein Zugriff auf Datenbanken, insbeson-
dere MySQL, moglich. Gerne werden die Vorzuge von PHP genannt: leichte Er-
lernbarkeit, schnellere Performance oder einfachstes Zusammenspiel mit HTML.
Nachstehend werden die Vor- und auch die Nachteile einer PHP-basierten Anwen-
dung beschrieben.
Diplomarbeit 5
KAPITEL 1. PHP VS. JAVA
1.2.1 Die Vor- und Nachteile bei PHP
Der großte Vorteil ist wohl, dass PHP uber die GPL9 vertrieben wird. Das bedeu-
tet, es ist freie Software. Der Quelltext kann von jedem eingesehen werden, und
daher ist eine GPL-Software auch kostenlos. Ebenso ist MySQL eine freie Software
und kann kostenfrei heruntergeladen werden. Dadurch werden fur PHP-Projekte
gegenuber Java weniger Geldmittel aufgewendet werden mussen [Bra05].
Der nachste positive Aspekt von PHP liegt in dem von vornherein großen Funk-
tionsumfang, wie z. B. optimierte Funktionen zu Datenbankanbindungen, Netz-
werken oder (seit PHP5) XML. Diese stehen sofort zur Verfugung, ohne dass die
Funktionen/Bibliotheken erst importiert oder inkludiert werden mussen. Dadurch
kann sich auch die Entwicklungszeit eines Projekts verkurzen, da viele dieser Funk-
tionen nicht erst selbst erstellt werden brauchen [Mor02b].
Ein haufig genannter Vorteil ist die Performancegeschwindigkeit, die viel hoher
liegen soll als die von Java. Allerdings gibt es in der Praxis zu viele Faktoren, wie
z. B. die Leistungsfahigkeit des Server-Computers und die des Client-Rechners, um
einen Unterschied festzustellen.
Die im Java-Teil schon erwahnte, strenge Typisierung entfallt bei PHP vollig. So
braucht man Variablen nicht deklarieren, denn die erste Zuweisung bestimmt den
Typ. Auch kann man, z. B. bei einer switch-Anweisung, fast jeden Typ verwenden
[Hat02]. Doch dadurch geht auch die Typensicherheit verloren und macht Java-
typische Funktionen wie Polymorphie unmoglich.
Nachteile ergeben sich durch den erhohten Netzwerktraffic. Da PHP serverseitig
funktioniert, mussen bei jeder zu prufenden Eingabe diese Daten an den Server
gesendet werden. Diese konnen durch JavaScript zwar minimiert werden, doch das
ist umstandlich und stellt auch nur eine”Vorprufung“ dar [Mor02a].
Ein ganz großer Nachteil (insbesondere fur großere Projekte) durfte in der fehlen-
den Modularitat liegen. Java ist von vornherein auf mehrschichtige Anwendungen
abgestimmt, wahrend man bei PHP schon recht”
disziplinierter“ arbeiten muss,
9General Public Licence
Diplomarbeit 6
KAPITEL 1. PHP VS. JAVA
um alle Aufgaben sauber von einander zu trennen. Dieses reduziert die Ubersicht-
lichkeit, die Wartbarkeit und den Wiederverwendungswert [WC04].
1.2.2 Typische Anwendungen bei PHP
Es gibt im Grunde genommen nur einen Anwendungsbereich von PHP, und das
sind dynamische Webseiten, bei denen Daten aus einer Datenbank entnommen
werden.
Aber da das Web viele Anwendungsmoglichkeiten bietet, sind auch die Bereiche in
denen PHP verwendet wird sehr unterschiedlich. Der oben genannte, grundlegende
Prozess kann mitunter auch sehr Komplex werden. Das einfachste Beispiel ware
eine Homepage eines Hobbyprogrammierers. Das kann bei einem selbst erstellten
Gastebuch oder einem Forum anfangen. Das Ganze kann bis zu einer Unterneh-
mensprasenz mit Homepage, e-commerce-shop [osC06] und Content Management
System (CMS) [Typ06] gehen.
Aber es gibt auch neben dem Internet Anwendungsgebiete fur PHP. Allerdings
sind diese recht unbedeutend, da es fur diese Aufgaben bessere Programmierspra-
chen gibt (z. B. Java). Es handelt sich beispielsweise hierbei um Kommandozeilen-
Skripte fur haufig verwendete Aufgaben, wobei nur der PHP Interpreter benotigt
wird. Ein weiteres Beispiel ist die clientseitige GUI-Programmierung. Dazu wird
allerdings die Erweiterung PHP-GTK10 verwendet [Gle03].
1.3 PHP vs. Java - uberhaupt vergleichbar?
Auf einer Seite im Internet wird behauptet ein Vergleich zwischen Java und PHP
sei wie ein Vergleich zwischen”Coke und Pepsi“ oder
”Hulk Hogan und Mr.T“
[Nor03]. Trotz dieser zugegebenermaßen seltsamen Analogie ist es wahr, dass sich
diese beiden Sprachen nicht ohne weiteres Vergleichen lassen. Jede Programmier-
sprache hat seine Vor- und Nachteile. Deshalb konnte eigentlich diese Diskussion
damit abgeschlossen werden, indem behauptet wird:
10GIMP (GNU Image Manipulation Program) Tool Kit
Diplomarbeit 7
KAPITEL 1. PHP VS. JAVA
Grundsatzlich bestimmen die Anforderungen des Kunden welches Sys-
tem zu Einsatz kommt.[Con04]
Doch welches System kommt wann zum Einsatz? Im Grunde genommen kann
man sagen, dass je großer und umfangreicher eine Anwendung wird, desto eher
sollte Java die Sprache der Wahl sein. Als Beispiel kann man das System eines
Call-Centers nutzen. Dort mussen viele Informationen von tausenden von Kunden
verfugbar sein. Diese Informationen mussen von jedem Call-Center Mitarbeiter
manipulierbar sein, und zusatzlich muss es nachvollziehbar sein, welcher Arbeiter
welche Anderungen vorgenommen hat. Dies ist ein System, das hunderte bis tau-
sende von Anfragen pro Minute hat und eine riesige Datenbank verwalten muss.
Dabei kann Java z. B. auch die Verteilung der Anrufe steuern. Das Ganze muss
auch so automatisch, d.h. so effizient wie moglich erfolgen.
Die Skriptsprache PHP ware dabei uberfordert, da unter anderem PHP ein so
genanntes Multithread System (mit dem Apache-Server) ist, wahrend Java ein
Multiprocess System darstellt und somit mehrere Aufgaben gleichzeitig erledigen
kann. Außerdem ist es mit PHP nicht moglich auf so genannte Low-Level Ressour-
cen zuzugreifen, so dass keine Hardware gesteuert werden kann.
Anders herum ist naturlich PHP vorzuziehen. Besonders bei kleineren oder mitt-
leren Projekten ist die Entwicklungszeit sehr kurz. Es macht keinen Sinn ein Java-
system fur eine Homepage oder einfache Internetprasenz eines Unternehmens zu
nutzen. Auch bei etwas großeren Projekten, wie eine e-commerce Applikation oder
ein Content Management System, ware PHP geeigneter wergen den geringeren
Kosten und der (wahrscheinlich) kurzeren Entwicklungszeit.
Als Fazit der Gegenuberstellung der beiden doch recht unterschiedlichen Program-
miersprachen kann man sagen:
Obwohl PHP schneller erste Fortschritte erzielt, ist bei großen Anwendungen eher
damit zu rechnen, dass die Java-Version schneller fertig gestellt wird. Deshalb ist,
wie schon erwahnt bei großen und umfangreichen Projekten Java zu bevorzugen.
Im Umkehrschluss heißt es also, dass bei kleineren und mittleren Projekten, bei
denen nicht so viel Performance benotigt wird, PHP vorzuziehen ist.
Diplomarbeit 8
KAPITEL 1. PHP VS. JAVA
Fur das Projekt mit der Erstellung des Konfigurators stand dann fest, dass PHP
verwendet werden sollte. Die Webanwendung ist nicht so umfangreich, dass ein
Team von Programmierern zur Realisierung benotigt ware. Ebenso ware eine der-
art teure Anschaffung, wie die einer Lizenz fur Java Studio Enterprise 7, fur dieses
Projekt kaum gerechtfertigt.
Diplomarbeit 9
Kapitel 2
Das Renn-/Triathlonrad
Ein Renn- bzw. Triathlonrad besteht aus vielen Komponenten, die nicht beliebig
austauschbar sind. Es stand fruh fest, dass dies ein interdisziplinares Projekt wer-
den wurde. Nicht nur Programmierfahigkeiten waren notwendig, sondern auch ein
technisches und mechanisches Verstandnis fur den Aufbau einer solchen”Rennma-
schine“. Daher bestand ein nicht unerheblicher Teil dieser Diplomarbeit daraus,
zu ermitteln, welche Komponenten bzw. Komponentengruppen sich uberhaupt fur
einen Konfigurator eignen.
Als Beispiel kann das Laufrad genannt werden: es besteht aus Felge, Speichen, Na-
be und Schnellspanner. Jedes dieser Teile ließe sich einzeln kaufen und so konnte
man nur fur das Laufrad vier weitere Bauteile in den Konfigurator aufnehmen. Die-
ses detailgenaue Erstellen eines Rennrades wurde allerdings den Rahmen sprengen,
und so mussten Bauteilgruppen zusammengefasst werden11 um eine uberschaubare
Menge an Komponenten zu erhalten.
Der nachste zeitaufwandige Teil bestand darin, zu ermitteln, in welchen Abhangig-
keiten diese Komponenten zueinander standen, bzw. wie diese Bauteile zusammen-
gebaut werden. Unter anderem wurden bei unterschiedlichen Herstellern unter-
schiedliche Bezeichnungen verwendet, so dass erst herausgefunden werden musste,
welche dieser Bezeichnungen das Gleiche bedeuteten. Als Beispiel kann man die
Große der Laufrader verwenden, denn dort gibt es drei Bezeichnungen fur den
11Die Komponenten Kurbelsatz und Schaltgruppe bestehen ebenfalls aus mehreren Einzelteilen
Diplomarbeit 10
KAPITEL 2. DAS RENN-/TRIATHLONRAD
gleichen Durchmesser: normal ist ein Durchmesser von 28 ”. Die Bezeichnung von
Reifen- und Schlauchherstellern lautet hier fur 663, was diese Große in mm an-
gibt, wahrend die traditionelle franzosische Bezeichnung 700C ist, und oft von
Laufradherstellern verwendet wird.
Abbildung 2.1: Ubersicht Fahrrad-Komponenten
2.1 Aufbau und Komponenten
An diesem Punkt sind die Komponenten aufgelistet, die in dem Konfigurator Ver-
wendung finden. Da die Benutzung ein gewisses Vorwissen uber den Aufbau eines
Rennrades erfordert, das die Zielgruppe zweifellos besitzt, werden die einzelnen
Baugruppen beschrieben, und es wird erklart was deren Funktionen sind. Abbil-
dung 2.1 zeigt wo an einem Rennrad die Komponenten zu finden sind.
Diplomarbeit 11
KAPITEL 2. DAS RENN-/TRIATHLONRAD
Rahmen Der Rahmen ist das Herzstuck des Fahrrades, da fast alle anderen Bau-
teile daran angebaut werden. An dieser Komponente werden direkt der Steu-
ersatz, die Gabel, die Sattelstutze und der Kurbelsatz befestigt. Eine wichtige
Einheit bei der Auswahl eines Rahmens ist die Rahmenhohe.
Steuersatz Diese Komponente halt Gabel und Rahmen zusammen und sorgt mit
den Kugellagern dafur, dass diese auch beweglich bleibt. Der untere Teil des
Steuersatzes wird auf die Gabel geschoben, und diese beiden Bauteile werden
dann durch das Steuerrohr des Rahmens geschoben. Mit dem oberen Teil des
Steuersatzes wird dann die Gabel an das Rohr festgeklemmt.
Gabel An der Gabel werden am oberen Ende der Vorbau, der Lenker und (beim
Triathlonrad bzw. Zeitfahrrad) der Aeroaufsatz montiert. Am unteren Ende
wird das vordere Rad befestigt. Die Gabel wird, wie schon beschrieben, mit
Hilfe des Steuersatzes an das Steuerrohr des Rahmens befestigt.
Vorbau Der Vorbau ist das Verbindungsstuck zwischen Gabel und Lenker. Er
wird in verschiedenen Langen gefertigt, die individuell vom Fahrer ausgewahlt
werden. Ein Vorbau kann auch einen bestimmten Winkel besitzen, damit der
Lenker eine fur den Fahrer optimale Hohe erreichen kann.
Lenker Der Lenker ist an dem Vorbau befestigt, und er kann verschiedene Breiten
von 40 cm bis 44 cm haben. Diese muss von Fahrer individuell gewahlt wer-
den. An dem Lenker sind bei einem Rennrad die Schalt-Bremshebel befestigt
(Die Schaltung und die Bremse befinden sich in einem Bauteil).
Aeroaufsatz Dieses Bauteil wird nur bei Zeit- bzw. Triathlonradern verwendet.
Durch den Aufsatz wird eine aerodynamischere Fahrposition erreicht. Hier
befinden sich die Schalthebel am Ende es Aufsatzes, wahrend sich die Brem-
sen am Lenker befinden.
Laufrader Die Laufrader sind ein fur die Aerodynamik wichtiges Bauteil. Sie
konnen je nach Einsatzzweck normale Speichen und Felgen, (fur normale
Radrennen), oder besonders aerodynamisch Geformte, bis hin zu einer Schei-
be am Hinterrad (fur Zeitfahren u. a.) haben. Bei speziell fur Aerodynamik
Diplomarbeit 12
KAPITEL 2. DAS RENN-/TRIATHLONRAD
und Gewicht ausgerichtete Laufrader spricht man auch von Systemradern.
Zusatzlich wird zwischen Schlauch- und Drahtreifen unterschieden. Auch gibt
es zwei verschiedene Arten von Naben am hinteren Laufrad, die mit dem
Hersteller fur die Schaltgruppe kompatibel sein mussen.
Reifen Den Kontakt zum Boden bilden die Reifen. Es gibt spezielle Gummi-
Mischungen fur Wettkampf und Training. Außerdem wird zwischen Schlauch-
reifen und Drahtreifen unterschieden. Erstere werden wie normale Reifen
gehandhabt, wahrend letztere aufwandig auf das Laufrad geklebt werden.
Kurbelsatz Dies ist eine Bauteilgruppe, die aus sehr vielen Einzelteilen besteht,
die, wenn sie einzeln zusammengestellt werden sollten, den Umfang eines
Konfigurators sprengen wurden. Doch viele Hersteller bieten Komplettsyste-
me an. Ein Kurbelsatz besteht aus zwei bzw. drei Kettenblattern, zwei Kur-
beln, einer Achse und dazu passendes Tretlagergehause samt Kugellager. Die
Kurbeln werden in verschiedenen Langen angeboten, die entsprechend den
Vorlieben des Fahrers ausgewahlt werden.
Schaltgruppe Hier gibt es nur zwei weltweit fuhrende Hersteller, Shimano und
Campagnolo, deren Systeme untereinander nicht kompatibel sind. Auch die
Schaltgruppe besteht aus vielen Einzelteilen, wie z. B. einem vorderen und
hinteren Umwerfer, der fur das Wechseln der Kette auf die verschiedenen
Ritzel bzw. Kettenblatter zustandig ist. Des weiteren gehort zu einer Schalt-
gruppe ein Ritzelpaket, auch Kassette genannt. Es besteht aus neun bis zehn
unterschiedlich großen Ritzeln, die auf die hintere Nabe des Laufrades ge-
steckt werden. Ein weiteres Bauteil ist der so genannte Kafig, der dafur
sorgt, dass die Kette stets gespannt bleibt. Zur Schaltgruppe gehoren auch
die Schalt-Bremshebel.
Bremsen Mit den Bremsen ist der tatsachliche Bremskorper gemeint. Die Brems-
backen greifen an der Felge des Laufrades und verlangsamen so die Fahrt.
Pedale Die Pedale werden an das Ende der Kurbeln vom Kurbelsatz geschraubt.
Sie sind ublicherweise so genannte Klick-Pedale, mit denen dann der Rad-
schuh fest an der Pedale befestigt ist. Das hat den Vorteil, dass nicht nur Vor-
Diplomarbeit 13
KAPITEL 2. DAS RENN-/TRIATHLONRAD
triebskraft beim Herunterdrucken der Pedale ausgeubt wird, sondern zusatz-
lich auch beim Hochziehen Vortrieb geleistet wird, da die Schuhe mit den
Pedale fest verbunden sind.
Sattelstutze Eine Sattelstutze ist nicht nur notwendig um einen Sattel zu befes-
tigen, sondern sie sollte auch entsprechend der individuellen Korpergroße des
Fahrers verstellbar sein. Da die Stutze dem Fahrtwind ausgesetzt ist, werden
oft aerodynamische Anspruche an diese Komponente gestellt.
Sattel Auf dem Sattel sitzt der Fahrer die meiste Zeit, und ist somit optimal
auf die menschliche Anatomie ausgerichtet. Es gibt sogar spezielle Sattel fur
Manner und Frauen, sowie je nach Fahrstil ausgerichtete Sattel.
2.2 Abhangigkeiten der Komponenten
In diesem Abschnitt werden die Abhangigkeiten der Komponenten untereinander
aufgezahlt bzw. welche Großen mit welchen Komponenten zusammenpassen. Auch
hier gilt, dass ein gewisses Vorwissen von Namen und Bezeichnungen vorhanden
sein sollte. Abbildung 2.1 kann dabei eine Hilfe sein.
Rahmen An einen Rahmen werden viele weitere Bauteile angebracht. Weil der
Rahmen die zentrale Komponente ist, sind viele andere Elemente von den
Maßen des Rahmens abhangig. So gibt es verschiedene Großen fur das Steu-
errohr, das Tretlager, die Sattelstutze, und – je nach Rahmenhohe12 – die
Laufrader.
Das Steuerrohr kann einen Durchmesser von 1 ” oder 11/8 ” haben. Das wirkt
sich dann auf den Steuersatz, die Gabel und den Vorbau aus. Die Sattelstutze
kann verschiedenste Maße zwischen 26mm und 34mm Durchmesser anneh-
men. Auch das Tretlager, das zum Kurbelsatz gehort, kann zwei unterschied-
liche Maße haben: ITA (metrisch, 70mm Durchmesser) und BSA (imperial,
12Die Rahmenhohe leitet sich von der Schritthohe des Fahrers ab.
Diplomarbeit 14
KAPITEL 2. DAS RENN-/TRIATHLONRAD
68mm Durchmesser), um die traditionellen Großen-Bezeichnungen zu benut-
zen. Zuletzt hangen auch noch die Durchmesser der Laufrader, und damit
auch die Große bzw. Lange der Gabel, von dem Rahmen ab, denn unter
einer Rahmenhohe von 52 cm werden ublicherweise 26 ” anstatt 28 ” Rader
verwendet.
Steuersatz Hier ist es wichtig welche Große das Steuerrohr des Rahmens, und
somit der Gabelschaftdurchmesser hat. Betragt das Maß nur 1 ” konnen nur
Steuersatze mit dem gleichen Maß verwendet werden. Bei 11/8 ” verhalt es
sich genau so.
Gabel Bei dieser Komponente sind zwei Maße wichtig: der Gabelschaftdurchmes-
ser und ob die Gabel fur 26 ” oder 28 ” Rader geeignet ist. Beides ergibt sich
aus der Rahmengeometrie, d.h. zum einen der Durchmesser des Steuerrohrs
und zum anderen die Rahmenhohe.
Vorbau Der Vorbau hat drei Maße, die zu beachten sind, wobei eine zwar wichtig
fur den Fahrer ist, aber unerheblich fur den Konfigurator. Es handelt sich
hierbei um die Lange des Vorbaus. Diese ist je nach Vorlieben und Korper-
große des Fahrers unterschiedlich.
Eines der beiden Maße, die fur das Programm von Bedeutung sind, ware
der Durchmesser fur das Loch, das auf den Gabelschaft montiert wird. Diese
Große hangt, wie der Steuersatz und die Gabel selber auch, von dem Durch-
messer des Steuerrohrs am Rahmen ab. Hier gibt es die schon genannten
Maße 1 ” und 11/8 ”.
An der anderen Seite des Vorbaus ist die Offnung, an die der Lenker festge-
klemmt wird. Hier werden die Maße wieder in Millimeter angegeben. Ublich
sind 26.0mm und 31.8mm als Lenkerrohrdurchmesser. Je nach dem welche
Große dieser Durchmesser bei dem ausgewahlten Vorbau hat, werden bei der
Komponente Lenker nur die entsprechenden Artikel angezeigt.
Lenker Wie oben erwahnt, sind die Lenkerrohrdurchmesser 26.0mm und 31.8mm
ublich. Diese Maße sind auch spater fur den Aeroaufsatz wichtig, falls ein
Triathlonrad gewahlt wurde. Es sind noch andere Informationen uber den
Lenker von Bedeutung. So muss z. B. angegeben sein, ob dieser Lenker nicht
Diplomarbeit 15
KAPITEL 2. DAS RENN-/TRIATHLONRAD
schon vom Hersteller aus uber einen Aeroaufsatz verfugt. Diese Art Lenker
durfen dann nicht angezeigt werden wenn ein Rennrad konfiguriert werden
soll. Es kann auch vorkommen, dass ein Lenker nicht dafur geeignet ist, einen
zusatzlichen Aeroaufsatz aufzunehmen. Dies muss auch berucksichtigt wer-
den, und somit durften diese Lenker nicht bei einem Triathlonrad angezeigt
werden.
Aeroaufsatz Diese Komponente steht nur zur Auswahl, wenn der Nutzer ein
Rennrad konfigurieren mochte. Der Aeroaufsatz ist naturlich von den Vor-
gaben des Lenkers abhangig. Da der Aufsatz normalerweise auf den Lenker
geklemmt wird, ist der Lenkerrohrdurchmesser hier von entscheidender Be-
deutung. Allerdings bieten manche Hersteller so genannte Multi-Fit Systeme
an, die bei (fast) allen Lenkern passen. Dies muss im Konfigurator ebenfalls
berucksichtigt werden.
Des Weiteren kann es vorkommen, dass ein Lenker schon vom Hersteller aus
einen Aeroaufsatz fest montiert hat. Auch das ist ein Aspekt, der beruck-
sichtigt werden muss.
Laufrader Hier sind ebenso zwei ubliche Maße zu beachten. Zum einen gibt es
die 28 ” und die 26 ” Rader. Die Große ist indirekt von der Korpergroße
abhangig, denn diese bestimmt die Rahmenhohe. Unterschreitet die Hohe
einen bestimmten Betrag (ublich sind 52 cm), so werden automatisch im
Konfigurator die kleineren Reifen gewahlt. Zusatzlich gibt es noch, wie oben
beschrieben, den Unterschied zwischen Draht- und Schlauchreifen. Diese In-
formation ist fur die Komponente Reifen wichtig.
Eine weitere Eigenschaft, die spater bei der Schaltgruppe und/oder dem Kur-
belsatz wichtig wird, ist die Nabe des hinteren Laufrades. Auf diese Nabe
wird die so genannte Kassette aufgesteckt, die aus bis zu zehn Kettenblattern
besteht. Es gibt nur zwei marktbeherrschende Hersteller fur Schaltgruppen
im Radsport: Shimano und Campagnolo. Die Naben sind nicht untereinan-
der kompatibel. Daher muss auch auf diese Eigenschaft beim Konfigurator
geachtet werden.
Diplomarbeit 16
KAPITEL 2. DAS RENN-/TRIATHLONRAD
Reifen Die einzige Abhangigkeit, die hier besteht, ist der Unterschied zwischen
den Schlauch- und Drahtreifen. Sie bestimmt welche Art der Reifen darge-
stellt wird. Eine weitere, aber fur den Konfigurator nicht relevante Große
sind die Breite der Reifen.
Kurbelsatz Bei der Vorauswahl eines Kurbelsatzes ist nicht nur zu beachten, dass
die Tretlager dieser Komponente auch in das Tretlagergehause des Rahmens
passen mussen. Es ist auch noch im Konfigurator zu prufen, ob nicht schon
die Laufrader gewahlt wurden, und somit die Anzeige der Komponenten nicht
weiter eingeschrankt wird. Abgesehen von der Kurbellange, bestimmen die
weiteren Maße und Eigenschaften eines Kurbelsatzes, welche Schaltgruppe
spater zur Auswahl steht.
Da ware die Art und Anzahl der Kettenblatter. Es gibt drei Variationen: die
normale Ausfuhrung mit zwei Blattern, die”compact“ Version, mit ebenfalls
zwei Kettenblattern, aber kleinerem Durchmesser und weniger Zahnen, und
die Variante mit drei Blattern. Die Anzahl der Zahne auf den Kettenblattern
ist wichtig um die so genannte Kapazitat des Schaltkafigs bei der Schaltgrup-
pe zu berechnen. Außerdem sind manche Schaltgruppen speziell auf compact
oder dreifach-Antriebe ausgerichtet.
Eine weitere Abhangigkeit besteht bei der Marke der Schaltgruppe. Da es
nur die Marken Shimano oder Campagnolo gibt, und die einzelnen Teile nur
bedingt bis gar nicht kompatibel untereinander sind, werden z. B. durch die
Wahl eines Shimano-Kurbelsatzes auch nur Shimano-Komponenten bei der
Kategorie Schaltgruppen angezeigt. Es gibt aber auch Anbieter von Kur-
belsatzen, bei denen es moglich ist, Schaltgruppen von beiden Herstellern zu
benutzten. Dies alles muss naturlich im Konfigurator berucksichtigt werden.
Schaltgruppe Die Anzeige der Schaltgruppenkomponenten wird entweder durch
die Wahl der Laufrader oder durch die Wahl des Kurbelsatzes eingeschrankt.
Außerdem bewirkt die Berechnung der Kapazitat der Kette eine weitere Vor-
auswahl. Andere Daten von vorherigen Komponenten dienen fur die spatere
Montage des Rades, und nicht mehr fur die Funktionalitat des Konfigura-
tors. Weitere gespeicherte Eigenschaften der Schaltgruppe dienen noch zu
Darstellungszwecken.
Diplomarbeit 17
KAPITEL 2. DAS RENN-/TRIATHLONRAD
Bremsen Hier gibt es keine Abhangigkeiten und keine Vorauswahl der Kompo-
nenten. Es kann sogar eine Campagnolo Bremse an ein Rad mit Shimano-
Schaltgruppe montiert werden.
Pedale Bei den Pedalen gibt es ebenfalls keine Abhangigkeiten mit anderen Bau-
teilen. Jede Pedale passt an jede Kurbel. Es gibt aber noch verschiedene
Pedalsysteme13, die nur mit bestimmten Radschuhen kompatibel sind. Die
sind allerdings nicht relevant fur den Konfigurator – das muss der Nutzer
selbst entscheiden, was fur ein System er verwenden mochte.
Sattelstutze Das einzige Maß auf das hierbei geachtet werden muss, ist der
Durchmesser der Sattelrohraufnahme beim Rahmen. Weitere Eigenschaften,
wie z. B. die Lange der Sattelstutze dienen nur zu Darstellungszwecken und
sind nicht weiter relevant fur die Vorauswahl von anderen Bauteilen.
Sattel Auch hier gibt es keine Abhangigkeiten mit anderen Komponenten, denn
auf jeder Sattelstutze lasst sich ein beliebiger Sattel montieren.
13Es gibt das so genannte Look-System und die SPD-Pedale von Shimano
Diplomarbeit 18
Kapitel 3
Das Programm aus Sicht des
Nutzers
3.1 Programmablauf
Der Ablauf vom Zusammenstellen eines Rennrades sollte recht flexibel sein. Es
wurde uberlegt, welche Art von Nutzerfuhrung am sinnvollsten erscheint. Zur Aus-
wahl standen der so genannte”Wizard-Mode“, in dem jede Komponente einzeln
und nacheinander durchgegangen wird, bis alle Bauteile ausgewahlt sind. Dem ge-
genuber stand die freie Wahl der Reihenfolge, in der der Nutzer die Komponenten
wahlen kann. Naturlich ist wegen der Abhangigkeiten untereinander keine ganzlich
freie Wahl moglich, aber in einem gewissen Rahmen ließe sich das realisieren.
Fur die assistierte Zusammenstellung sprach die relativ einfache Programmierung,
aber auf der anderen Seite wurde sich ein Nutzer zu sehr in seiner Wahlfreiheit
eingeschrankt fuhlen. Denn die Zielgruppe ist der schon fortgeschrittene Fahrer,
der die einzelnen Komponenten an seinem Rad kennt, und der sich durch einen
Assistenten-Modus eher”bevormundet“ fuhlen wurde. Außerdem ware der ganze
Prozess des Konfigurierens nicht sehr transparent.
Fur die (relativ) freie Wahl sprach eine bessere Benutzerfreundlichkeit, wie z. B.
die Moglichkeit eine schon ausgewahlte Komponente schnell zu entfernen, ohne
Diplomarbeit 19
KAPITEL 3. DAS PROGRAMM AUS SICHT DES NUTZERS
einige Male einen Zuruck-Button im”Wizard-Mode“ anzuklicken. Ein weiterer
Vorteil ist, dass durch eine Navigationsleiste die Ubersicht behalten wird, und al-
les innerhalb einer Webseite passieren kann. Der große Nachteil war allerdings die
komplizierte Implementierung und die ganzen Moglichkeiten, die sich dadurch ei-
nem Nutzer ergeben, abzufangen und in die gewunschten Bahnen zuruckzulenken.
Ein Beispiel hierfur ware, dass der Nutzer nach der Wahl des Rahmens nicht sofort
den Lenker wahlen kann. Er konnte zwar in der Navigationsleiste auf die Rubrik
Lenker klicken, aber durch entsprechende Mitteilungen musste der Nutzer wieder
die geforderte Reihenfolge einhalten.
Abbildung 3.1: Pfade im Programmablauf
Diplomarbeit 20
KAPITEL 3. DAS PROGRAMM AUS SICHT DES NUTZERS
Schließlich wurde wegen der genannten Vorteile die freie Wahl implementiert. Der
Nutzer kann zwar nicht in beliebiger Reihenfolge die Komponenten wahlen, aber
er kann so genannte Pfade entlang die Rad-Elemente aussuchen. Die Bauteile in
den Pfaden sind unabhangig von einander, so dass nur innerhalb dieser Pfade der
Nutzer auf eine bestimmte Reihenfolge in der Auswahl gebracht wird. Als Beispiel
(siehe Abb. 3.1) waren der Pfad im Konfigurator mit den Komponenten Laufrader
und Reifen, und der Pfad mit Sattelstutze und Sattel. Die Komponenten dieser
Pfade sind unabhangig voneinander, wahrend z. B. die Reifen von den Laufradern
abhangig sind, und der Sattel erst nach der Sattelstutze gewahlt werden kann.
3.2 Bildschirmausgabe
In den folgenden Sektionen wird auf die einzelnen Elemente, die auf dem Bildschirm
sichtbar sind, eingegangen und erklart welche Funktion sie haben. Die meisten Ele-
mente dienen dazu den Konfigurator zu bedienen, wie z. B. die Navigationsleiste
oder die Tabelle mit den Komponenten. Der Rest ist fur die Darstellung von In-
formationen zustandig. Dazu zahlt die Anzeige vom Gesamtpreis, Gewicht oder
ausgewahlter Marke.
3.2.1 Navigationsleiste
Die Leiste zum Navigieren ist naturlich sehr wichtig. Ohne sie ware das Steuern
und Bedienen des Konfigurators unmoglich. Wie schon vorher erwahnt (Seite 19),
ist das das Resultat der Entscheidung gegen einen vollig starren Ablauf im Konfi-
gurieren eines Rades.
In der Navigationsleiste sind die alle 13 Komponenten aufgelistet. Dies gilt aber
nur fur ein Rennrad, denn bei einer Zusammenstellung eines Triathlonrades sind
es 14 Komponenten. Bei einem Rennrad wird die Komponente Aeroaufsatz nicht
verwendet, und daher taucht dieses Element in der Navigationsleiste nicht auf.
Klickt der Nutzer auf eine dieser Kategorien, werden ihm die zur Verfugung stehen-
den, und kompatiblen Bauteile in der Komponententabelle angezeigt. Muss vorher
Diplomarbeit 21
KAPITEL 3. DAS PROGRAMM AUS SICHT DES NUTZERS
noch eine andere Komponente gewahlt werden, wird eine entsprechende Meldung
dargestellt. Wird ein Artikel gewahlt, so farbt sich das Feld dieser Komponente
ein. Dieses dient dazu um dem Nutzer einen Uberblick zu verschaffen welche Kom-
ponente er schon gewahlt hat, denn bei einer nicht assistierten und freien Wahl
der Bauteile kann die Ubersicht schnell verloren gehen. Falls eine Entscheidung
zuruckgenommen wird, und die entsprechende Baugruppe entfernt werden soll, so
werden auch in der Navigationsleiste dieses Feld, und alle damit zusammenhangen-
den Felder, wieder auf die Ursprungsfarbe zuruckgesetzt.
Abbildung 3.2: Navigatonsleiste
3.2.2 Komponententabelle
Auch diese Tabelle ist sehr wichtig. Hier kann der Nutzer die Komponenten an-
schauen, auswahlen und ggf. loschen. Jedes angezeigte Bauteil ist kompatibel mit
Diplomarbeit 22
KAPITEL 3. DAS PROGRAMM AUS SICHT DES NUTZERS
den vorher ausgewahlten Elementen, bzw. mit den angegeben Korpermaßen. Jedes
Element der Komponententabelle ist gleich aufgebaut, unterscheidet sich aber in
den Informationen. So sind in der ersten Zeile die Artikelnummer, der Name der
Komponente und daneben der Preis zu finden. Darunter ist eine Zeile mit einer
kurzen Beschreibung des Produkts und ein kleines Bild zu finden. Die darunter lie-
gende Zeile findet sich nicht bei jeder Komponente, sondern nur bei denen, die eine
zusatzliche Information brauchen. Als Beispiel kann man die Sattelstutze nennen,
bei dem diese Zeile angibt welchen Durchmesser und welche verstellbare Lange
sie hat14. In der letzten Zeile, die wieder fur alle Baugruppen gilt, sind dann das
Gewicht und der Auswahl-Button zu finden. Gegebenenfalls erscheint auch hier
eine Schaltflache zum Entfernen der Komponente.
Abbildung 3.3: Komponententabelle
Eine Abwandlung der Komponententabelle besteht in der so genannten zusatzli-
chen Auswahl. Bei den Komponenten Vorbau und Kurbelsatz bieten die Hersteller
das gleiche Produkt in verschiedenen Langen an. Da sonst die Komponententa-
belle zu lang und zu unubersichtlich ware, wenn alle Produkt- und Langenkombi-
nationen dort aufgelistet waren, wurde diese zusatzliche Auswahl implementiert.
14In der Abbildung bezieht sich die zusatzliche Info auf die Rahmenhohe.
Diplomarbeit 23
KAPITEL 3. DAS PROGRAMM AUS SICHT DES NUTZERS
Wahlt der Nutzer z. B. einen Vorbau, erscheint automatisch eine weitere Tabel-
le an der Stelle, an der auch die Komponententabelle war, und der Nutzer wird
aufgefordert eine passende Lange zu dem Vorbau auszuwahlen. Hierbei wird die
Navigationsleiste ausgeblendet, damit der Nutzer erst diese Wahl treffen muss.
Diese Vorgehensweise ware ein Beispiel fur die Lenkung der Entscheidungen des
Nutzers, damit dieser nichts”falsch machen“ kann.
3.2.3 Ubersichtstabelle
Diese Tabelle dient, wie der Name schon aussagt, zur Ubersicht. Wahrend der
Nutzer anhand der Navigationsleiste erkennen kann welche Komponenten er schon
gewahlt hat, so sind in der Ubersichtstabelle genauere Informationen zu finden. In
jeder Zeile der Tabelle ist eine Komponente aufgelistet. In der zweiten Spalte ist der
jeweilige Name des ausgewahlten Fahrradelements zu finden. In der dritten Spalte
ist dann noch einmal der Preis der Komponente aufgezeigt. Sollte es vorkommen,
dass z. B. bei dem Rahmen die Gabel schon im Lieferumfang enthalten ist, so wird
dies mit einem entsprechenden Eintrag in der Tabelle bei der Zeile Gabel vermerkt.
Der angegebene Preis ware dann naturlich 0,00e. Fur den Fall, dass ein Rennrad
zusammengestellt werden soll, zeigt die Ubersichtstabelle des Konfigurators ein
”N/A“ bei der Komponente Aeroaufsatz an, da bei einem Rennrad keine solchen
Elemente zum Einsatz kommen.
3.2.4 Sonstige Anzeigen
Zu den sonstigen Anzeigen zahlen z. B. der Gesamtpreis und das Gesamtgewicht.
Da beide Angaben fur einen Radfahrer sehr wichtige Daten sind, durfen sie bei
einem Renn- und Triathlonkonfigurator nicht fehlen. Das Feld mit diesen Informa-
tionen ist unter der Ubersichtstabelle positioniert. Je nachdem ob eine Komponen-
te ausgewahlt, oder wieder entfernt wird, andern sich der Preis und das Gewicht
automatisch.
Eine weitere Anzeige ist die der ausgewahlten Marke fur die Komponente Schalt-
gruppe. Diese wird nicht von Anfang an dargestellt, da die Wahl der Marke bei
Diplomarbeit 24
KAPITEL 3. DAS PROGRAMM AUS SICHT DES NUTZERS
Abbildung 3.4: Ubersichtstabelle
den Laufradern, dem Kurbelsatz oder erst bei der Schaltgruppe fallt. Sollten alle
Komponenten, fur die die Kompatibilitat mit Shimano oder Campagnolo wichtig
ist, entfernt werden, so wird auch diese Anzeige nicht mehr dargestellt. Diese In-
formation wird ebenfalls unter der Ubersichtstabelle angezeigt.
Zu manchen Komponenten wird auch ein Infotext angezeigt, der den Nutzer z. B.
daruber aufklart aus welchen einzelnen Elementen die Schaltgruppe besteht. Auch
wird darauf hingewiesen, bei welcher Komponente die Schaltgruppenmarke fest-
gelegt wird. Dieser Infotext ist ebenfalls dynamisch, so dass der eben genannte
Hinweis nur angezeigt wird, wenn die Marke noch nicht gewahlt wurde. Die Hin-
weise sind an dem unteren Rand des Bildschirms zu finden.
Ein weiterfuhrender Link erscheint uber der Navigationsleiste wenn alle Kompo-
nenten gewahlt wurden. Dieser Verweis fuhrt den Nutzer zu dem so genannten
”Showroom“, in dem er sich bis zu drei selbst erstellte Rader anschauen, und die
einzelnen Bauteile, den Gesamtpreis und das Gesamtgewicht vergleichen kann.
Diplomarbeit 25
KAPITEL 3. DAS PROGRAMM AUS SICHT DES NUTZERS
Die letzte, der so genannten sonstigen Anzeigen, ist eine Schaltflache am oberen
linken Bildschirmrand. Der Knopf dient zum Neustart des aktuell zu konfigurie-
renden Rades. Wird dieser angeklickt, so werden alle bisher ausgewahlten Kom-
ponenten entfernt. Allerdings kann nur das aktuelle Rad neu konfiguriert werden
– schon fertig zusammengestellte Rader, die im”Showroom“ betrachtet wurden,
sind nicht mehr loschbar, es sei denn, der Nutzer fangt wieder mit der Startseite
wieder an.
3.2.5 Showroom
Der Showroom ist eine eigene php-Datei. Das heißt, es wird nicht mehr alles von der
Main.php gesteuert. Hier werden das aktuelle Rad und vorher konfigurierte Rader
dargestellt. Diese Seite besteht aus drei Tabellen, die ahnlich der Ubersichtsta-
belle auf der Hauptseite sind. Es werden hier auch der Komponentenname, der
Artikelname und der Einzelpreis je Komponente nebeneinander angezeigt. Unter
der Tabelle ist dann noch einmal der jeweilige Gesamtpreis und das Gesamtgewicht
dargestellt.
Diese Ubersicht ist bisher bei noch keinem der schon im Internet verfugbaren Fahr-
radkonfiguratoren vorhanden. So kann der Nutzer von seinem Wunschrad mehrere
Ausfuhrungen oder Ausstattungen erstellen und so auf einen Blick entscheiden,
welche Konfiguration ihm am geeignetsten erscheint.
Es ist moglich bis zu drei Renn- bzw. Triathlonrader zusammenzustellen. Sind
noch nicht alle Rader konfiguriert, so erscheint unter den Tabellen noch ein Link,
der den Nutzer wieder zu der Hauptseite fuhrt. Dort kann dann ein weiteres Rad
erstellt werden. Die Komponentendaten sind naturlich wieder alle geloscht, so dass
keine Bauteilgruppe ausgewahlt ist. Es werden die Daten, die der Nutzer auf der
Startseite angegeben hat, wie Korper- und Schritthohe, sowie die daraus resul-
tierenden anderen Maße, beibehalten. Falls andere Korpermaße oder ein anderer
Radtyp gewunscht ist, muss der Nutzer wieder von vorne beginnen.
Diplomarbeit 26
Kapitel 4
MySQL Datenbank
4.1 Aufbau der Tables
Als Datenbank wurde eine normale MySQL Datenbank verwendet, da zumindest
in der Phase eines Prototyps nicht so viele Daten und Benutzerzahlen zusammen-
kommen, dass andere, kommerzielle Datenbanksysteme wie Oracle [Ora06] oder
DB2 [IBM06] in Betracht gezogen werden mussten.
Die Datenbank ist der essentielle Teil des Konfigurators, denn darin sind alle rele-
vanten Daten zu den einzelnen Komponenten gespeichert. Unter relevanten Daten
sind Informationen zur Darstellung innerhalb es Konfigurators, wie z. B. Kompo-
nentenname oder die Beschreibung zu verstehen. Die wichtigeren Daten innerhalb
der Datenbank sind Informationen uber die Komponenten, damit die Abhangig-
keiten zwischen anderen Bauteilgruppen erkannt werden konnen. So ist, um ein
Beispiel zu nennen, im Rahmen-Table der Durchmesser der Gabelaufnahme hinter-
legt. Ebenso ist diese Große bei jeder Komponente im Gabel-Table erfasst, damit
im Konfigurator nur die Gabeln angezeigt werden, die mit der Gabelaufnahme des
Rahmens zusammenpassen.
Diplomarbeit 27
KAPITEL 4. MYSQL DATENBANK
4.1.1 Gemeinsame Eigenschaften
Da jede Komponente verschiedene Abhangigkeiten mit anderen Rennradteilen be-
sitzt, hat jedes Table eine unterschiedliche Anzahl von Spalten und Eigenschaften.
Allerdings sind einige Spalten bei allen Tables gleich, da sie unter anderem fur die
Darstellung im Konfigurator gebraucht werden. Damit die Daten aus den Spalten
spater einfach extrahiert werden konnen, sind diese immer die Ersten eines Tables
und damit immer an der gleichen Stelle und Reihenfolge.
Es handelt es sich dabei um folgende Spalten:
Artikelnummer Ein eindeutiger Schlussel, der gleichzeitig auch der Primary Key
ist. Die Artikelnummer besteht aus sechs Zeichen, wovon das erste Zeichen
ein Buchstabe ist, der die Komponente bezeichnet.’A‘ ware in diesem Fall der
Rahmen,’B‘ der Steuersatz usw. Die nachsten beiden Zeichen bestehen aus
Zahlen und stellen einen Code fur den Hersteller/die Marke dar. Die nachsten
beiden Ziffern bezeichnen die wievielte Komponente des Herstellers es in der
Datenbank ist. Das letzte Zeichen sollte wieder ein Buchstabe sein, und steht
fur verschiedene Ausfuhrungen bei dem gleichen Artikel. Ein Beispiel ware
hierfur, wenn es einen Lenker in drei verschiedenen Breiten gibt.
Gewicht Hier wird das Gewicht der jeweiligen Artikel eingetragen, da es fur einen
Renn- und Triathlonfahrer sehr wichtig ist, wie viel sein Rad wiegt. Der
Eintrag in der Datenbank dient zum Darstellen im Konfigurator und zur
Errechnung des Gesamtgewichts.
Preis Der Betrag, den eine Komponente kostet, wird in dieser Spalte eingetragen.
Auch diese Daten dienen zur Darstellung im Konfigurator und zur Errech-
nung des Endpreises.
Name Der Name der Komponente. Dieser Eintrag wird nur zur Darstellung in
dem Konfigurator und der Ubersichtstabelle verwendet.
Beschreibung Ein kurzer Text zur Beschreibung der Komponente, in dem fur
den Benutzer, aber nicht fur die Funktion des Konfigurators, relevante Daten
stehen konnen.
Diplomarbeit 28
KAPITEL 4. MYSQL DATENBANK
Abbildung 4.1: Aufbau der Artikelnummer
Bild Eine URL zu einem kleinen Bild. Dies dient nur zu Darstellungszwecken. Al-
lerdings ist diese Funktion im Prototyp nur durch ein Beispiel-Bild realisiert,
das bei jedem Artikel gleich ist. Es wird aber spater notwendig sein, dass der
Dateiname des Bildes gleich dem der Artikelnummer (und gleichzeitig auch
des Primary Keys) ist.
Allein durch diese Daten in der Datenbank ware es moglich den Konfigurator mit-
tels PHP und HTML darzustellen. Alle zusatzlichen Spalten sind notwendig damit
die Abhangigkeiten zwischen den Komponenten erkannt und die kompatiblen Bau-
teilgruppen dargestellt werden konnen.
4.1.2 Einzelne Tabellen
Die folgende Beschreibung zeigt die einzelnen Tables auf, und gibt eine kurze Er-
klarung warum diese Spalte erstellt wurde, und wie/ob sie notwendig fur andere
Komponenten ist. (Vgl. Anhang A ab Seite 83)
TABLE Rahmen
Diplomarbeit 29
KAPITEL 4. MYSQL DATENBANK
• rahmenhoehe: das Maß wird aus den auf der Startseite angegebenen Da-
ten des Benutzers berechnet. Die Rahmen mit der ubereinstimmenden Große
werden angezeigt. Außerdem ist das Maß fur die Große der Laufrader rele-
vant.
• gabelaufnahme: hier ist gespeichert welcher Gabelschaftdurchmesser mit
diesem Rahmen zusammenpassen wird.
• gabelvorhanden: der Wert in dieser Spalte kann nur 0 oder 1 annehmen,
und gibt an ob der Rahmen schon mit einer Gabel ausgeliefert wird.
• steuersatz: ebenfalls konnen hier nur die Werte 0 und 1 angenommen wer-
den. Die Spalte gibt an, ob der Steuersatz mit dem Rahmen geliefert wird.
• sattelrohr: gibt an, welcher Durchmesser (in mm) das Rohr fur die Sat-
telstutze hat. Ist ein Wert uber 100 angegeben, impliziert das eine schon
beim Rahmen vorhandene Sattelstutze.
• tretlager: da es hier zwei Standardmaße gibt, ist diese Spalte wichtig um
anzugeben, welche Tretlagergroße der Kurbelsatz haben muss.
TABLE Steuersatz
• gabelschaft: der gespeicherte Wert gibt an zu welchen Gabelschaft- bzw.
Gabelaufnahmegroßen der Steuersatz passt.
TABLE Gabel
• gabelschaft: auch hier wird die Große des Gabelschafts angegeben, damit
die Gabel auch mit dem Rahmen und dem Steuersatz zusammenpasst.
• laenge: die Große der Laufrader, also 28 ” oder 26 ”, die an diese Gabel
montiert werden konnen, sind in dieser Spalte hinterlegt.
Diplomarbeit 30
KAPITEL 4. MYSQL DATENBANK
TABLE Vorbau
• gabelaufnahme: die Spalte gibt ebenso den Durchmesser des Gabelschafts
an, so dass im Konfigurator nur die Vorbauten angezeigt werden, die mit
dem ausgewahlten Rahmen bzw. der Gabel zusammenpassen.
• lenkeraufnahme: hier wird der Wert gespeichert, der angibt was fur ein
Durchmesser das Lenkerrohr haben muss, damit der Lenker sich an diesem
Vorbau montieren lasst.
• laenge1: die Hersteller von Vorbauten bieten verschiedene Langen an. Hier
wir die kleinste verfugbare Lange gespeichert.
• laenge2: an dieser Spalte wird die nachst-großere Vorbaulange eingetragen.
• . . .
• laenge9: bis zu neun verschiedene Langen konnen gespeichert werden, was
aber nicht notwendig ist, da viele Hersteller nur vier oder funf Vorbaulangen
zur Auswahl haben.
• winkel: gibt an, mit was fur einen Winkel der Vorbau von der Gabel abste-
hen wird. Das dient zur weiteren Lenker-Erhohung/Herabsetzung.
• flip: der Wert kann nur 0 oder 1 annehmen und beschreibt ob der Vorbau
um 180◦ drehbar ist, so dass der Fahrer zwischen zwei Winkeln wahlen kann.
TABLE Lenker
• lenkerdurchm: alle Lenker, die den gleichen Lenkerdurchmesser haben, wie
von dem Vorbau vorgegeben, werden angezeigt.
• breite: individuelle Große, die sich nach dem Fahrer richtet. Diese Spalte
dient nur zu Darstellungszwecken, und zum spateren Uberprufen, welche
Komponenten ausgewahlt wurden.
Diplomarbeit 31
KAPITEL 4. MYSQL DATENBANK
• lenkerart: in dieser Spalte ist festgehalten um was fur eine Art Lenker es
sich handelt: reiner Rennradlenker, reiner Triathlonlenker (ublicherweise mit
Aeroaufsatz) oder ob der Lenker mit beiden Fahrradarten kompatibel ist.
• aeroaufsatz: der Inhalt der Spalte beschreibt, ob an dem Lenker ein Ae-
roaufsatz angebaut werden kann, ob dies nicht moglich ist, oder ob schon ein
solcher Aufsatz mit dabei ist.
TABLE Aeroaufsatz
• lenkerklemm da der Aeroaufsatz auf den Lenker geklemmt wird, ist es
wichtig zu wissen, fur welche Lenkerdurchmesser der Aufsatz passt.
TABLE Laufraeder
• durchmesser: diese wichtige Spalte gibt an welche Große die Laufrader
haben. Es werden die traditionellen Maße angegeben: 700 (also 700C) fur
28 ” Rader, 650 (also 650C) fur 26 ” Rader.
• reifenart: hier ist festgehalten ob es sich um Draht- oder Schlauchreifen
handelt.
• nabe: ebenfalls ein wichtiger Wert wird in dieser Spalte angegeben. Hier
ist hinterlegt mit welchem der beiden Hersteller fur Schaltgruppen die Nabe
kompatibel ist.
Naheres siehe auch Seite 16.
TABLE Reifen
• durchmesser: in dieser Spalte ist vermerkt fur welche Laufraddurchmesser
die Reifen passen. Auch hier wurden die traditionellen Maße angegeben: 700
(C) und 650 (C)
• breite: dieser Wert dient nur zu Darstellungszwecken und beschreibt fur
welche Laufradbreiten der Reifen geeignet ist.
Diplomarbeit 32
KAPITEL 4. MYSQL DATENBANK
• reifenart: da es zwei verschiedene Reifensysteme gibt, ist es wichtig die Art
des Reifens festzuhalten.
TABLE Kurbelsatz
• kettenblatt: der hier hinterlegte Wert gibt an wie viele Kettenblatter an der
Kurbel sind, bzw. ob es sich um eine so genannte Compact-Kurbel handelt.
• zaehne vorne: gibt die Anzahl der Zahne auf dem großten Kettenblatt an.
Dieser Wert dient nicht nur zu Darstellungszwecken sondern ist auch wichtig
um die”Kapazitat“ des Schaltkafigs bei der Schaltgruppe zu berechnen.
• zaehne mitte: dieser Wert ist nur fur die Darstellung wichtig, und wird
auch nur mit einem Inhalt versehen falls es sich um ein 3-fach Kettenblatt
handelt.
• zaehne hinten: die Anzahl der Zahne des kleinsten Kettenblattes werden
hier gespeichert. Auch dieser Wert wird spater zur Berechnung der Kapazitat
benotigt.
• laenge1: gibt an wie lang die Kurbel von der Mitte zu den Pedalen ist.
Die Angabe ist in mm und da die Hersteller normalerweise mehrere Langen
anbieten, wie hier die kleinste verfugbare Große gespeichert.
• . . .
• laenge7: bis zu sieben verschiedene Langen konnen eingetragen werden, was
aber meistens nicht notwendig ist, da viele Hersteller nur zwei oder drei
Kurbellangen zur Auswahl haben.
• kompatibel: auch hier ist angegeben, mit welchem der beiden Hersteller
fur Schaltgruppen der Kurbelsatz kompatibel ist. Es ist auch moglich, dass
ein Anbieter einen Kurbelsatz anbietet, der fur Shimano und Campagnolo
kompatibel ist.
• innenlager: da diese Komponente unter anderem aus einem Innenlager be-
steht, fur das es zwei Großen gibt, ist es wichtig diesen Wert festzuhalten,
damit nur kompatible Kurbelsatze angezeigt werden.
Diplomarbeit 33
KAPITEL 4. MYSQL DATENBANK
TABLE Schaltgruppe
• kettenblatt: die Anzahl der Kettenblatter des zuvor ausgewahlten Kur-
belsatzes ist fur die Schaltgruppe in so fern relevant, dass fur verschiedene
Kettenblatter verschieden lange Schaltkafige benotigt werden.
• hersteller: dies gibt an mit welcher Marke die Schaltgruppe kompatibel ist.
• kassette min: die Anzahl der Zahne der kleinsten Scheibe am Ritzel. Ein
notwendiger Wert zur Berechnung der”Kapazitat“ der Schaltung.
• kassette max: hier wird die Anzahl der Zahne der großten Scheibe am
Ritzel angegeben. Das dient auch zur Berechnung der”Kapazitat“.
TABLE Bremsen
• Keine weiteren Spalten notwendig.
TABLE Pedale
• Keine weiteren Spalten notwendig.
TABLE Sattelstuetze
• laenge: ein Wert der nur zu Darstellungszwecken dient.
• durchmesser: diese Angabe ist notwendig, damit Sattelstutzen mit dem
richtigen Rohrdurchmesser angezeigt werden.
TABLE Sattel
• Keine weiteren Spalten notwendig.
Diplomarbeit 34
Kapitel 5
Die Progamm-Dateien
5.1 Programmablauf
Zuerst werden die eingegebenen Daten auf der Startseite berechnet und diese dann
abgeschickt. Zuvor werden jedoch mit Hilfe von JavaScript die Angaben uberpruft,
ob sie in einem zulassigen Bereich liegen. Nach dem Abschicken des Formulars wird
die Main.php aufgerufen, bei der es sich um die zentrale Datei handelt.
Verschiedene Variablen und Klassen werden initialisiert, damit am Anfang die
Navigationsleiste, die zur Verfugung stehenden Rahmen, die noch nicht ausgefullte
Ubersichtstabelle und auch schon der Preis/Gewicht-Bereich zu sehen sind. Der
gesamte Konfigurator wird uber die angeklickten Links, die eigentlich immer so
genannte Submit-Buttons von Formularen sind, gesteuert.
Wird ein solcher Button angeklickt, wird dieses in der Main.php registriert, indem
die entsprechenden Post-Variablen abgefragt werden. Je nachdem welcher Ver-
weis aktiviert wurde (oder auch: je nach dem welches Ereignis auftritt), ruft die
Main.php eine andere Funktion der EventHandler Klasse auf. Diese Klasse erkennt
bei welcher Komponente des Rennrades der Konfigurator sich gerade befindet, und
aktiviert die zum Event passende Funktion der zugehorigen Komponentenklasse.
In dieser Klasse werden nun die notigen Session-Variablen gesetzt, bzw. wieder
geloscht.
Diplomarbeit 35
KAPITEL 5. DIE PROGAMM-DATEIEN
Abbildung 5.1: Klassendiagramm
Diplomarbeit 36
KAPITEL 5. DIE PROGAMM-DATEIEN
Manche Aufgaben, wie z. B. das Darstellen der Tabelle, oder das Entfernen von
Komponenten geschehen in der Eltern-Klasse. In den Komponentenklassen werden
nur die spezifisch fur diese Baugruppe notwendigen Aufgaben erledigt. Darunter
fallt das Setzen von Session-Variablen fur die eigene und andere Komponenten, das
Herausfiltern von inkompatiblen Bauteilen oder auch das Fullen der Tabelle mit
den spezifischen Daten. Die Eltern-Klasse, bezeichnenderweise ComponentParent
genannt, ist dagegen fur Aufgaben zustandig, die allgemein fur alle Komponenten
gleich ist. Dazu zahlen das schon erwahnte Darstellen der Tabelle und die Remove-
Routine. In dieser Klasse werden auch die Daten fur Preis und Gewicht aktualisiert.
So werden die Ereignisse, die die einzelnen Komponenten betreffen, auf den Bild-
schirm gebracht. Allerdings ist die EventHandler Klasse noch fur mehr zustandig.
Sie stellt die Navigationsleiste, die Ubersichtstabelle und den Preis/Gewichts-
Bereich dar; es wird gepruft ob alle Komponenten ausgewahlt wurden, damit ein
weiterfuhrender Link zum Showroom erscheint; und es wird der Primary Key aller
ausgewahlten Baugruppen der verschiedenen Rennrader in einem zweidimensiona-
len Array gespeichert.
5.2 Darstellung
In diesem Abschnitt werden die php Dateien behandelt, die sich mit der Darstel-
lung des Konfigurators befassen. Hierbei soll es sich um alles handeln, was auf dem
Bildschirm zu sehen ist, wie die Komponententabelle, die Navigationsleiste oder die
Ubersichtstabelle. Zwar bringen z. B. die einzelnen Komponentenklassen auch In-
formationen auf den Bildschirm, aber deren primare Funktion ist es die Regeln der
Abhangigkeit zwischen den Komponenten anzuwenden. Die EventHandler Klasse
selbst stellt auch viele Informationen dar. Diese werden aber durch die Main.php
oder Showroom.php aufgerufen.
Diplomarbeit 37
KAPITEL 5. DIE PROGAMM-DATEIEN
5.2.1 index.php
Das ist die erste Seite, die der Nutzer zu sehen bekommt. Hier werden die Infor-
mationen abgefragt, die fur den Start des Konfigurators wichtig sind. Notwendige
Angaben sind nur die Korpergroße und die Schritthohe. Die anderen Angaben
werden mittels JavaScript automatisch berechnet. Die ganze index.php besteht im
Grunde aus JavaScript, bis auf die Initialisierung der Session.
Beim ersten Aufrufen der Seite wird mit dem JavaScript Befehl navigator.
cookieEnabled uberpruft, ob der Browser Cookies zulasst. Durch eine if-Abfrage
wird dann bei positivem Ergebnis die eigentliche Seite dargestellt. Sind keine Coo-
kies erlaubt, wird dieses angezeigt, und ein Link zum erneuten Laden der Seite
bereitgestellt.
Die dargestellte Seite ist ein Formular, das beim Abschicken erst die eingegebenen
Werte uberpruft, und ggf. einen Fehler ausgibt. In der CheckFormular() Funktion
werden die Angaben fur Korpergroße, Schritthohe und Rahmenhohe kontrolliert.
Da alle drei Prufungen nach dem gleichen Muster ablaufen, hier als Beispiel nur
den Programmcode fur die Korpergroße:
var ZahlCheckFlag = 1;
if(document.datainput.height.value == "")
{
alert("Bitte Deine Korpergroße eingeben!");
document.datainput.height.focus();
return false;
}
if(document.datainput.height.value >=221 ||
document.datainput.height.value <=130)
{
alert("Unzulassige Korpergroße!")
document.datainput.height.focus();
Diplomarbeit 38
KAPITEL 5. DIE PROGAMM-DATEIEN
return false;
}
for(i=0;i<document.datainput.height.value.length;++i)
if(document.datainput.height.value.charAt(i) < "0" ||
document.datainput.height.value.charAt(i) > "9")
ZahlCheckFlag = -1;
if(ZahlCheckFlag == -1)
{
alert("Korpermaß ist keine Zahl!");
document.datainput.height.focus();
return false;
}
Die erste if-Abfrage testet, ob uberhaupt etwas eingeben wurde. Die nachste Ab-
frage pruft ob sich der eingebende Wert in einem bestimmten Bereich befindet. In
diesem Beispiel sollte das Korpermaß zwischen 1,30m und 2,21m liegen. Der letzte
Test kontrolliert, ob alle Zeichen auch Zahlen sind, da es wenig Sinn ergibt eine
Kopergroße oder Rahmenhohe mit Buchstaben zu versehen. Bei jeder Falscheinga-
be wird das fehlerhafte Feld mit document.datainput.height.focus() hervor-
gehoben, um dem Nutzer die Suche nach diesem Feld zu ersparen.
In der index.php kann der Nutzer auch zwischen Renn- und Triathlonrad wahlen.
Dies hat Auswirkungen auf die angezeigte Rahmenhohe, da dieses Maß beim Tri-
athlonrad einige Zentimeter kleiner ist. Diese Große wird auch dynamisch geandert
sobald der Nutzer einen anderen Radio-Button anklickt. Bewerkstelligt wird dies
mit updateFramesize() und ist ebenfalls mit JavaScript realisiert. Diese Funktion
ruft getBikeType() auf, um festzustellen welcher Radio-Button gerade aktiv ist.
Da diese Buttons die ersten beiden Elemente des Formulars sind, ist es mit Hilfe
von der Abfrage if(document.datainput.elements[X].checked) recht einfach
dies herauszufinden. Wobei X entweder 0 fur das erste Element oder 1 fur das
zweite Element ist. In der Funktion updateFramesize() wird auch updateStem()
Diplomarbeit 39
KAPITEL 5. DIE PROGAMM-DATEIEN
aufgerufen, die schon im Vorfeld die Auswahlmoglichkeiten der Vorbaulange ein-
schrankt.
5.2.2 Main.php
Diese Datei ist dafur zustandig, dass alle Klassen, weitere Dateien, und die Bild-
schirmausgabe”verlinkt“ werden. Deshalb auch der Name Main, da diese php-
Datei alles zusammenfugt. Hier werden auch die notigen Klassen eingefugt und
die Anfangsbedingungen initialisiert. Zuerst werden die aus der index.php uber-
gebenen Daten in Session-Variablen gespeichert, so dass diese fur spatere Berech-
nungen oder Darstellungen verwendet werden konnen. Die Initialisierung ist not-
wendig, damit der Konfigurator immer einen bestimmten Startpunkt hat. So wird
z. B. durch den folgenden Code die Navigationsvariable auf die erste Komponente
(hier: der Rahmen) gesetzt, wobei es egal ist ob die Main.php von der index-Datei
oder von der Showroom.php aufgerufen wird.
if (!empty ($_POST[’size’]) or empty($_SESSION[’nav’]))
{
$navigation = $xm->get_component_from_xml(1);
$sh->register_session(nav, $navigation);
$ev->navbar;
}
Ein anderes Beispiel ware, da es moglich ist bis zu drei Fahrrader zu konfigurieren
und anzeigen zu lassen, dass es notwenig ist am Anfang eine Session-Variable zu
initialisieren, welche speichert wie viele Rader schon konfiguriert wurden.
Anderer Code ist dafur zustandig, dass je nach Event eine andere Funktion aus der
EventHandler Klasse zum Einsatz kommt. Da alles auf dem Bildschirm Anklickba-
re ein HTML-Formular ist, werden diese Events durch Abfrage der entsprechenden
POST-Variablen erfasst.
In der Main.php werden auch alle anderen Funktionen aufgerufen, die Informatio-
nen auf dem Bildschirm darstellen. Meistens sind diese Funktionen ebenfalls in der
Diplomarbeit 40
KAPITEL 5. DIE PROGAMM-DATEIEN
Abbildung 5.2: Diagramm zur index.php
Diplomarbeit 41
KAPITEL 5. DIE PROGAMM-DATEIEN
EventHandler Klasse untergebracht. Zu diesen Aufgaben gehort unter anderem das
Anzeigen der Navigationsleiste, und das Ausblenden dieser, wenn eine zusatzliche
Auswahl zu einer Komponente getroffen werden soll. Die Ubersichtstabelle und die
Preis-/Gewichtsinformationen werden ebenfalls in der Main.php aufgerufen. Des
Weiteren wird in der Main.php uberpruft, ob alle Komponenten ausgewahlt wur-
den (indem wieder eine Funktion aus der EventHandler Klasse aufgerufen wird)
und erst dann ein Link zum so genannten Showroom angezeigt wird.
5.2.3 Showroom.php
Diese php stellt die schon zusammengestellten Fahrrader dar. Sie kann erst vom
Nutzer aufgerufen werden wenn alle Komponenten ausgewahlt wurden. Es wer-
den drei Tabellen angezeigt, die der Ubersichtstabelle auf der Hauptseite gleichen.
Um diese Tabellen mit Daten zu fullen wird ein zweidimensionales Array ausge-
lesen, in dem der Unique-Key jedes Rades und jeder ausgewahlten Komponente
gespeichert ist. Dieses Array wird in der EventHandler Klasse gefullt und nach
jeder Auswahl aktualisiert. Ebenso gibt es fur den Gesamtpreis und das Gewicht
ein separates zweidimensionales Array in dem diese Daten gespeichert werden.
Das Array wird auch in der Showroom.php ausgelesen und entsprechend auf dem
Bildschirm prasentiert.
Die Daten aus dem Array mit dem Unique-Key der Komponenten werden dann
in der Datei benutzt, um den Namen und Preis aus der Datenbank auszulesen.
Bei Gesamtpreis und -gewicht ist dies nicht notwendig, das es sich hierbei nur um
Session-Variablen handelt.
So lange noch nicht alle drei Renn- oder Triathlonrader konfiguriert sind, wird ein
Link dargestellt, mit dem der Nutzer wieder zuruck zur Hauptseite gelangen kann,
um ein weiteres Rad zu konfigurieren. Wurden alle drei Rader zusammengestellt,
wird dieser Link nicht mehr angezeigt, und der Prototyp des Konfigurators endet
hier.
Diplomarbeit 42
KAPITEL 5. DIE PROGAMM-DATEIEN
5.3 XML
5.3.1 XML-Datei
Beim Erstellen der Form der XML-Datei, wie sie im Konfigurator gewunscht ist,
traten mehr Probleme auf, als vorhergesehen war. Zum einen mussten die notigen
Informationen untergebracht werden, und zum anderen musste die Struktur der
Abhangigkeiten berucksichtigt werden. Ein Beispiel fur diese Struktur ist, dass es
einen Zusammenhang von den Komponenten Gabel, Vorbau, Lenker und Aeroauf-
satz gibt. Mochte ein Nutzer, nachdem er diese vier Komponenten ausgewahlt hat,
z. B. die Gabel andern, so muss gleichzeitig die Auswahl der anderen drei Kompo-
nenten ruckgangig gemacht werden, da durch eine andere Gabel evtl. der Vorbau
und dadurch evtl. der Lenker usw. nicht mehr zusammenpassen. Diese im Beispiel
genannte Struktur muss in die XML ubertragen werden. Allerdings sollte das Aus-
lesen der Daten nicht zu kompliziert werden. Das heißt, die Ebenen sollten nicht
zu sehr in die Tiefe gehen, da sonst der Code zum Extrahieren zu unubersichtlich
werden wurde.
Nach ersten Uberlegungen wurde eine XML-Datei erstellt, die zwar genau die
Struktur des Konfigurators wiedergab, aber, wie sich im Nachhinein herausstellte,
dennoch Informationen fehlten. Dieses hier ist ein Codefragment aus dem ersten
Entwurf:
...<Path2><Component03>
<ArtNr>ArtNrFork</ArtNr><Component04>
<ArtNr>ArtNrStem</ArtNr><Component05>
<ArtNr>ArtNrBar</ArtNr><Component06>
<ArtNr>ArtNrAero</ArtNr></Component06>
</Component05></Component04>
</Component03>...</Path2>
Diplomarbeit 43
KAPITEL 5. DIE PROGAMM-DATEIEN
Also wurden nach dem ersten Entwurf die Daten erganzt, die wichtig erschienen.
Dies beschrankte sich zunachst darauf, dass zur besseren Extrahierung der Kom-
ponenten und Pfade, die Tags mit einer ID versehen wurden. Danach sah es in der
XML-Datei so aus:
...<Path id="02"><Component id="03">
<ArtNr>ArtNrFork</ArtNr><Component id="04">
<ArtNr>ArtNrStem</ArtNr>...
Doch nach einigem Arbeiten mit dem Code, das die Daten auslesen sollte, stand
fest, dass es zum einen zu viele Ebenen gab, und somit der Code unubersichtlich
und kompliziert wurde, und zum anderen, dass dort noch weitere Daten eingefugt
werden konnen und sollen. Der nachste Entwurf hatte also dementsprechend we-
nige Ebenen und versuchte auch die geforderte Struktur widerzuspiegeln:
<Konfigurator><Component id="01">
<path>0</path><ArtNr>ArtNrFame</ArtNr>
</Component><Component id="02">
<path>1</path><ArtNr>ArtNrHeadset</ArtNr>
</Component><Component id="03">
<path>2</path><ArtNr>ArtNrFork</ArtNr>
</Component><Component id="04">
<path>2</path><ArtNr>ArtNrStem</ArtNr>
</Component>...
Im finalen Entwurf, wurde die XML nicht vereinfacht, aber dennoch so gehalten,
dass die Daten relativ leicht ausgelesen werden konnten. Zusatzlich wurde die
geforderte Struktur noch hervorgehoben und weitere Daten hinzugefugt, die sich
Diplomarbeit 44
KAPITEL 5. DIE PROGAMM-DATEIEN
letztendlich als sehr hilfreich, wenn nicht sogar als unverzichtbar herausgestellt
haben. Ein Teil dieser XML sieht nun so aus:
<Konfigurator><Path id="00">
<Component id="01"><Name>Rahmen</Name><Unique>ArtNrFrame</Unique><Additional></Additional>
</Component><Path id="01">
<Component id="02"><Name>Steuersatz</Name><Unique>ArtNrHeadset</Unique><Additional></Additional>
</Component></Path><Path id="02">
<Component id="03"><Name>Gabel</Name><Unique>ArtNrFork</Unique><Additional></Additional>
</Component><Component id="04">
<Name>Vorbau</Name><Unique>ArtNrStem</Unique><Additional>StemLength</Additional>
</Component>...<Component id="06">
<Name>Aeroaufsatz</Name><Unique>ArtNrAero</Unique><Additional></Additional>
</Component></Path>
...</Path>
</Konfigurator>
Wie sich erkennen lasst, umfasst der Pfad mit der ID-Nummer 00 alle Baugruppen.
Die anderen Pfade beinhalten lediglich die entsprechende Gruppe von Komponen-
ten, was - wie schon Eingangs erwahnt - das Entfernen von Komponenten relativ
einfach macht. Die Inhalte der Tags mit dem Namen Unique konnen naturlich frei
Diplomarbeit 45
KAPITEL 5. DIE PROGAMM-DATEIEN
gewahlt werden, sollten aber nicht doppelt vorkommen, da dieser Name in den
php-Skripten als Session-Variable zum speichern des Primary Keys aus der Daten-
bank verwendet wird. Der dritte Tag innerhalb eines Component mit dem Namen
Additional ist fur zusatzliche Informationen gedacht, die nicht bei jeder Kompo-
nente vorkommen. Im Fall dieses Konfigurators wird nur bei dem Vorbau und bei
dem Kurbelsatz der Additional-Tag gebraucht, um die Vorbau- bzw. Kurbellange
in Session-Variablen zu speichern.
5.3.2 XML-Handler Klasse
Die Klasse ist nicht nur fur das Extrahieren von Daten aus der XML-Datei zustandig,
sie fuhrt auch ein paar Operationen zum Testen durch. Aufgerufen wird die Klasse
mit einem Parameter, der den gewunschten Dateinamen enthalt. Im Konstruktor
wird dann mittels der Funktion simple load xml() die XML-Datei als mehrdi-
mensionales assoziatives Array geladen, und so sind die darin enthaltenen Daten
relativ leicht zu lesen.
Eine der oben angesprochenen Test-Funktionen ist die test set. Sie uberpruft
ob alle vorherigen Komponenten in dem Pfad (vgl. Abschnitt 3.1 auf Seite 19)
gesetzt sind, so dass die Komponententabelle mit den kompatiblen Bauteilen an-
gezeigt werden kann. Dieser Funktion werden zwei Werte ubergeben: die Num-
mer des Pfades, in der sich die zu testende Komponente befindet und an welcher
Stelle innerhalb des Pfades sie steht. Durch verschiedene foreach-Schleifen und
if-Abfragen wird dann mit dem Programm fortgefahren oder eine entsprechende
Meldung auf dem Bildschirm erscheint, die besagt dass eine andere Komponente
vorher gewahlt werden muss.
Die restlichen Methoden sind zum Auslesen der Daten aus der XML-Datei. Es gibt
jeweils Funktionen zum extrahieren des Komponentenamens, der Komponenten-
ID, des Unique-Wertes (also der Artikelnummer) oder der Pfad-ID. Eine dieser
Funktionen ist die get component from xml, die den Komponentennamen aus der
XML liest. Die zu ubergebenen Werte sind die Nummer des Bauteils und optional
einen Parameter der angibt in welcher Form dieser Name zuruckgegeben werden
soll. Um den gewunschten Namen zu finden wird ebenfalls mit foreach-Schleifen
Diplomarbeit 46
KAPITEL 5. DIE PROGAMM-DATEIEN
und if-Abfragen das Array der eingelesenen XML-Datei durchlaufen. Der optio-
nale Parameter gibt an, ob der Name mit oder ohne Umlaute zuruckgegeben wird.
Zum Beispiel konnte Laufrader oder Laufraeder ausgegeben werden. Dieses zu im-
plementieren war notwendig, da die MySQL Datenbank keine deutschen Umlaute
in den Table-Namen erlaubt. So werden alle XML-Funktionen, die Table-Namen
verarbeiten, mit diesem optionalen Parameter aufgerufen, um der Namenskonven-
tion von MySQL gerecht zu werden.
Eine Funktion durchsucht den Pfad (dessen Pfad-ID ubergeben werden muss) und
gibt als Array die in diesem Pfad enthaltenen Komponentennummern zuruck. Die-
se Operation ist notwendig damit bei dem Entfernen einer Komponente auch alle
nachfolgenden Bauteile geloscht werden. Die weiteren Funktionen sind alle ahnlich
aufgebaut, da die Struktur der XML sich naturlich nicht andert. Es gibt verschiede-
ne Funktionen, die die gleichen Daten extrahieren, aber andere Parameter haben.
So lesen die beiden Funktionen get key from xml und get key from name jeweils
den Unique-Key einer Komponente aus, bei der einen wird jedoch die Komponen-
tennummer ubergeben, bei der anderen der Komponentenname (vgl. Abschnitt
6.4.1 auf Seite 70.
Als Beispiel folgt nun der Code einer dieser Funktionen:
public function get_id_from_name ($name) {
foreach ($this->XML->Path as $path)
{
foreach ($path->Component as $component)
{
if ($name == utf8_decode($component->Name))
{
return utf8_decode($component->attributes());
}
}//end-foreach
foreach ($path->Path as $innerpath)
{
foreach ($innerpath->Component as $component)
Diplomarbeit 47
KAPITEL 5. DIE PROGAMM-DATEIEN
{
if ($name == utf8_decode($component->Name))
{
return utf8_decode($component->attributes());
}
}
}//end-foreach
}//end-foreach
}//end-function
Die hier dargestellte Funktion sucht die dazugehorige Nummer des angegebenen
Komponentennamens. In den ersten beiden foreach-Schleifen wird die oberste
Ebene der Pfade durchlaufen. In dem Fall der XML-Datei des Rennrad-Konfigurators
ist es nur die Komponente Rahmen, die in der obersten Ebene zu finden ist (siehe
Seite 44 fur den XML-Aufbau). In den nachsten beiden foreach-Schleifen werden
die unteren Ebenen der Pfade durchsucht. Da es in dieser XML nur zwei Ebenen
von Pfaden gibt, ist es meiner Ansicht nach nicht notwendig gewesen, diese rekursiv
zu realisieren. Sollten weitere Pfad-Ebenen erforderlich sein, so ware es bestimmt
ubersichtlicher diese Funktion rekursiv zu programmieren. Wurde der gewunschte
Komponentenname gefunden, so wird die entsprechende Nummer zuruckgegeben.
Die Operation utf8 decode ware hier nicht unbedingt notwendig, aber bei Namen
ist dies unerlasslich, da sonst die Zeichen nicht richtig dargestellt werden.
5.4 Event-Handler Klasse
Die Event-Handler Klasse war ursprunglich nur dazu gedacht die Ereignisse zu ver-
arbeiten. Mit Ereignissen sind z. B. Klicks auf die Navigationsleiste, den Auswahl-
Button oder die Entfernen-Schaltflache gemeint. Allerdings sind im Laufe der Ent-
wicklung mehrere Funktionen hinzugekommen, die auch zur Darstellung auf dem
Bildschirm oder Verarbeitung von Daten dienen.
Diplomarbeit 48
KAPITEL 5. DIE PROGAMM-DATEIEN
5.4.1 Die Ereignisse
Es gibt insgesamt 5 Ereignisse, die auftreten konnen, und jedes mal einen Klick
auf einen so genannten Submit-Button bedeuten. Diese Events waren ein Klick
auf die Navigationsleiste, auf den Neustart Link und auf den Auswahlen- oder
Entfernen Knopf. Bei zwei Komponenten gibt es noch ein Ereignis, bei der eine
zusatzliche Auswahl erscheint. Jedes Event wird in der Main.php registriert und
an die EventHandler Klasse weitergeleitet. Dort wird mittels der get-Funktion
dieses Ereignis an die entsprechende Funktion verteilt und ausgefuhrt. Als Beispiel
folgt ein Teil des Programmcodes. Zuerst wird ein Event in der Main.php erfasst:
if (isset($_POST[’navigation’]))
$ev->navbar;
Dadurch wird die EventHandler Klasse aufgerufen und somit auch die get-
Funktion:
public function __get($event)
{
$method = "handle_".$event."_click";
if (is_callable(array($this, $method)))
{
$this->{$method}();
}
}
So werden alle Events zu den entsprechenden Funktionen weitergeleitet. Jedes
dieser Funktionen ist nach dem Muster handle (der Eventname) click benannt. In
diesen Fall ware es: public function handle navbar click().
Eine Beschreibung wie diese Funktionen im Einzelnen programmiert wurden und
wie sie arbeiten wurde den Rahmen dieses Unterpunktes sprengen. Sie werden im
Abschnitt 6.1 naher erklart.
Diplomarbeit 49
KAPITEL 5. DIE PROGAMM-DATEIEN
5.4.2 Weitere Funktionen
Unter den weiteren Funktionen sind all die zusammengefasst, die sich um Daten-
auswertung oder Darstellung auf dem Bildschirm kummern. Eine sehr wichtige
Funktion ist navibar, die fur die Erstellung der Navigationsleiste zustandig ist.
Hier werden zwei Werte ubergeben: einmal bei welcher Position die Leiste starten
soll, und einmal die Anzahl nach der die rekursive Funktion abgebrochen wer-
den soll. Innerhalb der Funktion wird abgefragt, ob es sich um ein Rennrad, oder
um ein Triathlonrad handelt, das konfiguriert werden soll, damit bei Ersterem die
Komponente Aeroaufsatz nicht angezeigt wird. Des Weiteren wird uberpruft ob
die entsprechende Komponente schon ausgewahlt wurde. Falls dies der Fall ist,
wird das Feld fur dieses Bauteil farblich hinterlegt.
Eine Funktion innerhalb der EventHandler Klasse ist fur das Darstellen der Uber-
sichtstabelle zustandig und heißt bezeichnenderweise auch overview table. Sie
wird auch aus der Main.php aufgerufen, und geht alle Komponenten der Reihe
nach durch, um zu uberprufen ob diese ausgewahlt wurden. Ist das der Fall, wird
anhand der Artikelnummer, die auch gleichzeitig der Primary Key ist, der Arti-
kelname und Preis aus der Datenbank gelesen und in der Tabelle angezeigt. Es
sind noch weitere Uberprufungen notwendig, wie etwa der Test ob es sich um ein
Renn- oder Triathonrad handelt und dem entsprechend die Komponente Aeroauf-
satz gehandhabt wird, oder ob eine Komponente durch die Auswahl eines anderen
Bauteils schon vorhanden ist.
overview price ist eine ahnliche Funktion, die allerdings nur fur den Gesamt-
preis und -gewicht zustandig ist. Da bei der Speicherung des Sessionwertes keine 0
(Null) ubergeben werden kann, muss in dieser Funktion dieses berucksichtigt und
uberpruft werden. So wird bei einem nicht gesetzten Sessionwert explizit 0.00e
bzw. 0 g angegeben.
Eine weitere Aufgabe, die die Klasse EventHandler ubernimmt, ist nachzuprufen
ob alle Komponenten ausgewahlt wurden, damit ein weiterfuhrender Verweis zu
dem Showroom (vgl. Seite 26 bzw. Seite 42) erscheint. Auch diese Funktion hat
einen entsprechenden Namen, der verdeutlicht wozu sie gebraucht wird: check if all
set(). Hierzu werden alle vorhandenen Komponenten mit dem Befehl $this->
Diplomarbeit 50
KAPITEL 5. DIE PROGAMM-DATEIEN
xml->get ids in path(’00’) in ein Array geladen, um dann alle Elemente mit
einer foreach-Schleife durchzugehen. Sobald eine Komponente nicht gewahlt wur-
de, wird die Schleife abgebrochen und ein false zuruckgegeben. Wenn die Schleife
aber komplett durchlaufen wird, so erscheint auf dem Bildschirm der weiterfuhren-
de Link, da ein true zuruckgegeben wurde.
Die letzte Funktion, die keine Ereignisse verarbeitet, heißt save item. Es wer-
den hier die Artikelnummern der ausgewahlten Komponenten gespeichert. Da
es moglich ist, bis zu drei Fahrrader zu konfigurieren, und alle spater in dem
Showroom dargestellt werden sollen, werden alle Artikelnummern in ein zwei-
dimensionales Array gespeichert, damit diese Informationen auch spater noch
verfugbar sind. Wie dies geschieht soll hier verdeutlicht werden:
public function save_item() {
$num = ($_SESSION[’number’]-1);
$ids = $this->xml->get_ids_in_path(’00’);
foreach ($ids as $single_id)
{
$all[$num][$single_id] =
$_SESSION[$this->xml->get_key_from_xml($single_id)];
}
if ($num > 0)
{
$all = $all + $_SESSION[’all’];
}
$this->session->register_session(all, $all);
...
}
Die Sessionvariable number beinhaltet die Nummer des aktuell konfigurierten Ra-
des. Da keine 0 (Null) gespeichert werden kann, fangt number bei eins an. Die Varia-
ble $num sollte allerdings wegen dem Array bei 0 (Null) anfangen. In der nachsten
Zeile werden wieder alle vorhanden Komponenten-IDs in ein (ein-dimensionales)
Diplomarbeit 51
KAPITEL 5. DIE PROGAMM-DATEIEN
Array gespeichert. Mit der foreach-Schleife werden nun alle Bauteile nacheinan-
der durchgegangen und mittels der Komponenten-ID die Artikelnummer aus den
jeweiligen Sessionvariablen im zwei-dimensionalen Array gespeichert. Die nachste
Abfrage ob $num großer Null sei, ist notwendig, da sonst Fehlermeldungen vom
php-Parser auftreten, weil dort zwei Arrays zusammengefugt werden. Schließlich
wird das Array in einer Sessionvariable gespeichert, damit die Informationen er-
halten bleiben.
In der Funktion werden auch Gesamtpreis und Gesamtgewicht in ein separates
zwei-dimensionales Array gespeichert, da auch diese Angaben fur alle Fahrrader
im Showroom benotigt werden.
Diplomarbeit 52
Kapitel 6
Das Programm aus Sicht des
Entwicklers
In diesem Kapitel soll naher und detaillierter auf den Programmcode eingegan-
gen werden. Es werden die Zusammenhange zwischen den Klassen und einzelnen
Funktionen erlautert, und teilweise wie der Code genau funktioniert.
6.1 Events
In diesem Unterkapitel geht es um die Ereignisse, die bei dem Konfigurator auftre-
ten konnen. Insgesamt sind es funf Events die den gesamten Konfigurator steuern.
Ihre groben Funktionen wurden schon in Abschnitt 5.4.1 angesprochen. Dort wur-
de auch gezeigt, wie die Ereignisse in der EventHandler Klasse aufgerufen werden.
Hier soll noch einmal in detaillierter Form darauf eingegangen werden, was genau
in den einzelnen Funktionen passiert, da die Ereignisse ein unverzichtbarer Be-
standteil des Konfigurators sind.
Diplomarbeit 53
KAPITEL 6. DAS PROGRAMM AUS SICHT DES ENTWICKLERS
6.1.1 Navigation
Nachdem der Nutzer auf die Navigationsleiste klickt, wird in der EventHandler
Klasse die handle navbar click-Funktion aufgerufen (vgl. Seite 49). Innerhalb
dieser Funktion wird dann die entsprechende Komponentenklasse aufgerufen. Die
Komponentenklassen wurden in der Main.php mit den Variablen $c01, $c02, . . .
fur jede Komponente initialisiert.
function handle_navbar_click()
{
if(empty($_SESSION[’nav’]))
$num = ’01’;
else
$num = $this->xml->get_id_from_name ($_SESSION[’nav’]);
eval(’global ${c.$num};’);
${c.$num}->display();
}
Die erste Abfrage uberpruft, ob die Session-Variable, die die aktuelle Komponen-
te speichert, uberhaupt gesetzt ist. Falls es nicht so ist, dann wird die Variable
$num auf 01 gesetzt, damit die Daten fur die erste Komponente dargestellt werden
konnen.
Beinhaltet die Session-Variable nav einen Wert, so wird die zugehorige Komponen-
ten-ID aus der XML-Datei gelesen. Da der gespeicherte Wert in der Session-
Variable stets mit den Komponentennamen in der XML ubereinstimmt, ist dieses
Vorgehen ohne Probleme moglich.
Durch den Befehl eval(’global ${c.$num};’); ist es moglich auf die Methoden
der Komponentenklasse innerhalb der EventHandler Klasse zuzugreifen, da die
Instanz der Komponentenklasse global verfugbar gemacht wird. So ist dann auch
die display()-Funktion problemlos aufrufbar [Tut05].
Das ${c.$num} ist eine so genannte”variable Variable“. Je nach der aus der XML
ausgelesenen Komponenten-ID, wird eine andere Komponentenklasse aufgerufen.
Diplomarbeit 54
KAPITEL 6. DAS PROGRAMM AUS SICHT DES ENTWICKLERS
6.1.2 Entfernen
Zuerst wird die handle remove click-Funktion aufgerufen, und danach die ent-
sprechende Komponentenklasse. Dies geschieht nach dem gleichen Mechanismus,
wie bei der handle navbar click-Funktion. Mit dem Befehl ${c.$num}->remove(); wird die entsprechende Funktion in der Komponentenklasse aufgeru-
fen, die je nach Komponente sofort in der Elternklasse die Remove-Routine aufruft,
oder vorher noch bestimmte Session-Variablen entfernt, wie z. B. die Schaltgruppen-
Marke. Durch ${c.$num}->display(); werden dann sofort die kompatiblen Kom-
ponenten wieder angezeigt. Mit dem anschließenden Befehl $this->save item();
werden die aktuellen Daten in ein zwei-dimensionales Array gespeichert (siehe Seite
51).
6.1.3 Auswahl
Auch die handle choice click-Funktion ist ahnlich aufgebaut und wird genau
so wie die anderen Methoden aufgerufen. Es wird erst die entsprechende Kompo-
nentenklasse aus der Navigations-Session-Variable ermittelt und global verfugbar
gemacht. Danach wird die Funktion ${c.$num}->set session() aufgerufen, die
innerhalb der Komponentenklasse die Session-Variable fur die Komponente und
andere Variablen setzt. Um zu verhindern, dass ein mehrmaliges Klicken auf den
Auswahl-Button einen Effekt hat, muss eine if-Abfrage dieses testen. Außerdem
darf es nicht passieren, dass ein anderer Artikel gewahlt werden kann, ohne dass
vorher der Entfernen-Button angeklickt wurde. Durch diese Abfrage wird das rea-
lisiert:
if (empty($_SESSION[$this->xml->get_key_from_xml($num)]) or
$_POST[$this->xml->get_key_from_xml($num)] !=
$_SESSION[$this->xml->get_component_from_xml($num)])
{
${c.$num}->set_session();
}
Diplomarbeit 55
KAPITEL 6. DAS PROGRAMM AUS SICHT DES ENTWICKLERS
Es werden hier zwei Dinge uberpruft. Zum einen ob die Session-Variable uberhaupt
gesetzt ist, denn ist das nicht der Fall, so wurde diese Komponente vorher noch
nicht ausgewahlt und es ist somit zulassig die entsprechenden Variablen zu setzen.
Die zweite Uberprufung nach dem or testet, ob der gerade ausgewahlte Arti-
kel nicht identisch mit der schon gespeicherten Komponente ist. Dadurch wird
gewahrleistet, dass alle Klicks auf den Auswahl-Button dieser Komponente igno-
riert werden, solange nicht vorher dieses Bauteil wieder entfernt wird.
6.1.4 Zusatzliche Auswahl
Damit die Komponententabelle nicht zu lang und unubersichtlich wird, war es
notwendig eine zusatzliche Auswahl fur die Langen bestimmter Komponenten zu
implementieren (vgl. Abschnitt 3.2.2 auf Seite 23).
Grundsatzlich unterscheidet sich die handle additional click nicht von der
handle choice click-Funktion. Es wird ebenfalls die gleiche if-Abfrage benutzt
um mehrmaliges Anklicken des Auswahl-Buttons zu verhindern. Der einzige Un-
terschied besteht darin, dass nach dem Befehl ${c.$num}->set session() noch
ein ${c.$num}->additional() folgt, in dessen Funktion dann die zusatzliche Aus-
wahl in der dazugehorigen Komponentenklasse abgehandelt wird.
6.1.5 Reset
Diese Funktion ist dafur zustandig, dass nach dem Klicken des Neustart-Buttons
alle relevanten Session-Variablen geloscht werden. Auch hier lauft der Aufruf der
Methode nach diesem Event nach dem gleichen Muster ab, wie bei den Anderen.
Im Grunde ist der Vorgang des Neustarts ahnlich dem des Loschens des Rahmens :
Alle Komponenten-Session-Variablen werden geloscht. Dennoch werden hier noch
zusatzliche Variablen, wie Gesamtpreis und -gewicht geloscht, wahrend diese Daten
beim Entfernen des Rahmens nur neu berechnet werden.
Der Aufruf aus der Main.php lautet hier im Ubrigen $ev->reset und somit die
Funktion in der EventHandler Klasse handle reset click(), da das Wort reset
schon fur eine andere Funktion reserviert ist.
Diplomarbeit 56
KAPITEL 6. DAS PROGRAMM AUS SICHT DES ENTWICKLERS
public function handle_reset__click()
{
eval(’global $c01;’);
$ids = $this->xml->get_ids_in_path(’00’);
foreach ($ids as $single_id)
{
if (1 <= $single_id)
{
$this->session->unregister_session(
$this->xml->get_key_from_xml($single_id));
}
}
$this->session->unregister_session(brand);
$this->session->reset_sessionvalue(weight);
$this->session->reset_sessionvalue(price);
$this->session->unregister_session(nav);
$navigation = $this->xml->get_component_from_xml(1);
$this->session->register_session(nav, $navigation);
$c01->display();
$this->save_item();
}
Zuerst wird die Instanz der Komponentenklasse global verfugbar gemacht, so dass
auf die Funktionen dieser Klasse innerhalb der EventHandler Klasse darauf zu-
gegriffen werden kann. Hier wird nur die Komponentenklasse des Rahmens auf-
gerufen, da nach einem Neustart in jedem Fall der Rahmen als erstes benotigt
wird. Dann werden alle vorhandenen Komponenten-IDs in ein Array geladen, da-
mit sie mit einer foreach-Schleife bequem abgearbeitet werden konnen. In der
darauf folgenden Schleife werden die gesamten Komponenten-Session-Variablen
Diplomarbeit 57
KAPITEL 6. DAS PROGRAMM AUS SICHT DES ENTWICKLERS
geloscht, und in den nachsten vier Zeilen die anderen relevanten Variablen, wie
Preis, Gewicht oder Navigation. Danach wird in den beiden folgenden Zeilen die
Navigation auf dem Rahmen gesetzt und mit dem Befehl $c01->display() wird
die Komponententabelle dargestellt. Anschließend wird noch das Ganze im zwei-
dimensionalen Array aktualisiert durch die $this->save item()-Instruktion.
6.2 Komponentenklassen
Jede Komponente hat ihre eigene Klasse, da jedes Bauteil verschiedene Anforde-
rungen mit sich bringt, bzw. verschiedenste Abhangigkeiten haben. Dies konnte am
besten und am ubersichtlichsten gestaltet werden, indem jede Komponente ihre ei-
gene Klasse bekam, in der die Bauteilspezifischen Eigenheiten bearbeitet werden
konnen. Wie schon in Abschnitt 6.1.1 beschrieben, haben die Klassen, wegen der
einfacheren Bearbeitung, eine bestimmte Objektvariable. Die Erzeugung der vier-
zehn Komponenten-Objekte geschieht in der Main.php und sieht folgendermaßen
aus:
for ($i = 1; $i < 15; $i++)
{
$num = sprintf("%02d", $i);
$com_function = "Component".$num;
${c.$num} = new $com_function($db,$sh,$xm);
}
Hier wird eine Schleife durchlaufen, in der z. B. bei der Erzeugung des Objekts fur
Component01 die Variable $c01 zugewiesen wird. Das geschieht bei allen vierzehn
Komponenten. An den Constructor (in der Elternklasse) werden die Referenzen
zu den Objekten des DBHandlers, des SessionHandlers und des XMLHandlers
ubergeben, damit die Funktionen dieser Klasse auch innerhalb der Komponenten-
klassen verfugbar sind.
Diplomarbeit 58
KAPITEL 6. DAS PROGRAMM AUS SICHT DES ENTWICKLERS
Aufgrund der vielen verschiedenen Anforderungen jeder Komponente, beinhaltet
jede Klasse zwar Funktionen, die bei jedem Bauteil gleich sind, aber andere Fahr-
radelemente haben zusatzliche Funktion, die fur besondere Aufgaben benotigt wer-
den. Als Beispiel sei die additional info-Funktion genannt, die nur bei ein paar
Komponenten gebraucht wird, und einen kleinen Infotext auf dem Bildschirm an-
zeigt.
Naturlich ist der Inhalt der gemeinsamen Funktion je nach Anforderung der Kom-
ponente verschieden. Da es den Umfang einer Diplomarbeit ubersteigen wurde,
wird aber darauf verzichtet den Code jeder einzelnen Funktion jeder Komponen-
tenklasse eingehend zu beschreiben. Nur auf die generellen Aufgaben mit kleinen
Code-Beispielen so hier eingegangen werden.
6.2.1 Funktion set session
Innerhalb dieser Funktion wird dafur gesorgt, dass die eindeutige Artikelnummer
in den entsprechenden Session-Variablen gespeichert wird. Des Weiteren werden
bei Bedarf weitere Session-Variablen gesetzt, so z. B. wenn der Rahmen schon
mit einer Gabel geliefert wird. Bei jedem Klick auf den Auswahl-Button wird die
eindeutige Artikelnummer als POST-Variable ubergeben. Durch diese Befehlsfolge
wird zuerst abgefragt ob die POST-Variable uberhaupt gesetzt ist, um dann in der
Session-Variable gespeichert zu werden. In diesem Beispiel wird die Artikelnummer
der ersten Komponente, also des Rahmens, gespeichert.
$component01 = isset($_POST[$this->xml->get_component_from_xml(1)])
? $_POST[$this->xml->get_component_from_xml(1)]
: ’’;
$this->session->register_session($this->xml->get_key_from_xml(1),
$component01);
Dieser Teil wird in jeder Komponentenklasse ausgefuhrt. Das Folgende wird nur
angewendet, wenn eine Komponente Auswirkungen auf andere Bauteile hat.
Diplomarbeit 59
KAPITEL 6. DAS PROGRAMM AUS SICHT DES ENTWICKLERS
Die nachste Instruktion dient dazu anhand der Artikelnummer den gesamten Da-
tensatz aus der Datenbank zu lesen und lautet $choice = $this->db->
GetComponentArray($ SESSION[$this->xml->get key from xml(1)],
$this->xml->get component from xml(1)). Der Befehl GetComponentArray hat
zwei Argumente. Das Erste ist der Name, den die Session-Variable erhalt, also die
eindeutige Artikelnummer. Das zweite Argument ist der Name der Table, in dem
der Artikel gespeichert ist. Das zuruckgegebene Ergebnis ist ein Array, in dem die
Werte aus der Datenbank nacheinander abgelegt sind.
Danach werden, je nach Komponente und Artikel, die anderen Session-Variablen
gesetzt. Um bei dem Beispiel des Rahmens zu bleiben, wird dann abgefragt ob
andere Komponenten bei diesem Rahmen schon vorhanden sind. Dafur werden die
aus der Datenbank ausgelesenen Informationen verwertet.
if ($choice[8] == 1)
{
$this->session->register_session(
$this->xml->get_key_from_xml(3), ’Vorhanden’);
}
else if ($choice[8] == 0 and
$_SESSION[$this->xml->get_key_from_xml(3)] === ’Vorhanden’)
{
$this->session->reset_sessionvalue(
$this->xml->get_key_from_xml(3));
}
Hier wird in der if-Abfrage uberpruft ob der ausgewahlte Rahmen schon eine Ga-
bel besitzt. Falls das so ist, wird die Session-Variable fur die Gabel mit dem Wert
”Vorhanden“ besetzt.
Die nachste Abfrage gilt dafur wenn ein Rahmen, der eine Gabel besitzt, aus-
gewahlt, dann aber geloscht wird, und danach ein Rahmen ohne Gabel gewahlt
wird. Das”Vorhanden“ wird aus der Session-Variable geloscht wenn der gewahlte
Rahmen keine Gabel besitzt und wenn diese Variable mit”Vorhanden“ belegt ist.
So ahnlich funktioniert es bei jeder Komponente, die Auswirkungen auf andere
Diplomarbeit 60
KAPITEL 6. DAS PROGRAMM AUS SICHT DES ENTWICKLERS
Bauteile hat. Dabei muss es nicht nur darum gehen, ob eine andere Komponen-
te vorhanden ist oder nicht, sondern auch welche Schaltgruppenmarke verwendet
wird.
Der nachste Befehl parent::update it($this->xml->get id from name
($ SESSION[’nav’]), 1) wird auch in jeder Komponentenklasse verwendet, denn
er aktualisiert den Gesamtpreis bzw. -gewicht. Die Ausfuhrung wird durch die El-
ternklasse erledigt. Die beiden Argumente, die ubergeben werden, sind zum einen
die Komponenten-ID, und zum anderen das Vorzeichen. D.h. das Vorzeichen be-
stimmt ob der Betrag zum Gesamtergebnis addiert oder davon subtrahiert wird.
6.2.2 Funktion display
Dieses ist wohl die wichtigste Funktion im Programm des Konfigurators. Nicht
nur, weil hier die Komponententabelle mit den Auswahl- und Entfernen-Buttons
erzeugt wird, sondern auch weil in dieser Funktion die nicht kompatiblen Bauteile
ausgefiltert werden. Deshalb mag der Funktionsname etwas in die Irre fuhren, da
hier mehr geleistet wird als nur das Darstellen. Als Beispiel, an dem die Funktionen
erklart werden sollen, sei hier die Komponente 13 (die Sattelstutze) aufgefuhrt, da
dort zwar alle wichtigen Aufgaben vorkommen, aber dennoch diese Funktion nicht
zu kompliziert ist, und zu viel Code enthalt.
Bei jedem Klick auf die Navigationsleiste wird, bevor die Komponententabelle
dargestellt wird, eine Uberprufung gestartet, ob die vorangegangenen Komponen-
ten dieses Pfades schon ausgewahlt wurden. Dieses geschieht durch eine einfache
if-Abfrage und lautet in diesem Beispiel if ($this->xml->test set(4,1)). Die
beiden Argumente in der Funktion zeigen an, dass dies der vierte Pfad, und die Sat-
telstutze darin die erste Komponente ist. Also muss hier nur der Rahmen gewahlt
sein, damit die Komponententabelle fur dieses Bauteil angezeigt wird.
Als nachstes werden die Daten des ausgewahlten Rahmens mittels der schon be-
kannten Funktion GetComponentArray in ein Array geladen. Die Sattelstutze ist
von den Vorgaben des Rahmens abhangig (vgl. Abschnitt 2.2) und deshalb ist es
notwendig diese Daten zu ermitteln. Der Rest der display-Funktion besteht aus
Diplomarbeit 61
KAPITEL 6. DAS PROGRAMM AUS SICHT DES ENTWICKLERS
einer if-else-Abfrage, in der gepruft wird, ob der vorher ausgewahlte Rahmen
nicht schon eine Sattelstutze besitzt, in dem der Ausdruck if ($FrameRow[10] >
90) verwendet wird. In der Datenbank ist an dieser Stelle normalerweise der Durch-
messer vermerkt. Ist dieser Wert aber uber 90, so interpretiert das Programm es
aber als eine schon vorhandene Sattelstutze. Ahnliche Abfragen gibt es auch fur
den Aeroaufsatz, die Gabel oder den Steuersatz. Ist diese if-Abfrage wahr, so wird
der Text”Sattelstutze schon vorhanden“ ausgegeben.
Der restliche Code befindet sich im else-Teil der Abfrage. Der einfacheren Be-
schreibung halber ist er hier abgebildet:
$dbquery = "SELECT * FROM ".$this->xml->get_component_from_xml(13,1)
. "WHERE durchmesser between ".($FrameRow[10]-0.01)
. " and " . ($FrameRow[10] + 0.01);
$SeatpostResultSet = $this->db->query_db($dbquery);
echo "<div id=content>";
while ($SeatpostRow = mysql_fetch_row($SeatpostResultSet))
{
$artnr = $_SESSION[$key13];
parent::display_head($SeatpostRow);
echo "<tr class=main>
<td colspan=3>Durchmesser: ".$SeatpostRow[7]."mm</td>
<td colspan=2>Lange: ".$SeatpostRow[6]."mm</td>
</tr>";
parent::display_footer($SeatpostRow, $artnr);
}
echo "</div>";
Der $dbquery-String ist die Anfrage an die Datenbank, nur diejenigen Datensatze
herauszusuchen, die gleich dem Durchmesser der Sattelstutze des Rahmens ist.
Der Ausdruck between ".($FrameRow[10]-0.01). " and ".($FrameRow[10] +
Diplomarbeit 62
KAPITEL 6. DAS PROGRAMM AUS SICHT DES ENTWICKLERS
0.01)" ist notwendig, da MySQL Probleme mit der Genauigkeit von Nachkommas-
tellen hat. In der nachsten Zeile wird diese Anfrage abgeschickt, und das Ergebnis
wird in $SeatpostResultSet gespeichert.
Nun beginnt die eigentliche Erstellung der Komponententabelle. Solange noch Da-
tensatze vorhanden sind, wird die while-Schleife ausgefuhrt. Der obere Teil der
Tabelle eines Artikels wird in der Elternklasse durchgefuhrt, da immer Preis, Na-
me, Artikelnummer usw. dort dargestellt werden. In der Funktion display footer
wird der untere Teil der Tabelle angezeigt, der das Gewicht, den Auswahl-Button
und ggf. den Entfernen-Button beinhaltet.
Dazwischen konnen weitere, komponentenspezifische Informationen, eingefugt wer-
den, so wie es in dem Beispiel zu sehen ist.
6.2.3 Weitere Funktionen
Bei den weiteren Funktionen handelt es sich, bis auf remove, um Funktionen
die nicht in jeder Komponentenklasse vorkommen. Da ware additional und die
additional info-Funktion, die eine Informationsbox darstellt.
Bei remove handelt es sich, wie der Name vermuten lasst, um eine Funktion,
die die Aufgabe des Entfernens von Komponenten hat. Bei vielen Komponen-
tenklassen wird einfach der Befehl parent::remove components($this->xml->
get path id from name($ SESSION[’nav’]), $this->xml->get id from name
($ SESSION[’nav’])) ausgefuhrt. Doch bei Bauteilen, die mit der Schaltgrup-
penmarke zusammenhangen, mussen in dieser Funktion noch zusatzlich einige Ab-
fragen vorhanden sein, bei denen getestet wird, ob die Session-Variable der Marke
geloscht werden kann. Das sieht dann, wie z. B. bei den Laufradern, so aus:
$var = $this->db->GetComponentArray(
$_SESSION[$this->xml->get_key_from_xml(9)],
$this->xml->get_component_from_xml(9,1));
if ( (empty($_SESSION[$this->xml->get_key_from_xml(9)]) or
$var[17] == 2) and
Diplomarbeit 63
KAPITEL 6. DAS PROGRAMM AUS SICHT DES ENTWICKLERS
empty($_SESSION[$this->xml->get_key_from_xml(10)]))
{
$this->session->reset_sessionvalue(brand);
}
Die Funktion additional ist ahnlich der display. Nur werden hier nicht vorher
die nicht kompatiblen Artikel herausgefiltert und dann angezeigt, sondern die ver-
schiedenen Langen der ausgewahlten Komponente aus der Datenbank ausgelesen
und dann als eigene Komponententabelle dargestellt. Diese Funktion wird aber
nur bei dem Vorbau und bei den Kurbelsatzen gebraucht.
Zum Darstellen wird einfach der Datensatz des ausgewahlten Artikels aus der Da-
tenbank extrahiert und die verschiedenen Langen nacheinander mittels einer for-
Schleife angezeigt. Die Funktionen der Elternklasse display head und display
footer kommen auch zum Einsatz, damit erstens diese zusatzliche Tabelle sich
nicht vom Aussehen her viel von der Komponententabelle unterscheidet, und zwei-
tens wird der Code wieder verwendet.
Abschließend ist in diesem Abschnitt noch die Funktion additional info zu nen-
nen, die gegebenenfalls aus der display aufgerufen wird, denn nicht jede Kompo-
nente bedarf einer zusatzlichen Information oder Erklarung. Das Ganze ist auch
dynamisch gestaltet, so dass machen Information nicht mehr erscheinen wenn z. B.
die Schaltgruppenmarke schon gewahlt wurde.
6.3 Elternklasse
Alle verwendeten Komponentenklassen sind von der Elternklasse abgleitet. Der
Name der php ist bezeichnenderweise ComponentParent. Hier sind alle Metho-
den zusammengefasst, die von allen Komponenten benutzt werden. Hier werden
auch uber den Konstruktor die Funktionen der Klassen, die XML-, Datenbank-
oder Sessionangelegenheiten erledigen, verfugbar gemacht. Die Elternklasse hat
drei Aufgaben: Das Entfernen von Komponenten, das Darstellen der Komponen-
tentabelle und die Berechnung von Gesamtpreis und -gewicht.
Diplomarbeit 64
KAPITEL 6. DAS PROGRAMM AUS SICHT DES ENTWICKLERS
Im Folgenden wird auf die Methoden detailliert eingegangen und erklart wie sie
aufgebaut sind und funktionieren.
6.3.1 Komponentendarstellung
Dieser Teil des Programms ist sehr wichtig und auch etwas kompliziert, da hier
nicht nur die Komponententabelle erstellt wird, sondern auch noch die Klicks auf
den Auswahl- bzw. gegebenenfalls auch den Entfernen-Button gehandhabt werden
mussen.
Die Darstellung ist in zwei Teile gegliedert. Dies wurde so realisiert damit noch
komponentenspezifische Informationen in der Tabelle aufgenommen werden konnen,
wie z. B. die Breite bei den Reifen. Der obere Teil enthalt immer die gleichen Daten,
wie Preis oder Artikelname. Der unter Abschnitt beinhaltet nur die Information
uber das Gewicht und die beiden wichtigen Schaltflachen.
display head
Hier wird, wie der Name schon aussagt, der obere Teil der Komponententabelle
erzeugt. Der Methode wird nur ein Parameter ubergeben, das hier $field genannt
ist. $field ist ein Array, das die aus der Datenbank ausgelesenen Daten fur den
gerade darzustellenden Artikel enthalt. Da die Informationen hier angezeigt werden
sollen, die in der Datenbank fur jede Komponente an der gleichen Stelle gespeichert
sind, stehen diese Daten auch im ubergebenen Array immer am selben Ort. Daher
beinhaltet z. B. $field[0] immer die Artikelnummer, oder $field[4] immer den
Preis usw. (vgl. Abschnitt 4.1.1). Somit ist es sehr leicht die obere Sektion der
Tabelle zu erzeugen, da hier hauptsachlich nur HTML-Code gebraucht wird, in
dem die einzelnen Elemente des Array eingebettet werden.
display footer
In dieser Methode werden, neben dem Gewicht, die unverzichtbaren Schaltflachen
fur die Auswahl bzw. das Entfernen einer Komponente angezeigt, und so erstellt,
Diplomarbeit 65
KAPITEL 6. DAS PROGRAMM AUS SICHT DES ENTWICKLERS
Abbildung 6.1: Aufteilung zwischen Footer und Head
dass der Event des Anklickens registriert werden kann. Dieser Funktion konnen drei
Parameter ubergeben werden, wobei zwei davon optional sind. Das oben schon be-
schriebene Array $field muss jedes Mal ubergeben werden. Optional sind die In-
formationen uber die Artikelnummer eines eventuell schon ausgewahlten Bauteils,
und der Parameter, der aussagt, ob es sich nun um eine normale Komponententa-
belle, oder um eine zusatzliche Auswahl handeln soll. Wird Letzteres weggelassen,
so wird automatisch eine normale Komponententabelle erstellt, da dies der vorge-
gebene Wert ist.
Der normale Ablauf, ohne eine nachtragliche zusatzliche Auswahl, wird folgen-
dermaßen durchgefuhrt: In der jeweilige Komponentenklasse wird diese Funktion
in der Elternklasse aufgerufen. Das aus der Datenbank gelesene Array und die
Artikelnummer eines evtl. schon ausgewahlten Bauteils werden ubergeben und
dann der untere Teil der Tabelle dargestellt. Dieser Teil beginnt mit dem Gewicht.
Danach wird eine Abfrage ausgefuhrt, die testen soll, ob die Artikelnummer des
gerade darzustellenden Artikels, mit der gepeicherten Nummer in der entsprechen-
den Session-Variablen ubereinstimmt. Ist das der Fall, so wird die Schaltflache zum
Entfernen bei diesem Bauteil angezeigt. Dann wird der Auswahl-Button angezeigt,
Diplomarbeit 66
KAPITEL 6. DAS PROGRAMM AUS SICHT DES ENTWICKLERS
der naturlich wieder bei jedem Artikel dargestellt wird.
Die beiden Schaltflachen zum Auswahlen oder Entfernen sind HTML-Formulare,
und haben jeweils versteckte Felder, damit z. B. der eingetretene Event in der
Main.php registriert werden kann.
echo "<form action=’Main.php’ method=’post’>";
echo "<input name=’entfernen’ type=’submit’
class=’submitLink’ value=’Entfernen’>";
echo "<input name=’remove’ type=’hidden’
value=’".$field[0]."’>";
echo "</form>";
Dies hier ist das Formular fur das Entfernen, was nur bei dem Bauteil erscheint,
das vorher ausgewahlt wurde. Der Name lautet remove, so dass das Ereignis in
der Main.php als”remove“ erkannt wird. Der Wert der Artikelnummer, die in
$field[0] gespeichert ist, wird bei der jetzigen Version des Prototypen nicht
mehr verwendet, und wurde wahrend der Entwicklungszeit zu Uberprufungszwe-
cken gebraucht.
echo "<form action=’Main.php’ method=’post’>";
echo "<input name=’".$name."’ type=’submit’ class=’submitLink’
value=’Auswahlen’>";
echo "<input type=’hidden’ name=’".$name."’
value=’".$_SESSION[’nav’]."’>";
echo "<input type=’hidden’ name=’".$_SESSION[’nav’]."’
value=’".$field[0]."’>";
echo "</form>";
Diplomarbeit 67
KAPITEL 6. DAS PROGRAMM AUS SICHT DES ENTWICKLERS
Das Formular fur den Auswahl-Button hat zwei versteckte Felder. Außerdem ist
der Name des sichtbaren und eines versteckten Feldes variabel. Der Grund dafur
ist, dass unterscheiden werden muss, ob es nun die Auswahl-Schaltflache bei einer
normalen Komponententabelle, oder ein Button bei einer zusatzlichen Auswahl
handelt. Das zweite versteckte Feld ist notwendig, damit spater auch der aus-
gewahlte Artikel in der Session-Variable abgespeichert werden kann.
Die Variable $name kann die Werte additional oder auswahl annehmen. Also
kann je nach Namen eine andere POST-Variable abgefragt, und somit ein ande-
res Ereignis registriert werden. Dazu muss in der Komponentenklassenmethode
display der dritte Parameter explizit ubergeben werden, so dass, nachdem der
Artikel ausgewahlt wurde, die Funktion zur Darstellung der zusatzlichen Auswahl
aufgerufen werden kann.
6.3.2 Komponenten entfernen
In dieser Funktion der Elternklasse wird das Entfernen der Komponenten in einem
Pfad gehandhabt. Die Methode ist in dieser Klasse, da das Loschen bei jedem
Bauteil der gleiche Vorgang ist.
Hier werden zwei Parameter beim Aufruf ubergeben. Zum einen die ID des Pfades,
die $comp id genannt wird, und zum anderen $path id, die Position an der sich
die zu loschende Komponente innerhalb des Pfades befindet. Dies ist notwendig,
damit die nachfolgenden Bauteile auch geloscht werden um Inkompatibilitaten der
Elemente zu vermeiden.
Zunachst wird der Befehl $ids = $this->xml->get ids in path($path id) aus-
gefuhrt, damit aus der XML alle Komponenten eines Pfades in ein Array gespei-
chert werden. Der eigentliche Loschvorgang ist eine einfache foreach-Schleife.
foreach ($ids as $single_id)
{
if ($comp_id <= $single_id)
{
$this->update_it($single_id, -1);
Diplomarbeit 68
KAPITEL 6. DAS PROGRAMM AUS SICHT DES ENTWICKLERS
$this->session->unregister_session
($this->xml->get_key_from_xml($single_id));
}
}
In der Schleife werden erst einmal alle in dem Array befindlichen Komponenten
durchgegangen. Falls nun die Nummer des Indexes (also $single id hoher oder
gleich der angegebenen Position innerhalb des Arrays ist, so werden die Kom-
ponenten entfernt. Das bedeutet, dass alle nachfolgenden Bauteile innerhalb des
Pfades ebenfalls geloscht werden. Das eigentliche Entfernen geschieht durch die An-
weisung $this->session->unregister session, in dem als Argument der Name
der Session-Variable steht. Dieser wird ebenfalls mittels der $single id) aus der
XML gelesen.
Die Session-Variable mit dem Namen brand, die keine Komponente ist, muss unter
bestimmten Umstanden ebenfalls geloscht werden. Das geschieht wenn keine der
Bauteile Laufrader, Kurbelsatz oder Schaltgruppe ausgewahlt sind bzw. wenn eine
geloscht, und keine der anderen Komponenten gewahlt wurde. Das Ganze wird
durch eine einfache if-Abfrage realisiert, in der das Vorhandensein der Bauteile
gepruft und mittels UND verknupft werden.
6.3.3 Preis- und Gewichtsaktualisierung
Der Zweck dieser Methode ist es, den angezeigten Gesamtpreis und das Gesamtge-
wicht aktuell zu halten. Dazu wird beim Aufrufen der Funktion als Parameter die
ID der Komponente, dessen Gewicht und Preis addiert bzw. subtrahiert werden
soll, ubergeben. Als zweiter Wert wird das Vorzeichen (also eine 1 oder eine -1)
angegeben.
Es wird als erstes innerhalb der Funktion die Daten der Komponente aus der
Datenbank gelesen und in ein Array gespeichert. Dies geschieht wieder mit der
Methode GetComponentArray. An Position 1 im Array befindet sich immer der
Wert des Gewichts und an Position 4 immer der Preis. Diese Werte werden dann
zu der entsprechenden Session-Variable hinzuaddiert bzw. abgezogen.
Diplomarbeit 69
KAPITEL 6. DAS PROGRAMM AUS SICHT DES ENTWICKLERS
$weight = $_SESSION[’weight’] + ($info[1] * $sign);
$price = $_SESSION[’price’] + ($info[4] * $sign);
Falls Gewicht oder Preis gleich 0 (null) ist, wird die Session-Variable zuruckgesetzt,
da bei einer Speicherung der Wert 0 (null) nicht zulassig ist, und ignoriert wird.
Das wird durch eine if-Abfrage fur die jeweiligen Variablen realisiert. Zu letzt
werden dann $price und $weight in den Session-Variablen gespeichert, wobei
$price vorher auf zwei Nachkommastellen gerundet wird.
6.4 Weitere Klassen
In diesem Abschnitt soll es um die Beschreibung der restlichen Klassen gehen.
Zum Teil, weil sie schon recht ausfuhrlich behandelt wurden (wie die XML Handler
Klasse), oder aus dem Grund, weil die Funktionen nicht so umfangreich sind, dass
ein ganzer Abschnitt dafur gerechtfertigt ware.
6.4.1 XML Handler Klasse
Diese Klasse wurde in Abschnitt 5.3.2 schon recht ausfuhrlich beschrieben. Auch
der Aufbau wurde in der Sektion 5.3.1 schon behandelt. Hier sollen einmal alle
Methoden der Klasse aufgefuhrt werden, damit ein Uberblick geschaffen wird, was
diese Klasse alles auslesen und bearbeiten kann.
construct Der Konstruktor hat einen String als Parameter, der den Dateinamen
angibt. So kann beim instanzieren schon die Datei geladen werden, ohne noch
einen zusatzlichen Befehl auszufuhren.
test set Diese Methode wurde schon in Abschnitt 5.3.2 ausfuhrlich erklart. Sie
dient zum Testen, ob eine an der Navigationsleiste angeklickte Komponente
schon an der Reihe ist.
get component from xml Hier werden zwei Parameter ubergeben: Der Name der
Komponente (ublicherweise in der Session-Variable nav enthalten) und ein
Diplomarbeit 70
KAPITEL 6. DAS PROGRAMM AUS SICHT DES ENTWICKLERS
Operator, der bestimmt, ob Umlaute normal oder MySQL-konform zuruck-
gegeben werden.
umlaute In dieser Funktion werden die Umlaute ersetzt, so dass beispielsweise aus
einem a ein ae wird.
get key from xml Der Name, den eine Session-Variable fur eine bestimmte Kom-
ponente haben soll, wird durch diese Methode ausgelesen. Der Ubergabepa-
rameter ist die Nummer der Komponente.
get key from name Hier wird ebenfalls der Name der Session-Variable fur eine
Komponente extrahiert. Allerdings ist der Parameter der Komponentenna-
me.
get id from name Die Id-Nummer einer Komponente wird hier ausgelesen, und
es wird der Name der Komponente ubergeben.
get path id from name Eine ahnliche Funktion wie get id from name, nur dass
hier die ID-Nummer des Pfades zuruckgegeben wird.
get additional from xml Hier wird der Name der Session-Variable ausgelesen,
die zusatzliche Attribute speichert. Im Fall des Konfigurators sind das die
Lange vom Vorbau bzw. die Lange der Kurbel am Kurbelsatz. Hier muss als
Parameter die Komponenten ID angegeben werden. . .
get additional from name . . . wahrend hier der Name der Komponente uberge-
ben werden sollte. Ansonsten sind die Funktionen ahnlich.
get ids in path In dieser Methode werden alle Komponenten-IDs in einem Array
zuruckgegeben, die in einem bestimmten Pfad sind. Hierzu muss als Uber-
gabewert naturlich die Pfad-ID angegeben werden.
Diese Methoden extrahieren also alle benotigten Daten aus der XML-Datei, die
zur Funktion des Konfigurators verwendet werden. Es gibt noch weitere Kombina-
tionen um Daten aus der XML auszulesen, wie beispielsweise anhand des Session-
Variablen-Namens die Komponenten-ID zu erfassen. Allerdings macht das nicht
viel Sinn, und findet auch keine Verwendung im Konfigurator.
Diplomarbeit 71
KAPITEL 6. DAS PROGRAMM AUS SICHT DES ENTWICKLERS
6.4.2 Session Handler Klasse
In dieser Klasse werden alle Funktionen, die die Session-Variablen und dessen
Inhalte manipulieren, zusammengefasst. Die wichtigsten und am haufigsten ge-
brauchten Methoden sind register session, unregister session und reset
sessionvalue.
Bei register session wird, wie der Name schon vermuten lasst, eine Session-
Variable registriert. Zwei Parameter werden ubergeben. Einmal der Name, den
diese Variable bekommen soll, und einmal der Wert dieser Variable. Es wird aber
noch uberpruft, ob der Wert eine 0 (null) oder ob der false ist. Falls dem nicht so
ist, wird die Variable registriert. Daher muss bei Werten, die eine 0 (null) besitzen
durfen, wie z. B. der Gesamtpreis, eine andere Losung gefunden werden.
Die Methode unregister session bewirkt das Gegenteil. Hier muss allerdings
nur der Name der Session-Variablen beim Aufruf angegeben werden. Es wird noch
getestet, ob die angegebene Variable uberhaupt einen Wert besitzt.
Der Unterschied zu unregister session liegt bei reset sessionvalue darin,
dass die Variable selbst nicht geloscht wird, sondern nur der Inhalt auf NULL. Die
ist manchmal hilfreich, wenn z. B. nach einem Neustart ein paar Session-Variablen
sofort abgefragt werden, wie es bei Gesamtpreis und -gewicht der Fall ist.
In der Klasse befinden sich noch andere Funktionen wie get session id oder
is registered, die nur wahrend der Entwicklungszeit benutzt wurden, um die
Funktionalitat zu testen oder um Fehler zu finden.
6.4.3 Datenbank Handler Klasse
Alles was, sich um die Benutzung der Datenbank und dessen Funktionen dreht,
befindet sich in dieser Klasse. Auch hier gibt es Methoden, die standig benutzt
werden, und es gibt Methoden, die nur wahrend der Entwicklung des Konfigura-
tors gebraucht wurden.
Eine der haufig verwendeten Funktionen ist query db. Es gibt naturlich die vor-
gefertigte Funktion mysql query, doch bei der Benutzung von query db wird im
Fehlerfall der Errorcode und der Fehler ausgegeben.
Die Methode GetComponentArray ist ebenfalls eine sehr oft benutzte Funktion.
Diplomarbeit 72
KAPITEL 6. DAS PROGRAMM AUS SICHT DES ENTWICKLERS
Mit ihr ist es moglich den kompletten Datensatz eines Artikels auszulesen. Da-
zu mussen zwei Parameter ubergeben werden. Der Eine ist der Name des Tables,
und der Andere ist die Artikelnummer, was auch gleichzeitig den Primary Key
darstellt. Zuruckgegeben wird ein Array, das alle in der Datenbank gespeicherten
Informationen uber diesen Artikel enthalt.
Erwahnenswert ist noch der Konstruktor. Ihm wir bei der Instanzierung ein String
ubergeben, der dann bestimmt, ob eine Verbindung zum Server der lokalen Ent-
wicklungsumgebung, oder zum Webserver hergestellt werden soll. So muss, wenn
der Konfigurator auf den Webserver hochgeladen wird, nur der String geandert
werden. Eine relativ komfortable Losung, wenn man in Betracht zieht, dass die
MySQL und PHP Versionen von den beiden Umgebungen nicht hundertprozentig
kompatibel sind.
Die restlichen Methoden wie create db, select db, delete db, oder auch
select table, finden nur Verwendung im recht rudimentaren Backend, das sich
darauf beschrankt, dass man die gesamte Datenbank loschen, dessen Inhalt an-
schauen, oder mit den Testdaten befullen kann.
6.5 Interaktionen
Nachdem nun die gesamten Klassen detailliert durchgesprochen und erklart wur-
den, sind nun die Interaktionen zwischen den Klassen das Thema dieses Abschnitts.
Es werden nicht alle moglichen Zusammenspiele angesprochen, da das den Rah-
men sprengen wurde.
Der Konfigurator wird, wie schon mehrmals erwahnt, durch Ereignisse gesteuert,
und in Gang gesetzt. Es werden hier exemplarisch drei Events besprochen und
erklart. Das geschieht jeweils anhand eines Diagramms, dem ein paar erklarende
Satze folgen, zu Stellen, an denen die Darstellung nicht ganz klar sein konnte.
6.5.1 Event: Navigation
Nach dem Klick auf die Navigationsleiste wird die Main.php erneut aufgerufen,
und die POST-Variable navigation wird gesetzt. Das wird dann registriert und
Diplomarbeit 73
KAPITEL 6. DAS PROGRAMM AUS SICHT DES ENTWICKLERS
die Funktion handle navbar click in der EventHandler-Klasse aufgerufen. Der
Inhalt der POST-Variable navigation wird in der Session-Variablen nav gespei-
chert, und mit dessen Hilfe und der XML-Funktion get id from name die Metho-
de display der entsprechenden Komponentenklasse aufgerufen. In dieser Funktion
wird dann durch die Methode test set der XMLHandler-Klasse gepruft, ob diese
Komponente uberhaupt schon auswahlbar ist. Falls das nicht der Fall ist, kommt
eine Fehlermeldung, die aussagt, welche Komponente zuerst gewahlt werden soll.
Ist das Bauteil aber an der Reihe, so werden in der display-Funktion die entspre-
chenden Informationen, basierend auf schon vorher ausgewahlten Komponenten,
aus der Datenbank ausgelesen. Mit den Methoden der Elternklasse display head
und display footer werden dann nur kompatible Bauteile dargestellt.
6.5.2 Event: Auswahl
Nachdem alle kompatiblen Bauteile auf dem Bildschirm angezeigt werden, klickt
der Nutzer auf die Schaltflache”Auswahlen“. Die Main.php wird auch hier wieder
neu geladen, und die POST-Variable auswahl ist gesetzt. Dadurch wird die Metho-
de handle choice click in der EventHandler Klasse aufgerufen. Hier wird dann
durch eine if-Abfrage getestet, ob der Artikel ausgewahlt werden darf. Ist das
nicht der Fall, so passiert nichts weiter. Ist es erlaubt das Bauteil zu wahlen, so
wird wieder die entsprechende Komponentenklasse aufgerufen, dessen Name im-
mer noch in der Session-Variable nav gespeichert ist. In der Funktion set session
wird die Session-Variable fur die eigene Komponente gesetzt und, falls notwendig,
auch andere Variablen. Die nachste aufgerufene Funktion ist dann wieder display,
in der aufgrund der aktuellen Session-Variablen der Inhalt dargestellt wird. Ein
Beispiel hier fur ist die Komponente Laufrader. Zu Anfang werden die beiden
Schaltgruppenmarken, Shimano und Campagnolo, angezeigt. Wird nun ein Lauf-
radsatz gewahlt, der mit Shimano kompatibel ist, so sind nach dem Klick auf die
Auswahl-Schaltflache nur noch Shimano-kompatible Laufrader zu sehen.
Diplomarbeit 74
KAPITEL 6. DAS PROGRAMM AUS SICHT DES ENTWICKLERS
Abbildung 6.2: Ablauf beim Event Navigation
Diplomarbeit 75
KAPITEL 6. DAS PROGRAMM AUS SICHT DES ENTWICKLERS
Abbildung 6.3: Ablauf beim Event Auswahl
Diplomarbeit 76
KAPITEL 6. DAS PROGRAMM AUS SICHT DES ENTWICKLERS
6.5.3 Event: Auswahl mit Zusatz
Diese Interaktion zwischen den Klassen ist etwas komplizierter als der normale
Auswahl-Ablauf. Allerdings gilt dies nur fur die Komponenten Vorbau und Kur-
belsatz. Wird also in der Navigationsleiste einer der beiden Bauteile angeklickt, so
wird zwar auch die Komponententabelle dargestellt, allerdings mit einem Unter-
schied. Der Name des Formulars, das die Auswahl-Schaltflache beinhaltet, heißt
nicht mehr auswahl, sondern additional. So kann beim Anklicken des Auswahl-
Buttons in der Main.php registriert werden, dass nun die zusatzliche Tabelle mit
den jeweiligen Langen dargestellt werden soll. Der Ablauf vom Anklicken bis zum
Setzen der Variablen ist der gleiche wie bei der Auswahl, was in dem Diagramm die
Buchstaben A und B darstellen sollen. Nur wird nach der Auswahl nicht wieder
die Komponententabelle dargestellt, sondern die zusatzliche Tabelle. In der Event-
Handler Klasse kommt die Methode handle additional click zum Einsatz, die
ebenfalls die entsprechende Komponentenklasse aufruft. Dort wird dann mit Hilfe
der Funktionen display head und display footer die Tabelle mit den Langen
dargestellt. Hier heißen dann die Formulare der Auswahlfelder wieder auswahl, so
dass alles wieder den gewohnten Ablauf annehmen kann.
Diplomarbeit 77
KAPITEL 6. DAS PROGRAMM AUS SICHT DES ENTWICKLERS
Abbildung 6.4: Ablauf beim Event zusatzliche Auswahl
Diplomarbeit 78
Kapitel 7
Zusammenfassung und Ausblick
In den vorherigen Kapiteln wurden ausfuhrlich die Klassen, die PHP Dateien, die
MySQL Datenbank und deren Inhalt, und dessen Zusammenspiel vorgestellt. Au-
ßerdem gab es in einem Kapitel einen Uberblick, wie der Nutzer den Konfigurator
sieht. In einem weiteren Kapitel wurde das Renn- bzw. Triathlonrad besprochen,
so wie die Abhangigkeiten zwischen den Komponenten. Zu Beginn gab es noch die
Uberlegung, ob die Programmiersprache Java oder PHP fur ein solches Projekt
geeigneter waren.
In diesem Kapitel mochte ich noch einmal zusammenfassen, was der Konfigura-
tor leistet, und inwieweit das vorgegebene Ziel erreicht wurde. Im nachsten Ab-
schnitt wird angesprochen was an dem Konfigurator zusatzlich implementiert wer-
den muss, damit daraus ein kommerzielles Produkt werden kann. Schließlich wird
noch ein personliches Fazit gezogen.
7.1 Zusammenfassung
Wie in der Einleitung beschrieben, war es vorgegeben so kostengunstig wie moglich
einen Konfigurator fur Renn- und Triathlonrader zu erstellen. Die Mittel, die zum
Programmieren verwendet wurden, entsprachen diesem Kriterium, da hauptsachlich
Open Source und/oder freie Programme verwendet wurden. Der Rechner, auf dem
Diplomarbeit 79
KAPITEL 7. ZUSAMMENFASSUNG UND AUSBLICK
der Konfigurator entwickelt wurde, war ein handelsublicher Desktop Computer
mit Windows R© XP als Betriebssystem. Darauf wurde dann ein Apache Server in-
stalliert, ebenso wie ein PHP Interpreter, die beide frei im Internet verfugbar sind.
Auch die MySQL Datenbank lasst sich kostenlos herunterladen. Somit entfallen
die Kosten fur Lizenzgebuhren der essentiellen Programme. Auch die Lizenz fur
die PHP Entwicklungsumgebung PHPEdit ist unter Angabe des Namens und einer
E-Mail Adresse kostenfrei erhaltlich.
Probleme gab es allerdings mit dem Webserver, der den Konfigurator unter der
URL http://www.radtraum.de im Internet verfugbar machen sollte. Offen-
sichtlich gab es Kompatibilitatsprobleme zwischen den verschiedenen PHP und
MySQL Versionen. Doch diese konnten jedoch durch kleinere”Workarounds“ be-
hoben werden.
Ein weiteres gefordertes Kriterium war, dass ein Nutzer nur Komponenten wahlen
kann, die sich tatsachlich zusammenbauen lassen. So soll am Ende sichergestellt
sein, dass der Kunde ein funktionsfahiges Wunsch-Rad erstellt. Diese Forderung
war erwartungsgemaß die am schwierigsten umzusetzende. Nicht nur, dass zuerst
Komponentengruppen identifiziert werden mussten (vgl. Seite 10), sondern auch
deren Zusammenspiel und Abhangigkeiten untereinander herausgearbeitet werden
sollten. Das nahm einen nicht unerheblichen Teil des Projektes ein. Danach muss-
ten die erarbeiteten Daten mittels PHP in eine benutzerfreundliche Form gebracht
werden.
Dies war ein Grund, warum gegen eine assistierte Konfiguration, und fur eine (re-
lativ) freie Wahl der Reihenfolge entschieden wurde. Allerdings verkomplizierte
diese, im Nachhinein gefallte Entscheidung, die Erstellung des Konfigurators. Es
mussten alle moglichen”Fehler“ des Nutzers erkannt und abgefangen werden, da-
mit der virtuelle Zusammenbau des Wunschrades in gewunschte Bahnen gelenkt
wird.
Vergleicht man diesen Konfigurator mit anderen im Internet befindlichen Rad-
Konfiguratoren, so muss festgestellt werden, dass der in diesem Projekt Erstell-
te recht fortschrittlich ist, da es auf manchen Seiten z.B. moglich ist, wahllos
Komponenten einzutragen, ohne darauf zu achten, ob diese auch zusammenpassen
[NR05]. Dennoch sollte zusatzlich eine Funktion implementiert werden, die nicht
Diplomarbeit 80
KAPITEL 7. ZUSAMMENFASSUNG UND AUSBLICK
einmal fuhrende Automobilhersteller in ihren Konfiguratoren zur Verfugung stel-
len. Ein so genannter”Showroom“ sollte erstellt werden, so dass es fur den Nutzer
moglich ist, bis zu drei verschiedene Fahrrader zu erstellen, und dann die einzelnen
Zusammenstellungen nebeneinander zu betrachten. Auch dieses wurde erfolgreich
realisiert, nachdem ein paar Probleme uberwunden wurden, z.B. wie diese Daten
die ganze Zeit erhalten bleiben, ohne die Datenbank zu nutzen.
Eine weitere Eigenschaft des Programms, die aber nicht vorgegeben war, ist der
relativ generische Aufbau, mit dem ein Programmierer innerhalb kurzer Zeit einen
neuen Konfigurator fur ein komplett anderes Produkt erstellen kann. Der ar-
beitsintensivere Teil ware naturlich das Identifizieren der Komponenten und der
Abhangigkeiten zwischen diesen. Ebenso musste schon eine entsprechend erstell-
te Datenbank vorhanden sein, bevor sich das Programm umgestalten lasst. Dazu
muss aber im Grunde nur eine vergleichbare XML-Datei erstellt und die dann
bekannten Abhangigkeiten in den Komponentenklassen implementiert werden.
Zusammengefasst bleibt zu sagen, dass das Projekt erfolgreich abgeschlossen wur-
de, so dass der Auftraggeber, die Firma all4triathlon.com, sehr zufrieden mit dem
Ergebnis ist.
7.2 Ausblick
Da dieser Konfigurator zurzeit nur einen Prototypen darstellt, sind selbstverstand-
lich noch Verbesserungen moglich und notwendig, bevor dieser einen kommerziel-
len Einsatz hat. Dennoch ist der Konfigurator voll funktionsfahig. Das heißt, alle
Funktionen, uber die das Programm auch im kommerziellen Einsatz verfugen soll-
te, sind schon vorhanden. Die Verbesserungen beziehen sich in erster Linie auf den
Bereich, der fur den Nutzer relativ unerheblich ist.
Die wohl großte und wichtigste zukunftige Implementierung ist die Erstellung eines
Backends. Das derzeit eingesetzte System ist sehr rudimentar und diente dazu die
Datenbank zu fullen, oder zu loschen. In einem kompletten Backend sollen nicht
nur komfortable Datenbankfunktionen enthalten sein, sondern auch ein System
zum Einpflegen und Warten von neuen Komponenten. Doch diese Erstellung war
Diplomarbeit 81
KAPITEL 7. ZUSAMMENFASSUNG UND AUSBLICK
nicht die Aufgabe des Projekts, und das vorhandene Backendsystem erfullte alle
Funktionen, die wahrend der Entwicklung des Konfigurators notwendig waren.
Ein weiteres, wahrend der Entwicklung nicht behandeltes Problem, ist die Kom-
patibilitat zwischen den verschiedenen Browsern. Zurzeit ist das Programm auf
Mozilla Firefox und Opera optimiert. Entsprechende Anpassungen fur den Micro-
soft Internet Explorer, Konqueror oder auch Safari mussten folgen. Weitere Ver-
besserungen in der Darstellung sind generell gefragt, aber insbesondere muss die
Anzeige fur kleinere Bildschirme angepasst werden, da wahrend der Entwicklungs-
zeit eine relativ hohe Auflosung benutzt wurde. Schließlich konnte das Programm
so geandert werden, dass Templates benutzt werden, und die Gestaltung somit
unabhangig von der”Rule-Engine“ ist.
7.3 Schlusswort
Um ein Fazit zu ziehen, mochte ich zuerst anmerken, dass das Diplomarbeitspro-
jekt eine Herausforderung war, in dem Sinne, dass ohne auf einer Grundlage aufzu-
bauen, ein funktionierender Prototyp entstanden ist. Manches Problem wahrend
der Entwicklung war nicht so einfach zu losen, doch es hat immer Spaß gemacht, an
diesem Projekt zu arbeiten. Außerdem konnte ich durch die Erstellung des Konfi-
gurators meine Fahigkeiten in PHP, HTML und auch JavaScript weiter vertiefen,
was sich im Berufsleben als nutzlich erweisen wird. Hinzu kommt, dass ich nun Ge-
wissheit habe ein Projekt dieser Große eigenstandig organisieren und realisieren
zu konnen.
Diplomarbeit 82
Anhang A
Tables der Datenbank
In diesem Teil des Anhangs werden alle Tables der Datenbank abgebildet. Der
Spaltenname ist in den Tabellen so wiedergegeben, wie er auch in der Datenbank
abgelegt ist. Deshalb sind auch keine Umlaute zu finden, da die Namenskonvention
von MySQL diese nicht erlaubt. Die Tabellen enthalten jeweils eine Spalte fur den
Spaltennamen, die Eigenschaften dieser, und eine kleine erklarende Bemerkung.
Diplomarbeit 83
ANHANG A. TABLES DER DATENBANK
TA
BLE
Rahm
en
Spalt
ennam
eEig
ensc
haft
en
Bem
erk
ung
arti
keln
um
mer
CH
AR
(6)
PR
IMA
RY
KE
Ykunst
lich
erei
ndeu
tige
rSch
luss
el
gew
icht
SM
ALLIN
TU
NSIG
NE
DN
OT
NU
LL
DE
FA
ULT
0das
Gew
icht
der
Kom
pon
ente
nam
eVA
RC
HA
R(1
00)
NO
TN
ULL
der
Nam
eder
Kom
pon
ente
bes
chre
ibung
TE
XT
NO
TN
ULL
eine
schon
eB
esch
reib
ung
pre
isFLO
AT
NO
TN
ULL
DE
FA
ULT
0das
Wic
hti
gste
bild
VA
RC
HA
R(4
0)N
OT
NU
LL
UR
Lzu
einem
Art
ikel
bild
rahm
enhoeh
eT
INY
INT
(2)
UN
SIG
NE
DN
OT
NU
LL
DE
FA
ULT
0w
ichti
ges
Maß
gabel
aufn
ahm
eFLO
AT
NO
TN
ULL
DE
FA
ULT
0M
aße
inm
m,≥
100=
schon
vorh
anden
steu
ersa
tzT
INY
INT
(1)
UN
SIG
NE
DN
OT
NU
LL
DE
FA
ULT
00=
vorh
anden
,1=
nic
ht
vorh
anden
satt
elro
hr
FLO
AT
NO
TN
ULL
DE
FA
ULT
0M
aße
inm
m,≥
100=
schon
vorh
anden
tret
lage
rFLO
AT
NO
TN
ULL
DE
FA
ULT
0M
aße
inm
m
TA
BLE
Ste
uers
atz
Spalt
ennam
eEig
ensc
haft
en
Bem
erk
ung
arti
keln
um
mer
CH
AR
(6)
PR
IMA
RY
KE
Ykunst
lich
erei
ndeu
tige
rSch
luss
el
gew
icht
SM
ALLIN
TU
NSIG
NE
DN
OT
NU
LL
DE
FA
ULT
0das
Gew
icht
der
Kom
pon
ente
nam
eVA
RC
HA
R(1
00)
NO
TN
ULL
der
Nam
eder
Kom
pon
ente
bes
chre
ibung
TE
XT
NO
TN
ULL
eine
schon
eB
esch
reib
ung
pre
isFLO
AT
NO
TN
ULL
DE
FA
ULT
0das
Wic
hti
gste
bild
VA
RC
HA
R(4
0)N
OT
NU
LL
UR
Lzu
einem
Art
ikel
bild
gabel
schaf
tFLO
AT
NO
TN
ULL
DE
FA
ULT
0ublich
inZol
l,hie
rin
mm
Diplomarbeit 84
ANHANG A. TABLES DER DATENBANKTA
BLE
Gabel
Spalt
ennam
eEig
ensc
haft
en
Bem
erk
ung
arti
keln
um
mer
CH
AR
(6)
PR
IMA
RY
KE
Ykunst
lich
erei
ndeu
tige
rSch
luss
el
gew
icht
SM
ALLIN
TU
NSIG
NE
DN
OT
NU
LL
DE
FA
ULT
0das
Gew
icht
der
Kom
pon
ente
nam
eVA
RC
HA
R(1
00)
NO
TN
ULL
der
Nam
eder
Kom
pon
ente
bes
chre
ibung
TE
XT
NO
TN
ULL
eine
schon
eB
esch
reib
ung
pre
isFLO
AT
NO
TN
ULL
DE
FA
ULT
0das
Wic
hti
gste
bild
VA
RC
HA
R(4
0)N
OT
NU
LL
UR
Lzu
einem
Art
ikel
bild
gabel
schaf
tFLO
AT
NO
TN
ULL
DE
FA
ULT
0ublich
inZol
l,hie
rin
mm
laen
geSM
ALLIN
TU
NSIG
NE
DN
OT
NU
LL
DE
FA
ULT
0re
leva
nt
f.R
ahm
enhoh
e
TA
BLE
Vorb
au
Spalt
ennam
eEig
ensc
haft
en
Bem
erk
ung
arti
keln
um
mer
CH
AR
(6)
PR
IMA
RY
KE
Ykunst
lich
erei
ndeu
tige
rSch
luss
el
gew
icht
SM
ALLIN
TU
NSIG
NE
DN
OT
NU
LL
DE
FA
ULT
0das
Gew
icht
der
Kom
pon
ente
nam
eVA
RC
HA
R(1
00)
NO
TN
ULL
der
Nam
eder
Kom
pon
ente
bes
chre
ibung
TE
XT
NO
TN
ULL
eine
schon
eB
esch
reib
ung
pre
isFLO
AT
NO
TN
ULL
DE
FA
ULT
0das
Wic
hti
gste
bild
VA
RC
HA
R(4
0)N
OT
NU
LL
UR
Lzu
einem
Art
ikel
bild
gabel
aufn
ahm
eFLO
AT
NO
TN
ULL
DE
FA
ULT
0D
urc
hm
esse
rdes
Gab
elsc
haf
ts,in
mm
lenke
raufn
ahm
eFLO
AT
NO
TN
ULL
DE
FA
ULT
0D
urc
hm
esse
rdes
Len
kers
,in
mm
laen
ge1
TIN
YIN
TU
NSIG
NE
DN
OT
NU
LL
DE
FA
ULT
0zw
.70
u.14
0m
m
...
...
...
laen
ge9
TIN
YIN
TU
NSIG
NE
DN
OT
NU
LL
DE
FA
ULT
0zw
.70
u.14
0m
m
win
kel
TIN
YIN
TN
OT
NU
LL
DE
FA
ULT
0zw
.-1
7◦und
17◦
flip
TIN
YIN
T(1
)N
OT
NU
LL
DE
FA
ULT
00
=nic
ht
dre
hbar
,1
=dre
hbar
Diplomarbeit 85
ANHANG A. TABLES DER DATENBANK
TA
BLE
Lenker
Spalt
ennam
eEig
ensc
haft
en
Bem
erk
ung
arti
keln
um
mer
CH
AR
(6)
PR
IMA
RY
KE
Ykunst
lich
erei
ndeu
tige
rSch
luss
el
gew
icht
SM
ALLIN
TU
NSIG
NE
DN
OT
NU
LL
DE
FA
ULT
0das
Gew
icht
der
Kom
pon
ente
nam
eVA
RC
HA
R(1
00)
NO
TN
ULL
der
Nam
eder
Kom
pon
ente
bes
chre
ibung
TE
XT
NO
TN
ULL
eine
schon
eB
esch
reib
ung
pre
isFLO
AT
NO
TN
ULL
DE
FA
ULT
0das
Wic
hti
gste
bild
VA
RC
HA
R(4
0)N
OT
NU
LL
UR
Lzu
einem
Art
ikel
bild
lenke
rdurc
hm
FLO
AT
NO
TN
ULL
DE
FA
ULT
0D
urc
hm
esse
rdes
Len
kers
,in
mm
bre
ite
TIN
YIN
TU
NSIG
NE
DN
OT
NU
LL
DE
FA
ULT
0B
reit
e(M
itte
-Mit
te)
lenke
rart
TIN
YIN
T(1
)U
NSIG
NE
DN
OT
NU
LL
DE
FA
ULT
00=
Ren
nra
d,1=
Tri
,≥
2=bei
de
aero
aufs
atz
TIN
YIN
T(1
)U
NSIG
NE
DN
OT
NU
LL
DE
FA
ULT
00=
N/A
,1=
mog
lich
,≥
2=dab
ei
TA
BLE
Aero
aufs
atz
Spalt
ennam
eEig
ensc
haft
en
Bem
erk
ung
arti
keln
um
mer
CH
AR
(6)
PR
IMA
RY
KE
Ykunst
lich
erei
ndeu
tige
rSch
luss
el
gew
icht
SM
ALLIN
TU
NSIG
NE
DN
OT
NU
LL
DE
FA
ULT
0das
Gew
icht
der
Kom
pon
ente
nam
eVA
RC
HA
R(1
00)
NO
TN
ULL
der
Nam
eder
Kom
pon
ente
bes
chre
ibung
TE
XT
NO
TN
ULL
eine
schon
eB
esch
reib
ung
pre
isFLO
AT
NO
TN
ULL
DE
FA
ULT
0das
Wic
hti
gste
bild
VA
RC
HA
R(4
0)N
OT
NU
LL
UR
Lzu
einem
Art
ikel
bild
lenke
rkle
mm
FLO
AT
NO
TN
ULL
DE
FA
ULT
0D
urc
hm
esse
rdes
Len
kers
,in
mm
Diplomarbeit 86
ANHANG A. TABLES DER DATENBANK
TA
BLE
Laufr
aeder
Spalt
ennam
eEig
ensc
haft
en
Bem
erk
ung
arti
keln
um
mer
CH
AR
(6)
PR
IMA
RY
KE
Ykunst
lich
erei
ndeu
tige
rSch
luss
el
gew
icht
SM
ALLIN
TU
NSIG
NE
DN
OT
NU
LL
DE
FA
ULT
0das
Gew
icht
der
Kom
pon
ente
nam
eVA
RC
HA
R(1
00)
NO
TN
ULL
der
Nam
eder
Kom
pon
ente
bes
chre
ibung
TE
XT
NO
TN
ULL
eine
schon
eB
esch
reib
ung
pre
isFLO
AT
NO
TN
ULL
DE
FA
ULT
0das
Wic
hti
gste
bild
VA
RC
HA
R(4
0)N
OT
NU
LL
UR
Lzu
einem
Art
ikel
bild
durc
hm
esse
rSM
ALLIN
TU
NSIG
NE
DN
OT
NU
LL
DE
FA
ULT
0D
urc
hm
esse
rdes
Lau
frad
sin
mm
reifen
art
TIN
YIN
T(1
)U
NSIG
NE
DN
OT
NU
LL
DE
FA
ULT
00=
Sch
lauch
-,≥
1=D
rahtr
eife
n
nab
eT
INY
INT
(1)
UN
SIG
NE
DN
OT
NU
LL
DE
FA
ULT
00=
Shim
ano,≥
1=C
ampa
kom
pat
ibel
TA
BLE
Reifen
Spalt
ennam
eEig
ensc
haft
en
Bem
erk
ung
arti
keln
um
mer
CH
AR
(6)
PR
IMA
RY
KE
Ykunst
lich
erei
ndeu
tige
rSch
luss
el
gew
icht
SM
ALLIN
TU
NSIG
NE
DN
OT
NU
LL
DE
FA
ULT
0das
Gew
icht
der
Kom
pon
ente
nam
eVA
RC
HA
R(1
00)
NO
TN
ULL
der
Nam
eder
Kom
pon
ente
bes
chre
ibung
TE
XT
NO
TN
ULL
eine
schon
eB
esch
reib
ung
pre
isFLO
AT
NO
TN
ULL
DE
FA
ULT
0das
Wic
hti
gste
bild
VA
RC
HA
R(4
0)N
OT
NU
LL
UR
Lzu
einem
Art
ikel
bild
durc
hm
esse
rSM
ALLIN
TU
NSIG
NE
DN
OT
NU
LL
DE
FA
ULT
0D
urc
hm
esse
rdes
Lau
frad
es,in
mm
bre
ite
TIN
YIN
TU
NSIG
NE
DN
OT
NU
LL
DE
FA
ULT
0B
reit
edes
Rei
fens:
19m
m-
25m
m
reifen
art
TIN
YIN
T(1
)U
NSIG
NE
DN
OT
NU
LL
DE
FA
ULT
00=
Sch
lauch
-,≥
1=D
rahtr
eife
n
Diplomarbeit 87
ANHANG A. TABLES DER DATENBANKTA
BLE
Kurb
els
atz
Spalt
ennam
eEig
ensc
haft
en
Bem
erk
ung
arti
keln
um
mer
CH
AR
(6)
PR
IMA
RY
KE
Ykunst
lich
erei
ndeu
tige
rSch
luss
el
gew
icht
SM
ALLIN
TU
NSIG
NE
DN
OT
NU
LL
DE
FA
ULT
0das
Gew
icht
der
Kom
pon
ente
nam
eVA
RC
HA
R(1
00)
NO
TN
ULL
der
Nam
eder
Kom
pon
ente
bes
chre
ibung
TE
XT
NO
TN
ULL
eine
schon
eB
esch
reib
ung
pre
isFLO
AT
NO
TN
ULL
DE
FA
ULT
0das
Wic
hti
gste
bild
VA
RC
HA
R(4
0)N
OT
NU
LL
UR
Lzu
einem
Art
ikel
bild
kett
enbla
ttT
INY
INT
UN
SIG
NE
DN
OT
NU
LL
DE
FA
ULT
21=
com
pac
t,2=
nor
mal
,3=
3er
Bla
tt
zaeh
ne
vorn
eT
INY
INT
UN
SIG
NE
DN
OT
NU
LL
DE
FA
ULT
0A
nza
hlZah
ne
aufdem
groß
enB
latt
zaeh
ne
mit
teT
INY
INT
UN
SIG
NE
DN
ur
bei
3er
Ket
tenbla
tter
zaeh
ne
hin
ten
TIN
YIN
TU
NSIG
NE
DN
OT
NU
LL
DE
FA
ULT
0A
nza
hlZah
ne
aufdem
kle
inen
Bla
tt
laen
ge1
FLO
AT
NO
TN
ULL
DE
FA
ULT
0kurz
este
Lan
geder
Kurb
el
...
...
...
laen
ge7
FLO
AT
NO
TN
ULL
DE
FA
ULT
0la
ngs
teLan
geder
Kurb
el
kom
pat
ibel
TIN
YIN
T(1
)U
NSIG
NE
DN
OT
NU
LL
DE
FA
ULT
00=
Shim
ano,
1=C
ampa,≥
2=bei
de
TA
BLE
Bre
mse
n
Spalt
ennam
eEig
ensc
haft
en
Bem
erk
ung
arti
keln
um
mer
CH
AR
(6)
PR
IMA
RY
KE
Ykunst
lich
erei
ndeu
tige
rSch
luss
el
gew
icht
SM
ALLIN
TU
NSIG
NE
DN
OT
NU
LL
DE
FA
ULT
0das
Gew
icht
der
Kom
pon
ente
nam
eVA
RC
HA
R(1
00)
NO
TN
ULL
der
Nam
eder
Kom
pon
ente
bes
chre
ibung
TE
XT
NO
TN
ULL
eine
schon
eB
esch
reib
ung
pre
isFLO
AT
NO
TN
ULL
DE
FA
ULT
0das
Wic
hti
gste
bild
VA
RC
HA
R(4
0)N
OT
NU
LL
UR
Lzu
einem
Art
ikel
bild
Diplomarbeit 88
ANHANG A. TABLES DER DATENBANK
TA
BLE
Sch
alt
gru
ppe
Spalt
ennam
eEig
ensc
haft
en
Bem
erk
ung
arti
keln
um
mer
CH
AR
(6)
PR
IMA
RY
KE
Ykunst
lich
erei
ndeu
tige
rSch
luss
el
gew
icht
SM
ALLIN
TU
NSIG
NE
DN
OT
NU
LL
DE
FA
ULT
0das
Gew
icht
der
Kom
pon
ente
nam
eVA
RC
HA
R(1
00)
NO
TN
ULL
der
Nam
eder
Kom
pon
ente
bes
chre
ibung
TE
XT
NO
TN
ULL
eine
schon
eB
esch
reib
ung
pre
isFLO
AT
NO
TN
ULL
DE
FA
ULT
0das
Wic
hti
gste
bild
VA
RC
HA
R(4
0)N
OT
NU
LL
UR
Lzu
einem
Art
ikel
bild
kett
enbla
ttT
INY
INT
UN
SIG
NE
DN
OT
NU
LL
DE
FA
ULT
21=
com
pac
t,2=
nor
mal
,3=
3er
Bla
tt
her
stel
ler
TIN
YIN
T(1
)U
NSIG
NE
DN
OT
NU
LL
DE
FA
ULT
01=
Shim
ano,≥
1=C
ampag
nol
o
lenke
rart
TIN
YIN
T(1
)U
NSIG
NE
DN
OT
NU
LL
DE
FA
ULT
00=
nor
mal
,≥
1=A
erol
enke
r
kass
ette
min
TIN
YIN
TU
NSIG
NE
DN
OT
NU
LL
DE
FA
ULT
0A
nz.
Zah
ne
kle
inst
esR
itze
l
kass
ette
max
TIN
YIN
TU
NSIG
NE
DN
OT
NU
LL
DE
FA
ULT
0A
nz.
Zah
ne
groß
tes
Rit
zel
TA
BLE
Pedale
Spalt
ennam
eEig
ensc
haft
en
Bem
erk
ung
arti
keln
um
mer
CH
AR
(6)
PR
IMA
RY
KE
Ykunst
lich
erei
ndeu
tige
rSch
luss
el
gew
icht
SM
ALLIN
TU
NSIG
NE
DN
OT
NU
LL
DE
FA
ULT
0das
Gew
icht
der
Kom
pon
ente
nam
eVA
RC
HA
R(1
00)
NO
TN
ULL
der
Nam
eder
Kom
pon
ente
bes
chre
ibung
TE
XT
NO
TN
ULL
eine
schon
eB
esch
reib
ung
pre
isFLO
AT
NO
TN
ULL
DE
FA
ULT
0das
Wic
hti
gste
bild
VA
RC
HA
R(4
0)N
OT
NU
LL
UR
Lzu
einem
Art
ikel
bild
Diplomarbeit 89
ANHANG A. TABLES DER DATENBANK
TA
BLE
Satt
els
tuetz
e
Spalt
ennam
eEig
ensc
haft
en
Bem
erk
ung
arti
keln
um
mer
CH
AR
(6)
PR
IMA
RY
KE
Ykunst
lich
erei
ndeu
tige
rSch
luss
el
gew
icht
SM
ALLIN
TU
NSIG
NE
DN
OT
NU
LL
DE
FA
ULT
0das
Gew
icht
der
Kom
pon
ente
nam
eVA
RC
HA
R(1
00)
NO
TN
ULL
der
Nam
eder
Kom
pon
ente
bes
chre
ibung
TE
XT
NO
TN
ULL
eine
schon
eB
esch
reib
ung
pre
isFLO
AT
NO
TN
ULL
DE
FA
ULT
0das
Wic
hti
gste
bild
VA
RC
HA
R(4
0)N
OT
NU
LL
UR
Lzu
einem
Art
ikel
bild
laen
geSM
ALLIN
TU
NSIG
NE
DN
OT
NU
LL
DE
FA
ULT
0ve
rste
llbar
eLan
geder
Stu
tze,
inm
m
durc
hm
esse
rFLO
AT
UN
SIG
NE
DN
OT
NU
LL
DE
FA
ULT
0D
urc
hm
esse
rdes
Sat
telroh
rs,in
mm
TA
BLE
Satt
el
Spalt
ennam
eEig
ensc
haft
en
Bem
erk
ung
arti
keln
um
mer
CH
AR
(6)
PR
IMA
RY
KE
Ykunst
lich
erei
ndeu
tige
rSch
luss
el
gew
icht
SM
ALLIN
TU
NSIG
NE
DN
OT
NU
LL
DE
FA
ULT
0das
Gew
icht
der
Kom
pon
ente
nam
eVA
RC
HA
R(1
00)
NO
TN
ULL
der
Nam
eder
Kom
pon
ente
bes
chre
ibung
TE
XT
NO
TN
ULL
eine
schon
eB
esch
reib
ung
pre
isFLO
AT
NO
TN
ULL
DE
FA
ULT
0das
Wic
hti
gste
bild
VA
RC
HA
R(4
0)N
OT
NU
LL
UR
Lzu
einem
Art
ikel
bild
Diplomarbeit 90
Anhang B
Screenshots
Abbildung B.1: Die Startseite
Diplomarbeit 91
ANHANG B. SCREENSHOTS
Abbildung B.2: Konfigurator fur Triathlonrader
Diplomarbeit 92
ANHANG B. SCREENSHOTS
Abbildung B.3: Konfigurator fur Rennrader
Diplomarbeit 93
Quellenverzeichnis
[Bik06] MAXX Bikes. Bike Configurator.
http://www.maxx.de/fr inhalt bikes road.htm, 2006.
[Bra05] Christian Braun. PHP5 fur Dummies. Wiley-VCH, 2005.
[Cat06] Java Catalog. Java Enterprise System Lizenz.
http://catalog.sun.com/, 2006.
[Con04] Contentmanager.de. Case study: Der wechsel von Java zu PHP bei der
Augsburger Allgemeinen Zeitung.
http://www.contentmanager.de/community/forum/4/1901/1912.html,
2004.
[Gle03] Daniel Gleim. Multimedia-Sprachen und Standarts im Internet.
www-ra.informatik.uni-tuebingen.de/lehre/ws02/pro internet
ausarbeitung/proseminar gleim ws02.pdf, 2003.
[Hat02] Jens Hatlak. PHP Hypertext Preprocessor.
http://jens.hatlak.de/php.php4, 2002.
[Hom06a] Java Homepage. Connected Limited Device Configuration.
http://java.sun.com/products/cldc/overview.html, 2006.
[Hom06b] Java Homepage. Java SE Hotspot.
http://java.sun.com/javase/technologies/hotspot.jsp, 2006.
[IBM06] IBM. Ibm Software - DB2 Product Family.
http://www-306.ibm.com/software/data/db2/, 2006.
Diplomarbeit 94
LITERATURVERZEICHNIS
[ID06] IST-Dresden. Java Technologie.
http://www.ist-dresden.de/technology/java.html, 2006.
[Ihn06] Oliver Ihns. Umkehr der Beweislast.
JavaMagazin.de, 2006.
[Ind06] Indexpage.ch. Web-sprachen.
http://www.indexpage.ch/web-codes/html/praxis/websprachen.php,
2006.
[Mor02a] Rene Morschhauser. Nachteile von PHP.
http://www.mathematik.uni-ulm.de/sai/ws01/portalsem/rene/
internetportale/node27.html, 2002.
[Mor02b] Rene Morschhauser. Vorteile von PHP.
http://www.mathematik.uni-ulm.de/sai/ws01/portalsem/rene/
internetportale/node26.html, 2002.
[Nor03] D’Arcy Norman. PHP vs. Java commentary from Raible.
http://www.darcynorman.net/2003/08/24/php-vs-java-commentary-
from-raible, 2003.
[NR05] Neon-Radsport. Rennrad Konfigurator.
http://www.neon-radsport.de/konfigurator.php?type=Rennrad, 2005.
[Ora06] Oracle. Oracle Database 10g.
http://www.oracle.com/technology/products/database/oracle10g/
index.html, 2006.
[osC06] osCommerce. Deutsche osCommerce Homepage.
http://www.oscommerce.de/, 2006.
[Tut05] Tutorials.de. Zugriff auf eine Klasseninstanz.
http://www.tutorials.de/forum/php/212138-zugriff-auf-eine-
klasseninstanz-innerhalb-einer-funktion-einer-anderen-klasse.html,
2005.
Diplomarbeit 95
LITERATURVERZEICHNIS
[Typ06] Typo3. What is Typo3?
http://typo3.com/About.1231.0.html, 2006.
[WC04] Webwork-Community.net. Java und Web.
http://www.webwork-community.net/posting4895 47 0.html, 2004.
[Wik06a] Wikipedia.de. Geschichte Javas.
http://de.wikipedia.org/wiki/Java (Technologie)#Geschichte Javas,
2006.
[Wik06b] Wikipedia.de. Geschichte von PHP.
http://de.wikipedia.org/wiki/PHP/FI#Geschichte, 2006.
[XF04] XHTML-Forum. Vorteile Java gegenuber PHP?
http://xhtmlforum.de/288066-post14.html, 2004.
Fur die Entwicklung verwendete Literatur
[Ogg05] Michael Kofler ; Bernd Oggl. PHP 5 & MySQL 5. Addison-Wesley, 2005.
[Hir04] Jens Ferner ; Elena Hirte. PHP5 Rezepte. Data Becker, 2004.
[Hir05] Elena Hirte. PHP5 & MySQL. Data Becker, 2005.
[Kra04] Jorg Krause. PHP 5 - Grundlagen und Profiwissen. Hanser, 2004.
[Kau04] Mechthild Kaufer. (X)HTML. Data Becker, 2004.
[McC04] Bill McCarty. PHP-Grundlagen. mitp, 2004.
[Nef03] Stefan Munz ; Wolfgang Nefzger. JavaScript - Referenz. Franzis, 2003.
[Sel06] SelfHTML. SelfHTML - HTML-Dateien selbst erstellen. de.selfhtml.org,
2006.
[Tra05] David Sklar ; Adam Trachtenberg. PHP-Kochbuch. O’Reilly, 2005.
[Zed02] Dirk Zedler. Das Rennrad im Selbstaufbau. Delius Klasing, 2002.
Diplomarbeit 96
Recommended