SWFupload Plugin
Seit Montag dem 7. April 2008 gibt es im Xajax Plugin Directory ein eines Plugin: SWFupload!
Dieses Plugin integriert die SWFupload Flash&JavaScript library in Xajax um auf sehr einfache Art&Weise Dateien hochzuladen. Anstelle eines normalen XMLHttpRequest(XHR) wird zum Transport bei einer Upload Funktion Flash benutzt. Für das Xajax PHP-Script sieht der Request hingegen wie ein völlig normaler XHR aus - dementsprechend wird die angeforderte Xajax Funktion aufgerufen und die Response als XML zurückgereicht.
Eingebunden wird das Plugin über einen include();
$xajax = new xajax(); require_once './xajax/xajax_plugins/request/swfupload/swfupload.inc.php'; $xajax->configure("javascript URI","/swfupload/xajax/");
Dabei gilt zu beachten, dass der include nach dem Instanziieren der Xajax Klasse erfolgt und bevor das erste Mal ->configure() aufgerufen wird. Der Grund dafür ist, das erst beim Instanziieren der Xajax Klasse der PluginManager und die Basisplugins geladen werden. Alle Einstellungen die via ->configure() gesetzt werden, werden auch gleichzeitig an alle registrierten Plugins weitergereicht. Dadurch erspart man sich lästige Mehrfachzuweisungen der immer wieder gleichen Einstellungen.
Beim registrieren der Xajax Funktionen muss nun ein weiterer Parameter übergeben werden:
$xajax->register(XAJAX_FUNCTION,"upload_function",array("mode"=>"'SWFupload'");
Vorsicht bei den Anführungszeichen. Damit der String SWFupload auch so ankommt, muss er noch einmal extra in Anführungszeichen gesetzt werden. Ansonsten würde der Browser an dieser Stelle eine Variable namens SWFupload erwarten.
Im Browser kann der Upload nun mit folgendem Aufruf gestartet werden.
xajax_my_upload_function( xajax.getFormValues('my_form'), 'foo', 'bar' );
Achtung! Je nach Konfiguration können beim SWFupload mehrere Dateien in eine Art Warteschleife geladen werden. Der Upload erfolgt anschließend mittels einer Xajax Funktion die alle Dateien von allen Inputfeldern sequenziell hochlädt.
Das bedeutet, dass pro ausgewählter Datei ein Request gestartet wird bei dem die entsprechende Xajax Funktion inkl aller übergeben Parameter aufgerufen wird.
Leider ist es mit Flash nicht möglich alle Dateien mit einem Request abzusenden, wodurch diese mehrfach Aufrufe unumgänglich sind. Da in den meisten Fällen sowieso keine verschiedenen Uploadformulare auf einmal dargestellt werden, sollte dies keine Probleme verursachen.
Um nun ein normales file input Feld in ein 'SWFupload' Feld zu wandeln liefert das Plugin 2 verschiedene Funktionen die es ermöglichen entweder einzelne Felder, oder alle file input Felder eines Formulars umzuwandeln.
- xajax.ext.SWFupload.tools.transForm(form_id [String], config [optional Object])
- xajax.ext.SWFupload.tools.transField(element_id [String], config [optional Object])
Die Funktionsnamen dürften ihre Bedeutung selbst erklären. Als erster Parameter wird jeweils die ID des Zielelements (Formular / Feld) erwartet. Als 2. Parameter kann ein Konfigurations Object (entspricht in PHP einem assoziativem Array) übergeben werden.
zum Beispiel:
xajax.ext.SWFupload.tools.transForm('upload_form',{ file_types : "*.jpg;*.gif", file_types_description: "Web Image Files", file_size_limit : "3 MB" });
Das Konfigurationsobjekt wird direkt an die jeweilige Instanz des SWFuploads weitergeben und entspricht nahezu vollständig der SWFupload Dokumentation. So können zB die erlaubten Dateitypen, die Dateigröße oder Anzahl der Dateien pro Queue eingeschränkt werden.
Weitere Informationen sowie eine Demo + Download gibt es direkt auf der Xajax Website.
.