JSON und PHP Objekte

Da ich gerade an einem Projekt arbeite, welches sehr viele AJAX / Javascript Funktionen nutzt, um Daten asynchron zu ermitteln, bin ich auf ein Problem gestoßen, welches es wohl schon länger gibt. Die PHP Funktion json_encode kann beim Erstellen eines JSON Strings eines Objektes keine privaten und geschützten Eigenschaften des Objektes ermitteln. Die Lösung für dieses Problem ist eigentlich denkbar einfach.

Private und geschütze Eigenschaften in JSON Strings

Ich arbeite momentan mit einer auf meine Bedürfnisse angepassten Version des Woltlab Community Frameworks. Ich habe die Datenbankklasse gegen die PHP eigene PDO Klasse getauscht, die SPL Autoload Funktion integriert und einige kleinere Anpassungen vorgenommen. Seit heute ist auch die abstrakte Data Holder Klasse ein wenig modifiziert, um zu gewährleisten, dass die als protected deklarierte Data Eigenschaft, welche alle ermittelten Daten eines Daten Objekts beinhaltet, auch als JSON String zurückgegeben werden kann.

Die Änderungen sind denkbar einfach. Zunächst wird das IteratorAggregate in die Klasse DatabaseObject implementiert, welches später einfach ermöglicht einen fremden Iterator zu erzeugen.

