FileUploader in CakePHP für Bilder
FileUploader sind ja die Teile mit denen man in Web2.0 und auch sonstigen Anwendungen Bilder und ähnliches hochlädt. Vorgestern hab ich mich noch mit Sebastian drüber unterhalten und er meinte, er nutzt den phpThumb Helper aus der Bakery, weil der die Bilder einfach cached. Sprich, wenn ein neues Format gebraucht wird, dann wird über die phpThumb Bibliothek das neue Bild erzeugt und im Cache zwischengespeichert.
Der Aufruf sieht damit im View eigentlich ziemlich lässig aus:
1 | $thumbnail->show($options, $tag_options); |
Allerdings muss man sich dazu noch selber merken, welche Bilder vorhanden sind und wie die heißen, sprich doch ein Model bemühen oder entsprechendes.
Selber benutze ich in meiner aktuellen Anwendung das image-Behavior, das einen komplett anderen Ansatz geht.
Als Behavior wird es im Model mit $actsAs aufgesetzt und erhält die notwendigen Parameter. D.h. im Falle des Image-Behaviors wird über den Parameter fields das Attribut in der Datenbanktabelle festgestellt - hier avatar - und dann werden die Parameter eingestellt für die unterschiedlichen Thumbnails, die das Behavior beim Speichern des Datensatzes generieren soll.
1 2 3 4 5 6 7 8 9 10 | var $actsAs = array( 'Image'=>array( 'fields'=>array( 'avatar'=>array( 'thumbnail'=>array('create'=>true), 'resize'=>array('width'=>'55', 'height'=>'55','aspect'=>true), 'versions'=>array( array('prefix'=>'s','width'=>'32','height'=>'32','aspect'=>true), array('prefix'=>'16','width'=>'16','height'=>'16','aspect'=>true) ))))); |
In meinem Fall wird also ein thumbmail erzeugt, eine resize auf 55px Kantenlänge vorgenommen und zusätzlich noch zwei Versionen erzeugt, einmal mit dem Prefix ’s’ und einer Kantenlänge von 32, sowie einem Prefix ‘16′ mit einer entsprechenden Kantenlänge.
In der Datenbank selbst wird nur das Feld avatar gespeichert, das den Dateinamen enthält, den man angibt. Alle anderen Felder werden virtuell erzeugt. Hier ein Beispiel wie der Datensatz nach einem $this->find zurückkommt:
1 2 3 4 5 6 7 | [avatar] => Array ( [path] => thumbs/Person/812/avatar.skypeavatar.jpeg [thumb] => thumbs/Person/812/thumb_avatar.skypeavatar.jpeg [s] => thumbs/Person/812/s_avatar.skypeavatar.jpeg [16] => thumbs/Person/812/16_avatar.skypeavatar.jpeg ) |
Wie man schön sieht bekommt man also deutlich mehr Informationen über das vom Image-Behavior verarbeitete Bild zurück und kann damit entsprechend weiterarbeiten.
In der Bakery ist gerade ein neuer Beitrag über einen FileUploader schienen. Ist aber leider gerade nicht mehr online, weil er wahrscheinlich zum Editieren/Erweitern vom Autor verändert worden ist und erst neu freigeschaltet werden muss. Sah aber auch ganz interessant aus, weil er insbesondere die Möglichkeit vorgesehen hat, dass man ins Model speichern kann, aber nicht unbedingt muss. Ich werd den Link hier noch setzen, sobald der Artikel in der Bakery wieder zur Verfügung steht.
Welche Helper, Behaviors oder anderen Methoden verwendet ihr denn, um mit hochgeladenen Bildern umzugehen?