UPDATE: REX Multiupload 2.0 IS LIVE! - Neues + DEV API
Verfasst: 9. Mai 2012, 22:48
Hallo Redaxianer,
es ist so weit, REX Multiupload goes 2.0.
WICHTIG: Nach dem Upload unbedingt das AddOn reinstallieren. Das gilt für alle die Updaten!
Diese Version hat nicht nur ein Facelift bekommen, sondern wurde aufgeräumt und neu programmiert - from scratch!
Ein paar kurze Stichpunkte zu den Änderungen:
- Fast 20 Bugs gefixed
- Optik verbessert
- Geschwindigkeit verbessert
- IE-Stabilität verbessert
- FF 11+ und Safari 5 handling verbessert
- diverse neue API-Methoden implementiert
- kompletter Code-Rewrite | OOP-Code inkl. starker API
- onUnload-Event hinzugefügt - warnt beim verlassen der Seite und bricht den Upload falls gewünscht sofort ab, damit es zu keinen "hängern" mehr kommt.
- progress bar programmiert
- Eigene Settings im AddOn (keine Editierung des config.inc.php mehr notwendig)
- 9 neue Settings / Einstellungen hinzugefügt
Neue Rechte für Benutzer hinzugefügt. (Um den Entwicklerbereich sehen zu können, muss man Admin sein, um die Settings zu ändern muss man das Recht haben. (Admin sowieso)
Ich denke die größte Neuheit ist jedoch die Entwickler API. Dadurch kann man in seinen AddOns oder Modulen auf den Multiuploader zugreifen (aktuell nur Backend, ich arbeite bereits am Frontend-Multiuploader als AddOn)
Es gibt 5 Callbacks, mit denen man eigentlich alles steuern kann. Ich würde mich freuen, wenn sich jemand dem annimmt und evtl. ein tolles xForm-Ding realisiert.
Hier nun zur Erklärung der API:
Out of the Box - Standard-Einstellung
Mit folgendem Code kann der Multiuploader in AddOns verwendet werden:
Mit der Aufrufmethode unten beschrieben bezieht der Multiupload die Parameter aus dem Bereich "Einstellungen". Möchtest Du eigene Einstellungen verwenden, musst du die setValue() Methode aufrufen. (nächstes Beispiel)
Erweiterte Konfiguration
Möchte man den Multiupload Addon-/Modulabhängig steuern, muss man sich der setValue() Methode bedienen. Mit setValue() kann das AddOn praktisch beliebig eingestellt werden. Alle erwarteten Werte sind boolean, d.h. true oder false. Ausnahme ist $sim_uploads, hier muss ein INT-Wert übergeben werden (eine Zahl zwischen 1 bis 50). Die Erklärung findet sich unten im Code.
Setter Methoden
Da es teilweise schwer ist, sich die Reihenfolge für "setValue()" zu merken, gibt es für jede Einstellung einen eigenen Setter. Alle Setter können nach Lust und Laune miteinander kombiniert werden. Die Nutzung einer Settermethode überschreibt immer die setValue() Einstellung für die aktuelle Config. Zur Übersichtlichkeit wird empfohlen, die Methoden nicht zu vermischen. Wird eine Settermethode für eine bestimmte Config nicht genutzt, greift automatisch die Config aus "Einstellungen" für die Funktion.
Nackte Ausgabe
Perfekt für AddOns oder Module, ohne Addon-Markup. Hier bedient man sich der setMarkup() Methode und stellt den Wert auf "false" Die Deaktivierung des Markups schaltet den Kategoriesync und die Fußnote ab. Um ein Markupfreien Kategoriesync zu erhalten, holt man sich die Rückgabe mit der Methode getMediaCats(). Die Position der Ausführung spielt dabei keine Rolle. Erklärung findet sich unten
Für Profis
Wer macht das xForm-AddOn?
Richtig interessant wird es jetzt. Die JavaScript-Callbacks. Mit den oben genannten Methoden habe ich schon viele Einstellungsmöglichkeiten implementiert, jedoch richtig spannend wird das ganze, wenn man selbst bestimmen will, was möglich ist. Die beste Manipulation / Weiterverarbeitung läuft mit JavaScript. Dafür steht die Methode "setCallback()" zur Verfügung. Es gibt vier Callback-Typen.
Mit den Callbacks ist man in der Lage, richtige Module / AddOns zu schreiben, in dem man mit den Rückgabewerten die Weiterverarbeitung macht (z.B. Dateiname in ein Inputfeld setzen, oder mit AJAX in die Datenbank jagen u.v.m.)
Es können theoretisch alle Callbacks pro Objekt-Instanz gleichzeitig geaddet werden. Keine Doppelungen, es darf pro $objekt z.B. nur ein mal setCallback('complete, 'function') gesetzt werden. Wird ein weiteres mal gesetzt, wird der erste Wert überschrieben. Die Registrierung des Callbacks muss vor der createUploadForm() Methode erfolgen. Damit die Länge dieses Manuals nicht Überhand nimmt, eine kurze Erklärung:
Jeder Callback hat eine bestimmte Rückgabe. Damit die Rückgaben registriert werden, muss deine JavaScript Funktion einige Parameter erwarten. Folgende Rückgaben gibt es: (JavaScript)
Damit die Callbacks greifen, muss natürlich eine .JS oder ein <script>..functions..</script> irgendwo im Backend, auf der Seite oder in der Moduleingabe vorbereitet werden. Wichtig: Beim Methodenaufruf im PHP darf der Funktionsname der Callbacks KEINE KLAMMERN() oder sonstige Parameter enthalten. Es darf nur der reine Funktionsname übergeben werden. Lediglich eure JavaScripts müssen für die Parameter-Rückgabe vorbereitet werden
Ich freue mich auf Vorschläge, Tests, Feedback und hoffentlich tollen Extensions / Plugins basierend auf der Extension.
Kleiner Tipp: bindet den Uploader ein, addet eine JS-Callback-Funktion, und schreibt das Ergebnis des Callbacks in ein hidden value oder textarea mit nem bestimmten Zeichen. Danach einfach abrufen und ein explode() nach dem Zeichen machen - vollwertiges array. Genau so funktioniert das Prinzip von Redaxos MEDIALIST.
Download unter: http://www.github.com/nightstomp/redaxo_multiupload
Install von Github: Downloaden, in rex_multiupload umbenennen und in's AddOn Verzeichnis hochladen.
Oder einfach aus den AddOn-Bereich unter:
http://www.redaxo.org/de/download/addon ... &cat_id=-1
UPDATE AUF VERSION 2.0.2 | 14.05.2012
In der Version 2.0.1 hat sich leider in der Upload-Class ein kleiner Fehler eingeschlichen, wodurch Dateien immer in "Keine Kategorie" (ID: 0) gesynct wurden, auch wenn in der Liste nach dem Upload die korrekte Kategorie angezeigt wurde (falscher Parameter an den Upload-Stream gesendet). Version 2.0.2 behebt dieses Problem.
Nach dem Upload ist zwingend ein Re-Install des AddOn notwendig, weil die JavaScript-Dateien ansonsten nicht überschrieben werden. Danach bitte den Browser-Cache.
Download:
http://www.redaxo.org/de/download/addon ... &cat_id=-1
UPDATE AUF VERSION 2.0.4 | 04.07.2012
Version 2.0.4 behebt kleinere Fehler und funktioniert nun auch mit Redaxo 4.4.
Viel Spaß mit dem Update
Download:
http://www.redaxo.org/de/download/addon ... &cat_id=-1
es ist so weit, REX Multiupload goes 2.0.
WICHTIG: Nach dem Upload unbedingt das AddOn reinstallieren. Das gilt für alle die Updaten!
Diese Version hat nicht nur ein Facelift bekommen, sondern wurde aufgeräumt und neu programmiert - from scratch!
Ein paar kurze Stichpunkte zu den Änderungen:
- Fast 20 Bugs gefixed
- Optik verbessert
- Geschwindigkeit verbessert
- IE-Stabilität verbessert
- FF 11+ und Safari 5 handling verbessert
- diverse neue API-Methoden implementiert
- kompletter Code-Rewrite | OOP-Code inkl. starker API
- onUnload-Event hinzugefügt - warnt beim verlassen der Seite und bricht den Upload falls gewünscht sofort ab, damit es zu keinen "hängern" mehr kommt.
- progress bar programmiert
- Eigene Settings im AddOn (keine Editierung des config.inc.php mehr notwendig)
- 9 neue Settings / Einstellungen hinzugefügt
Neue Rechte für Benutzer hinzugefügt. (Um den Entwicklerbereich sehen zu können, muss man Admin sein, um die Settings zu ändern muss man das Recht haben. (Admin sowieso)
Ich denke die größte Neuheit ist jedoch die Entwickler API. Dadurch kann man in seinen AddOns oder Modulen auf den Multiuploader zugreifen (aktuell nur Backend, ich arbeite bereits am Frontend-Multiuploader als AddOn)
Es gibt 5 Callbacks, mit denen man eigentlich alles steuern kann. Ich würde mich freuen, wenn sich jemand dem annimmt und evtl. ein tolles xForm-Ding realisiert.
Hier nun zur Erklärung der API:
Out of the Box - Standard-Einstellung
Mit folgendem Code kann der Multiuploader in AddOns verwendet werden:
Mit der Aufrufmethode unten beschrieben bezieht der Multiupload die Parameter aus dem Bereich "Einstellungen". Möchtest Du eigene Einstellungen verwenden, musst du die setValue() Methode aufrufen. (nächstes Beispiel)
Code: Alles auswählen
<?php
if(OOAddon::isAvailable("rex_multiupload"))
{
$upload = new rex_mediapool_multiupload;
echo $uploader->createUploadForm();
} else {
echo rex_warning('"rex_multiupload" Addon benötigt!');
}
?>
Möchte man den Multiupload Addon-/Modulabhängig steuern, muss man sich der setValue() Methode bedienen. Mit setValue() kann das AddOn praktisch beliebig eingestellt werden. Alle erwarteten Werte sind boolean, d.h. true oder false. Ausnahme ist $sim_uploads, hier muss ein INT-Wert übergeben werden (eine Zahl zwischen 1 bis 50). Die Erklärung findet sich unten im Code.
Code: Alles auswählen
<?php
if(OOAddon::isAvailable("rex_multiupload"))
{
$upload = new rex_mediapool_multiupload;
$upload->setValue(
$sync = true,
$clear_auto = true,
$clear_fin = true,
$sim_uploads = 5,
$js_debug = false,
$foot = true
);
echo $upload->createUploadForm();
/**
* Für alle Werte sind bereits Standards definiert, es kommt also zu keiner Fehlermeldung
* wenn eine $VAR nicht gesetzt wurde. Reihenfolge beachten!
$sync = Kategoriesync? boolean(true/false)
$clear_auto = Uploadliste automatisch bereinigen? boolean(true/false)
$clear_fin = Datei nach Upload aus Warteschlange entfernen? boolean(true/false)
$sim_uploads = Gleichzeitige Uploads (5 wird empfohlen/default) int(1 bis 50)
$js_debug = JavaScript Debug einschalten? (Firebug) boolean(true/false)
$foot = Fußnote mit Erklärung unter Uploadbutton einblenden boolean(true/false)
*/
} else {
echo rex_warning('"rex_multiupload" Addon benötigt!');
}
?>
Da es teilweise schwer ist, sich die Reihenfolge für "setValue()" zu merken, gibt es für jede Einstellung einen eigenen Setter. Alle Setter können nach Lust und Laune miteinander kombiniert werden. Die Nutzung einer Settermethode überschreibt immer die setValue() Einstellung für die aktuelle Config. Zur Übersichtlichkeit wird empfohlen, die Methoden nicht zu vermischen. Wird eine Settermethode für eine bestimmte Config nicht genutzt, greift automatisch die Config aus "Einstellungen" für die Funktion.
Code: Alles auswählen
<?php
if(OOAddon::isAvailable("rex_multiupload"))
{
$upload = new rex_mediapool_multiupload;
// setter function um kategorie sync anzuzeigen (boolean: true/false)
$upload->setSyncCat(true);
// setter function für automatische listensäuberung (boolean: true/false)
$upload->setClearUploadsAutomatically(true);
// setter function um datei nach upload aus der liste zu entfernen (boolean: true/false)
$upload->setClearFileAfterFinish(true);
// setter function um maximalwert für gleichzeitige uploads zu setzen (int)
$upload->setSimultanUploads(5);
// setter function um JS-Debugging zu aktivieren (Firebug Output, boolean: true/false)
$upload->setJSDebug(false);
// setter function um fußnoten information auszugeben
$upload->setFootnote(true);
// setter function um redaxo-addon-markup mit auszugeben (boolean: true/false)
// Hinweis: Wird setMarkup() auf false gesetzt, wird setSyncCat & setFootnote
// automatisch auf false gesetzt. Um dennoch den Kategorie-Sync auszugeben,
// bitte das Beispiel "Nackte Ausgabe" lesen.
$upload->setMarkup(true);
// Ausgabe des Uploaders
echo $upload->createUploadForm();
} else {
echo rex_warning('"rex_multiupload" Addon benötigt!');
}
?>
Nackte Ausgabe
Perfekt für AddOns oder Module, ohne Addon-Markup. Hier bedient man sich der setMarkup() Methode und stellt den Wert auf "false" Die Deaktivierung des Markups schaltet den Kategoriesync und die Fußnote ab. Um ein Markupfreien Kategoriesync zu erhalten, holt man sich die Rückgabe mit der Methode getMediaCats(). Die Position der Ausführung spielt dabei keine Rolle. Erklärung findet sich unten
Code: Alles auswählen
<?php
if(OOAddon::isAvailable("rex_multiupload"))
{
$upload = new rex_mediapool_multiupload;
$upload->setMarkup(false);
//echo $upload->getMediaCats(); // kann auskommentiert werden, falls nötig. echo nicht vergessen
echo $upload->createUploadForm();
/**
* Wird setMarkup() auf "false" gestellt, so werden folgende setValue() Werte ignoriert:
$sync = Kategoriesync? boolean(true/false)
$foot = Fußnote mit Erklärung unter Uploadbutton einblenden boolean(true/false)
Zurückgegeben wird der reine, simple Markup, welcher für's JavaScript/CSS notwendig ist.
Alle anderen Output Schachtelungen werden unterdrückt. Der Kategorie-Sync wird ebenfalls
ausgeblendet. Um dennoch den Kategorie-Sync anzuzeigen, muss man sich an der
Methode getMediaCats() bedienen. Die Ausgabe erzeugt man mit echo $objekt->getMediaCats();
Es ist nicht notwendig IDs oder Klassen an das select zu geben, der Multiuploader
erkennt seine Instanz automatisch und bindet die korrekte SELECT_ID an den JavaScript-Selector.
Beispiel:
$upload = new rex_mediapool_multiupload;
$upload->setMarkup(false);
echo $upload->getMediaCats();
echo $upload->createUploadForm();
*/
} else {
echo rex_warning('"rex_multiupload" Addon benötigt!');
}
?>
Wer macht das xForm-AddOn?
Richtig interessant wird es jetzt. Die JavaScript-Callbacks. Mit den oben genannten Methoden habe ich schon viele Einstellungsmöglichkeiten implementiert, jedoch richtig spannend wird das ganze, wenn man selbst bestimmen will, was möglich ist. Die beste Manipulation / Weiterverarbeitung läuft mit JavaScript. Dafür steht die Methode "setCallback()" zur Verfügung. Es gibt vier Callback-Typen.
- "upload" (bei Upload einer Datei)
"submit" (direkt nach Auswahl einer Datei)
"progress" (bei der Verarbeitung der Datei)
"complete" (Datei wurde erfolgreich hochgeladen)
"cancel" (Dateiupload wurde abgebrochen / ist fehlgeschlagen).
Mit den Callbacks ist man in der Lage, richtige Module / AddOns zu schreiben, in dem man mit den Rückgabewerten die Weiterverarbeitung macht (z.B. Dateiname in ein Inputfeld setzen, oder mit AJAX in die Datenbank jagen u.v.m.)
Es können theoretisch alle Callbacks pro Objekt-Instanz gleichzeitig geaddet werden. Keine Doppelungen, es darf pro $objekt z.B. nur ein mal setCallback('complete, 'function') gesetzt werden. Wird ein weiteres mal gesetzt, wird der erste Wert überschrieben. Die Registrierung des Callbacks muss vor der createUploadForm() Methode erfolgen. Damit die Länge dieses Manuals nicht Überhand nimmt, eine kurze Erklärung:
Jeder Callback hat eine bestimmte Rückgabe. Damit die Rückgaben registriert werden, muss deine JavaScript Funktion einige Parameter erwarten. Folgende Rückgaben gibt es: (JavaScript)
Code: Alles auswählen
"function uploadCallback(filename, xhr){ ... }"
Feuert direkt beim Upload - Return "fileName" und "xhr"
"function submitCallback(filename){ ... }"
Deine Funktion erhält sofort nach Auswahl den Dateinamen
"function progressCallback(fileName, loaded, total){ ... }"
Dauercallback, bis Prozess beendet ist. Schickt non-stop filename, current uploaded, totalsize zurück. Damit kann man alle möglichen Berechnungen machen. Kann extrem Rechenintensiv werden!
"function cancelCallback(filename){ ... }"
Dateiname des fehlgeschlagenen / abgebrochenen Uploads
"function completeCallback(json){ ... }" - Der wichtigste Callback.
Schickt ein JSON-Objekt mit jeder Menge Informationen zurück. Mittels "json.objectname" kannst du die Rückgaben abrufen:
- json.success (immer true, ansonsten feuert completeCallback gar nicht)
- json.filename (finale, von Redaxo umgewandelter Dateiname. Die Rückgabe wurde exakt so in den Mediepool gesynced)
- json.mediaCatId (ID der Medienpool-Kategorie, in die gesynced wurde)
- json.originalname (Gibt den echten Namen zurück [brauch man das?])
- json.timestamp (Gibt einen Timestamp der Fertigstellung zurück)[/list]
Damit die Callbacks greifen, muss natürlich eine .JS oder ein <script>..functions..</script> irgendwo im Backend, auf der Seite oder in der Moduleingabe vorbereitet werden. Wichtig: Beim Methodenaufruf im PHP darf der Funktionsname der Callbacks KEINE KLAMMERN() oder sonstige Parameter enthalten. Es darf nur der reine Funktionsname übergeben werden. Lediglich eure JavaScripts müssen für die Parameter-Rückgabe vorbereitet werden
Code: Alles auswählen
<?php
if(OOAddon::isAvailable("rex_multiupload"))
{
$upload = new rex_mediapool_multiupload;
$upload->setCallback("upload", "uploadCallback");
$upload->setCallback("submit", "submitCallback");
$upload->setCallback("progress", "progressCallback");
$upload->setCallback("complete", "completeCallback");
$upload->setCallback("cancel", "cancelCallback");
echo $upload->createUploadForm();
/**
** Registriert die JavaScript-Callbacks
** Selbstverständlich können auch in Verbindung mit den Callbacks weiterhin
** alle Methoden wie setValue(), getMediaCats(), setXYZ..() oder setMarkup() verwendet werden
*/
} else {
echo rex_warning('"rex_multiupload" Addon benötigt!');
}
?>
Kleiner Tipp: bindet den Uploader ein, addet eine JS-Callback-Funktion, und schreibt das Ergebnis des Callbacks in ein hidden value oder textarea mit nem bestimmten Zeichen. Danach einfach abrufen und ein explode() nach dem Zeichen machen - vollwertiges array. Genau so funktioniert das Prinzip von Redaxos MEDIALIST.
Download unter: http://www.github.com/nightstomp/redaxo_multiupload
Install von Github: Downloaden, in rex_multiupload umbenennen und in's AddOn Verzeichnis hochladen.
Oder einfach aus den AddOn-Bereich unter:
http://www.redaxo.org/de/download/addon ... &cat_id=-1
UPDATE AUF VERSION 2.0.2 | 14.05.2012
In der Version 2.0.1 hat sich leider in der Upload-Class ein kleiner Fehler eingeschlichen, wodurch Dateien immer in "Keine Kategorie" (ID: 0) gesynct wurden, auch wenn in der Liste nach dem Upload die korrekte Kategorie angezeigt wurde (falscher Parameter an den Upload-Stream gesendet). Version 2.0.2 behebt dieses Problem.
Nach dem Upload ist zwingend ein Re-Install des AddOn notwendig, weil die JavaScript-Dateien ansonsten nicht überschrieben werden. Danach bitte den Browser-Cache.
Download:
http://www.redaxo.org/de/download/addon ... &cat_id=-1
UPDATE AUF VERSION 2.0.4 | 04.07.2012
Version 2.0.4 behebt kleinere Fehler und funktioniert nun auch mit Redaxo 4.4.
Viel Spaß mit dem Update
Download:
http://www.redaxo.org/de/download/addon ... &cat_id=-1