1
class DatabaseObject implements IteratorAggregate {

Zudem erhält die Klasse DatabaseObject eine neue Methode:

1
2
3
4
5
6
7
8
9
10
11
12
/**
 * Returns an Iterator, to fix the lack of supply of non-public properties in json_encode()
 * @return ArrayIterator
 */
public function getIterator() {
	$tmpAry = array();
	foreach ($this->data as $key => $value) {
		$tmpAry[$key] = $value;
	}
 
	return new ArrayIterator($tmpAry);
}

Der Funktionsaufruf sieht dann einfach so aus:

1
2
echo json_encode($dataObj->getIterator());
// Beispiel: {"commentID":"1","commentEmail":"info@mm-newmedia.de","commentText":"Dies ist ein Test Kommentar.","commentDateTime":"2010-07-12 18:02:05"}

Somit ist das DataBase Objekt des Woltlab Community Frameworks auch in der Lage private und geschützte Daten zur Erstellung eines JSON Strings zu liefern.
In diesem Sinne möchte ich auch noch mal aangel at spam dot com danken, der den entsprechenden Denkanstoß zur Lösung des Problems innerhalb der User Kommentare zur PHP Funktion json_encode() geliefert hat.

Wrong Document Error! WTF?!?!

Heute Morgen war es dann mal wieder soweit. Ich habe für einen Kunden eine OOP Klassenstruktur erstellt, die es ermöglicht Settings für Formularfelder aus ini Dateien auszulesen und gleichzeitig aus diesen Angaben valide XHTML Eingabefelder zu generieren. Also ähnlich, wie es das Zend Framework eigentlich auch macht. Nur eben nicht mit hartgecodetem HTML, sondern mit dem DomDocument Objekt. Interfaces, abstrakte Klassen, Vererbungen … und dann das: Wrong Document Error!

DomDocument::importNode() löst so manches Problem

DomDocument::importNode()

Die Exception wurde durch eine DomDocument Instanz ausgelöst. Ich habe nämlich versucht ein DomElement Objekt einer anderen Instanz mittels der Methode appendChild() in eine andere DomDucment Instanz einzugliedern. Bahnhof? Ja, ganz ganu! Vereinfacht ausgedrückt bedeutet dies einfach, dass man fremde Elementknoten nicht so einfach in bestehende DOM Instanzen einbinden kann. Wieso dies so ist, konnte ich bisher noch nicht in Erfahrung bringen. Aber auch hierfür gibt es sicherlich einen handfesten Grund. Ich allerdings stand zunächst erst mal vor einem Problem. Wie bekomme ich das fremde DomElement Objekt in die bestehende DomDocument Instanz?

PHP bietet auch hierfür eine elegante Lösung. Mit der Methode importNode() des DomDocument Objekts lässt sich das geschilderte Problem elegant lösen. Mit importNode führt man das erzeugte, fremde Element in eine bestehende DomDocument Instanz ein. Erst dann kann man das nun importierte Element mittels appendChild in die bestehende Struktur einfügen. Das Beispiel, welches in der PHP Dokumentation gezeigt wird, verdeutlicht das Problem nochmal genauer.

Da haben wir heute also wieder etwas gelernt. Ich muss wirklich sagen, dass mich PHP auch jetzt noch immer wieder überrascht.

glob() vs. DirectoryIterator

Nach dem hier und hier die PHP Funktion glob() als besonders revolutionär bzw. exotisch hervorgehoben wurde, muss ich heute die Euphorie ein wenig dämpfen.  Schon letztes Jahr hatte ich mit den Nachteilen von glob() bei der Umsetzung des Statistik Plugins für die Software easyLink zu kämpfen. Wegen den Problemen habe ich auf das Schweizer Taschenmesser jeder PHP5 Distribution zurückgegriffen: Die Standard PHP Library, kurz: SPL. Die Vorteile der DirectoryIterator Klasse im direkten Vergleich zur glob() Funktion möchte ich hier einmal erleutern.

Die Funktion glob()

Auf den ersten Blick bietet die Funktion glob() eine Menge Vorteile in Hinblick auf die bisher verwendeten Funktionen opendir(), readdir() und closedir(). Mit nur einer Funktion statt der drei eben genannten kann ich den Verzeichnisinhalt ermitteln. Zur Veranschaulichung folgendes Codebeispiel:

1
2
3
4
$files = array();
foreach (glob('*') as $file) {
    $files[] = $file;
}

In einer einfachen foreach()-Schleife ermittelt man so den kompletten Inhalt eines Verzeichnisses. Soweit sieht das alles auch sehr gut aus. Nur treten im praktischen Einsatz diverse Probleme auf. Die Funktion gibt bei PHP Versionen < 5.3 ein false statt eines, wie in der Dokumentation beschrieben, leeren Arrays zurück. Somit ist es manchmal nicht möglich zwischen einer leeren Ergebnismenge und einem aufgetretenen Fehler zu unterscheiden. Weiterhin ist die Funktion nicht auf allen Systemen verfügbar. Darüber hinaus gibt es Provider, die PHP so konfiguriert haben, dass glob() nicht angewendet werden kann.

Die DirectoryIterator Klasse

Bei allen Nachteilen, die die Funktion glob() auf den zweiten Blick aufwirft, gibt es eine sinnvolle Alternative. Die SPL bringt die DirectoryIterator Klasse mit, die es ermöglicht einen Verzeichnisinhalt zu ermitteln. Anders als die Funktion glob() stellt jeder ermittelte Inhalt (eine Datei oder ein Verzeichnis) ein eigenes Objekt dar, welches gerade den Umgang in OOP sehr viel einfacher bzw. komfortabler macht. Die Handhabung der DirectoryIterator Klasse ist ebenso einfach die der Funktion glob().

1
2
3
4
$files = array();
foreach (new DirectoryIterator(dirname(__FILE__)) as $file) {
    $files[] = $file->getFilename();
}

In diesem kleinen Beispiel sieht man auch die Vorteile. Jedes DirectoryIterator Objekt hat seine eigenen Methoden, die den Umgang mit dem Verzeichnisinhalt sehr viel einfacher machen.

Der direkte Vergleich

Auch im direkten Vergleich lässt die DirectoryIterator Klasse die glob() Funktion weit hinter sich. Ich habe die beiden oben genanntn Beispiel in einer Schleife jeweils 1.000 mal durchlaufen lassen. Es wurde jeweils ein Verzeichnis mit 10 Inhalten (4 Untererzeichniss und 6 Dateien) durchlaufen. Während meinen Tests hat die Funktion glob durchschnittlich 0,625 Sekunden für die Ermittlung des Verzeichnisinhaltes benötigt. Die DirectoryIterator Klasse hat die gleiche Aufgabe in durchschnittlich 0,172 Sekunden erledigt. Somit ist die DirectoryIterator Klasse gute 400% schneller als die Funktion glob().

Fazit

Die Funktion glob() ist also nicht die Wunderfunktion, an die man nicht vorbei kommt. Natürlich stellt sie zu älteren Herangehensweisen eine deutliche Erleichterung dar. Bei all den Nachteilen, die diese Funktion aber mit sich bringt, ziehe ich persönlich immer die DirectoryIterator Klasse vor. Sie arbeitet sehr viel schneller und bietet entsprechende Methoden, die das Handling von Verzeichnisinhalten sehr vereinfachen. Zudem wirft die DirectoryIterator Klasse eine Exception, wenn das angegebene Verzeichnis nicht ermittelt werden kann. Die Funktion glob() hingegen verhält sich ausgesprochen unvorhersehbar, das sie unter Umständen noch einen Bug aufweist.

Assoziative Arrays mit Javascript

Ich als PHP Entwickler habe öfter mal das Problem, dass ich die Behandlung von assoziativen Arrays, so wie ich sie von PHP mit foreach- oder for-Schleifen kenne, vermisse. Vielleicht sollte ich jetzt sagen, dass ich das Problem hatte. Denn die Lösung ist verdammt einfach.

Assoziative Arrays mit JavascriptBisher habe ich für gute Javascript Lösungen mit PHP Feeling immer auf der guten alten php.js Website nachgesehen, um das Handling von Daten in Javascript zu erleichtern. Letztendlich sind dort auch viele PHP Funktionen mit Javascript umgesetzt, so dass man diese wie gewohnt auch in Javascript nutzen kann, nur bläht sich dadurch natürlich manchmal der eigentliche Code extrem auf. Aus diesem Grund sollte man natürlich auf die Javascript eigenen Methoden zurückgreifen, sofern sie denn ausreichend sind.

Anwendungsbeispiel

Angenommen wir haben ein Javascript Objekt mit mehreren Inhalten. Javascript Objekte können in Javascript generell wie ein Assoziatives Array behandelt werden. Unser Javascript Objekt soll einfach mal so aussehen:

function MyObject() {
    this.Sender = 'Marcel';
    this.Empfaenger = 'Jemand Anderes';
    this.Betreff = 'Meine Betreffzeile';
    this.Text = 'Lorem Ipsum';
}

Unser Objekt hat also vier Member Sender, Empfaenger, Betreff und Text. Würden wir uns in einer PHP Umgebung befinden, könnte man die Schlüssel und Werte einfach mit einer foreach-Schleife ermitteln. Im Grunde genommen funktioniert dies in Javascript genau so einfach:

var data = new MyObject();
for (var i in data) {
    alert('data[\'' + i + '\'] hat den Wert ' + data[i] + '.');
}

Diese kleine for-Schleife gibt uns nun die Schlüssel und die Werte eines Javascript Objektes aus, welches in diesem Fall wie ein assoziatives Array behandelt wird. In der Variablen i werden die Schlüssel des Objektes gespeichert. Man kann also direkt auf diese Variable zugreifen, um den Schlüssel zu verwenden. Um auf einen Wert zurückzugreifen, benutzt man wie gewohnt das eigentliche Objekt mit der Variablen i als Schlüssel. Man erzielt hiermit genau das gleiche key / value Verhalten wie man es von einer foreach-Schleife aus PHP kennt.

Also, Javascript ist keine Zauberei – auch wenn es manchmal eher an einen großen Krampf erinnert. Um es in Markus Kafka’s Worten zu sagen: Haben wir wieder was gelernt! ;)

Die Hatenight mit neuen Funktionen

Bereits gestern habe ich neue Funktionen auf Serdar Somuncu’s Hatenight eingefügt. Dem Portal, auf dem der Hassias jedem Samstag eine neue Folge seiner Hasspredigten veröffentlicht. Hört sich beim ersten Lesen vielleicht schlimmer an, als es eigentlich ist. Denn letztendlich geht es hier um Kabarett und Satire. Aber gut …

Serdar Somuncu's Hatenight

Serdar Somuncu's Hatenight

Ab sofort ist es für registrierte Hassisten mögich die Videos der Hatenight in eigene Seiten einzubetten. Diese Funktionalität kennt man eigentlich von so gut wie allen Videoportalen. Es wird ein HTML Code ausgeliefert, der kopiert und in die eigene Webseite eingefügt werden kann. Somit wird der Videoplayer der Hatenight Seite auch auf externen Seiten dargestellt. Hier ist zum Beispiel die Folge vom letzten Samstag zu sehen.

In den kommenden Tagen wird auf Hatenight.com ein Ajax Chat eingerichtet, so dass die Kommunikation in der gesamten Comunity stark verbessert wird. Zudem wird die Kommentarfunktion zu den Videos für alle Besucher der Seite geöffnet, so dass auch hier die Kommunikation untereinander stark gefördert wird. Es stecken noch einige starke Funktionen in der Pipeline. Ich bin gespannt, wo das noch hinführt. ;)

Mountaingrafix Webinare zu easyLink V3

Die Tage bekam ich über XING eine Einladung zu einem easyLink Webinar, welches sich mit der Erstellung von Plugins beschäftigte. Hierbei handelte es sich bereits um das zweite Webinar, welches unmittelbar auf dem ersten Webinar, an welchem ich nicht teilgenommen habe, aufsetzte. Da dachte ich mir doch einfach mal, dass ich an diesem Webinar mal teilnehme. Vielleicht lernt man ja noch was.

Die neuen easyLink Webinare

easyLink Webinar Plugins Teil 2

Kurz vor 19.00 Uhr meldete ich mich über die von Mountaingrafix für alle Teilnehmer bereitgestellte Software, welche man über einen Link, der in der Einladung enthalten war, herunter laden konnte, an. Es waren schon einige easyLink User im virtuellen Klassenraum vorhanden, so dass man sich schon vor Beginn via VoIP und Headset austauschen konnte. Man begrüsste sich nett und dann ging es auch schon los.

Sascha Schoppengerd leitete das Webinar und zeigte anhand seiner Entwicklungsumgebung (Zend Studio und XAMPP) den grundsätzlichen Aufbau eines Plugins, welches die Twitter Timeline eines bestimmten Users auslesen sollte. Zunächst zeigte er auf, wie sich die Klassenstruktur im Plugin selbst und die von der Plugin Engine vorgegebenen Methoden definieren. Schon hier konnte ich für mich einige sehr interessante Details aufschnappen, die ich in kommenden Plugins anwenden werde. Vom Grundaufbau ging es dann weiter. Es wurde erklärt, wie man Einstellungen eines Plugins – in diesem Fall war es der Name eines Twitter Users – im easyLinks System speichern kann. Auch hierfür gibt es innerhalb der objektorientierten Struktur von easyLink vordefinierte Funktionen, die man in seinen eigenen Plugins nutzen kann. Über den nun festgelegten Twitter User zeigte Sascha, wie man die Twitter Timeline auslesen und im Frontend von easyLink darstellen kann.

Im Grunde genommen umfasste das Webinar die komplette Erstellung des Twitter Plugins mit anschaulichen Beispielen und vielen Erklärungen. Es wurde immer darauf geachtet, ob Fragen aufkamen. Für mich persönlich war das gezeigte verständlich aufbereitet und anhand der gezeigten Beispiele auch einfach zu verstehen. Ich denke, dass auch jemand, der nicht tagtäglich mit der PHP Programmierung zu tun hat, hier einen genauen Einblick in die Möglichkeiten der easyLink Plugin Engine erhalten konnte.

Ich bin Überrascht, dass nach dem eigentlichen Webinar dann auch noch eine Nacharbeitung in Form eines ZIP Archives kam, welches das im Webinar erstellte Plugin mit Kommentaren der Entwickler enthielt. Also eine solide Basis, um selbst mit der Programmierung von Plugins zu beginnen.

Das nächste Webinar findet bereits nächsten Dienstag, den 23.02.2010, statt und wird sich um die Erstellung von Templates drehen.  Ich bin gespannt.

Neues kostenloses easyLink Plugin: Category Dumper Light

Bereits für die easyLink Version 2.x gab es eine eher etwas umständliche Möglichkeit eine vorgefertigte Kategoriestruktur in easyLink zu importieren. Dieses Gedanken habe ich nach dem Lesen eines Artikels im Mountaingrafix Forum aufgegriffen und ein Plugin für easyLink 3.0.9 programmiert, welches den komfortablen Import einer XML Datei, welche eine Kategoriestruktur enthält, in die Datenbank ermöglicht.

Category Dumper Light for easyLink 3Das Plugin stellt die kostenlose Vorgängerversion des für Anfang März geplanten umfangreicheren Category Dumper Plugins dar. Dann wird es auch möglich sein Kategoriestrukturen aus der Datenbank als wiederverwendbare XML Datei zu exportieren. Ebenso werden weitere Steuermechanismen vorhanden sein, die es z.B. ermöglichen die Kategorietabelle der Datenbank vorher zu leeren oder den User warnen, wenn bereits Einträge in vorhandenen Kategorien in der Datenbank enthalten sind.

Die verwendete Technik

Im Grunde genommen ist es ein sehr einfaches Plugin, welches auf die durch easyLink 3 gegebene Struktur zurückgreift. Mittels der Standard PHP Library (SPL) wird via DirectoryIterator ein bestimmtes Verzeichnis ausgelesen, in dem die XML Dateien liegen. Sobald sich der User für eine XML Datei entschieden hat,  wird diese XML Datei mittels der PHP eigenen DOM Klassen aufbereitet und mit dem easyLink Kategorie Daten-Modell in die Datenbank eingefügt. Im Grunde genommen also nichts technisch herausragendes. Etwas eher einfaches, was komfortabel und schnell arbeitet.

Installation

Laden Sie sich einfach das ZIP Archiv herunter. Das darin enthaltene Verzeichnis muss lediglich in das /plugin/ Verzeichnis ihrer easyLink Installation kopiert werden. Wechseln Sie dann in das Backend Ihrer easyLink Installation und aktivieren Sie das Plugin unter dem Menüpunkt “plugins”. Es sollte nun ein weiterer Menüpunkt “Kategorie Dumper Light” in ihrem Menü erscheinen. Hierüber können Sie das Plugin aufrufen. Im Lieferumfang ist bereits eine vorgefertigte Kategoriestruktur mit 150 Kategorien enthalten.

Download

Category Dumper Light

Viel Spaß mit diesem kostenlosen Plugin. Sollten Sie Anregungen oder Fragen haben, können diese hier natürlich gern in den Kommentaren hinterlassen werden.

Was war in den letzten Wochen?

Gut, ich habe den Blog ein paar Wochen nicht gepflegt und wenige Informationen über das, was ich derzeit mache und plane an die Öffentlichkeit kommen lassen. Ich möchte heute einfach ein paar Worte über die letzten Wochen verlieren, so dass ihr auch mal einen Überblick bekommt, was gemacht wurde und gemacht wird.

Was war?

In den letzten Wochen wurde mit Hochdruck an der entgültigen Fertigstellung des IAK Partner Programms gearbeitet. Im Team mit den Programmierern der IAK GmbH entwickelte man ein ausgereiftes Mammutprojekt, welches es so am Markt noch nicht gibt. Ich persönlich war größtenteils für die Entwicklung eines Webservices eingeteilt, über den man zukünftig die IAK Tarifrechner nutzen kann … von jedem x-beliebigen Server, der mit Soap / WSDL etwas anzufangen weiß. So wird es möglich sein aufgrund dieses Webservices seine eigenen Rechner zu programmieren, die an die eigenen individuellen Gegebenheiten angepasst sind. Gegenüber den Mitbewerbern heißt dies, dass den Partnern zukünftig keine Grenzen mit in puncto Design und Funktionalität gesetzt sind. Dies lässt dem Partner einen enormen Spielraum und es wird endlich möglich sein die Angebote der IAK ohne Iframe nahtlos in die Websites zu integrieren, so dass dem Besucher der Website noch nicht mal mehr auffallen wird, dass es sich bei dem dargestellten Rechner um ein Partnerprogramm handelt. In Kürze werde ich hier noch ein paar Beispiele für diese API liefern, die das geschriebene noch mal extrem verdeutlichen werden.

Neben der zeitintensiven Entwicklung für die IAK GmbH wurde dann auch endlich das Frontend für Serdar Somuncu’s Hatenight fertiggestellt. Im Grunde genommen wurden hier Funktionen entwickelt, die man schon von bekannten Video Portalen kennt. In Kombination mit FFMPEG ist es auf der Hatenight Seite möglich Videos hochzuladen. Es wurden einige wahnwitzige Ideen verwirklicht. Momentan arbeite ich an den letzten Feinheiten des Backends.

Aufgrund des Erfolges der beiden Ostendorf Events habe ich mich dann auch noch mal mit Benjamin Vöge von Fast Lane Events zusammen gesetzt und überlegt, welche der stattgefundenen Entwicklungen für weitere Projekte erfolgreich sein könnten. Ein Brainstorming mit Benny ist immer sehr fruchtbar und auch hier sind neue Ideen entstanden, die sehr vielversprechend sind. So saßen wir letzten Freitag bei Mc Donald’s knappe zwei Stunden und haben zusammen ein weiteres Kundenprojekt geplant. In Beckum ist sowas immer ziemlich spannend, da hier Menschen mit Laptops bei Mc Donald’s irgendwie doch noch ein wenig außergewöhnlich sind.

Was wird?

Aufgrund der vielen Arbeit sind natürlich eigene Projekte auf der Strecke geblieben. So stecken noch zwei umfangreiche Plugins für die Branchenbuchsoftware easyLink in der Pipeline, die aus Zeitmangel zurückgestellt wurden. Aufgrund des gestrigen Webinars mit den easyLink Entwicklern bin ich aber guter Dinge, dass die Arbeiten bis zum zweiten Quartal abgeschlossen sein werden. Natürlich wird bis dahin auch der damit verbundene MM Newmedia Shop online gehen, über den die Plugins dann vertrieben werden. Ebenso wird derzeit an der Fertigstellung eines neuen Designs für diesen Blog gearbeitet, da er doch etwas altbacken daher kommt. Um es in meinen eigenen Worten zu sagen: Da muss Raketentechnik her man!

Die Planungen gehen auch in Richtung des IAK Partnerprogramms. Da die Entwicklung eines eigenen Rechners aufgrund der angebotenen Schnittstelle für unversierte Teilnehmer absehbar doch zu einen Problem werden wird, biete ich natürlich meine Dienstleistungen an. Hier wird es zwei Versionen geben. Die erste Variante wird daraus hinauslaufen, dass der Kunde ein fertiges Design für seinen Rechner vorlegt und ich nur die technische Seite abarbeite. Die zweite Variante wird sowohl die Erstellung des Designs als auch die technische Lösung beinhalten. Somit sollten alle Bedürfnisse eines Interessenten abgedeckt sein.

Die IAK GmbH hat schon angekündigt, dass einige bestehende Online Vergleichsrechner grundlegend verbessert werden sollen. Hier steht zunächst die Planung für die technische Neuentwicklung eines Vergleichsrechners zur Gebäudeversicherung an. Ein technisches Monster, da hier so gut wie alle Versicherungsgesellschaften am Markt ihr eigenes Süppchen kochen und die Berechnungsmethoden einfach wahnwitzig variabel sind. Eine kleine Herausforderung gleich zu Jahresbeginn. Technisch gesehen wird es hier auf eine objektorientierte Lösung hinaus laufen.

Also … es gibt viel zu tun!

Wir suchen Freelancer (Web Developer PHP w/m)

Du bist Freelancer und bist im Internet groß geworden, bringst die entsperchende Erfahrung mit dem Umgang mit Webtechniken mit und hast Lust in einem jungen, engagiertem Team zu arbeiten? Dann ist das jetzt Deine Chance! Wenn Du Lust hast an interessanten Projekten wie E-Commerce Lösungen, Shoppingportalen oder anspruchsvollen Lösungen für CMS zu arbeiten, melde Dich doch einfach mal bei uns.

Deine Aufgaben

  • Planung und technische Konzeption von Webapplikationen unter Anwendung von Objektorientierter Programmierung im Bereich PHP (OOP)
  • Entwicklung von Datenbankarchitekturen
  • Erstellung von barrierearmen XHTML / CSS Layouts

Interesse geweckt?

Wenn Du Interesse haben solltest, freuen wir uns über Deine aussagekräftige Bewerbung (inkl. aussagekräftiger Referenzen).  Bitte sende uns Deine Unterlagen unter Angabe Deiner Honorarvorstellung und Deines frühest möglichen Starttermins per E-Mail an: info@mm-newmedia.de

Neue Websites für Ostendorf Events

Die Ostendorf Kubbing Website

Die Ostendorf Kubbing Website

Für die beiden Events Ostendorf Klubbing und Ostendorf Ü30 habe ich die beiden Event Websites nun endlich fertigstellen können. In Zusammenarbeit mit Fast Lane Event, welche das Layout und sämtliches Fotomaterial für die beiden Seiten lieferte, wurden zwei vollkommen dynamische Websites entwickelt. Technisch gesehen kommen hier verschiedene Prototype / Scriptaculous Funktionen zum Einsatz, um die verschiedenen Anforderungen des Auftraggebers an das Layout der Website zu erfüllen. So weden die Inhalte zum Beispiel horizontal in das Blickfeld des Users geschoben.

Ein weiteres Highlight dieser Seite ist das Ticket2Print System, welches es dem User nach einer kurzen Registrierung ermöglicht Tickets für das jeweilige Event zu bestellen und auch online abzurufen. Die online bestellten Tickets können vor Ort ausgedruckt und am Abend der jeweiligen Veranstaltung vorgezeigt werden. Jedes Ticket erhält hier einen individuellen Code, der bei Einlass abgeglichen wird, so dass Missbrauch verhindert wird. Das Ticketsystem ist so variabel aufgebaut, dass die Zahlweisen erweitert werden können. Neben der einfachen Banküberweisung ist es technisch ebenso möglich die IPN Schnittstelle von Paypal als auch andere Online-Payment Systeme zu integrieren. Das Ticket selbst wird mit FPDF realisiert. Auf eine Hintergrundgrafik wird der individuelle Ticket Code gelegt und als PDF Dokument ausgegeben.

Ich wünsche an dieser Stelle schon mal viel Erfolg für die beiden Veranstaltungen. Ich werde mich wohl auf dem Klubbing Event mal blicken lassen.