Stefan Busemann (in2code.) hat sich auf dem Barcamp entschieden, einen klassischen Nerd-Vortrag
zum Thema Entwicklung mit Eclipse zu zeigen.
Weiterlesen "TYPO3camp Munich – Entwicklung mit Eclipse"
TYPO3 News, Development & Insider Infos
Stefan Busemann (in2code.) hat sich auf dem Barcamp entschieden, einen klassischen Nerd-Vortrag
zum Thema Entwicklung mit Eclipse zu zeigen.
Weiterlesen "TYPO3camp Munich – Entwicklung mit Eclipse"
Erster Vortrag auf dem TYPO3camp Munich von Stefan Neufeind (SpeedPartner GmbH): Extbase/Fluid. Dass das Thema immer interessanter wird, sieht man schon daran, dass der Vortragsraum hoffnungslos überlaufen ist.
Weiterlesen "TYPO3camp Munich – Extbase für Fortgeschrittene"
Momentan unterstützt ExtBase noch keine file upload magie. Daher ist man gezwungen das ganze händisch zu machen. Der Aufwand dafür hält sich allerdings in Grenzen.
Grundsätzlich muß man in der entsprechenden Controller Action manuell $_FILES auswerten, das temporäre Upload File an die richtige Stelle verschieden und das betreffende Model Property setzen.
In Code sieht das dann etwa so aus:
public function createAction(Tx_Example_Domain_Model_Article $newArticle) { if ($_FILES['tx_example_article']) { $basicFileFunctions = t3lib_div::makeInstance('t3lib_basicFileFunctions'); $fileName = $basicFileFunctions->getUniqueName( $_FILES['tx_example_article']['name']['newArticle']['image'], t3lib_div::getFileAbsFileName('uploads/tx_example/')); t3lib_div::upload_copy_move( $_FILES['tx_example_article']['tmp_name']['newArticle']['image'], $fileName); $newArticle->setImage(basename($fileName)); } ... ... }
Natürlich kann man das ganze noch in eine seperate Controller Funktion oder einen FileUpload Service abstrahieren und mit entsprechenden Exceptions sichern, aber das Beispiel hier dient ja nur dazu den grundsätlichen Ansatz zu verdeutlichen.
Der passend view code fuer das Beispiel oben sieht so aus:
<f:form enctype="multipart/form-data" method="post" controller="Article" action="create" name="newArticle" object="{newArticle}">
<f:form.upload property="image" />
...
...
</f:form>Update 20.10.2011
Es gibt einige Besonderheiten im Hinblick auf die PHP Einstellungen post_max_size und upload_max_filesize zu beachten:
Liegt man mit dem Upload über post_max_size so ist sowohl $_FILES als auch $_POST leer, weil PHP die Daten “wegschmeisst”. Das führt natürlich dazu, dass der Controller sich darüber mit
“Required property ‘whatever’ does not exist” beschwert.
Man kann sich hier spontan behelfen indem man:
A. Den Wert von post_max_size erhöht und upload_max_filesize beibehält. Oder
B. Die Annotation des Properties auf NULL|Tx_Whatever und den default Wert auf NULL setzt und dann im Controller eine detailierte Fehler Auswertung macht.
Die 2te Variante wirft allerdings das Problem auf, dass man nicht wirklich Rückschlüße auf den aufgetretten Fehler ziehen kann.
So kann $whatever === NULL bedeuten, dass der Upload zu gross war oder aber der entsprechende Parameter im Request gar nicht enhalten war.
Als Notlösung kann man hier die CONTENT_LENGTH herranziehen:
if ($_SERVER['REQUEST_METHOD'] == 'POST' && empty($_POST) &&; $_SERVER['CONTENT_LENGTH'] > 0)
Möglicherweise ist das etwas, das das Framework intern handhaben sollte.
Im Zweifelsfall kann man auch den Upload auf einem weiteren Formular oder Schritt unterbringen und hat damit diese Probleme nicht.
Lieg man nur über upload_max_filesize so erhält man den entsprechenden Fehler gemäss:
http://www.php.net/manual/de/features.file-upload.errors.php in dem $_FILES array.
Die ursprügliche Prüfung auf “if ($_FILES['tx_example_article']) ” ist übrigens unzureichend. Empfehlenswerter ist es hier auf den error code zu prüfen bevor man mit der eigentlichen Dateibearbeitung beginnt.
Vielen Dank für die Kommentare zu dem Thema
Wer im TYPO3-Repository schon mal öfters unterwegs ist, wird evtl. festgestellt haben, dass es für Spalten als Contentelement nur 3 Extensions gibt. Eine Extension, die beliebig viele Spalten anlegen kann gibt es nicht. Ohne nun eine neue Extension zu erstellen für 4-Spaltigkeit und mehr erkläre ich Euch wie man sowas z.B. mit FCEs aus dem Paket TemplaVoila lösen könnte.
Die folgende Anleitung ist nur ein Beispiel. Es bleibt Euch überlassen dieses entsprechend zu erweitern oder als Grundlage für eigene Projekte zu kopieren.
Weiterlesen "flexible Spalten als FCE"
..kann man sich recht einfach mit folgendem kleinen shell Kommando erzeugen:
grep "404" /var/log/apache2/users/xyz-access.log | cut -d' ' -f7 | sort | uniq -c | sort -nr
Das Ergebniss ist eine Liste aller Requests die einen 404 auslösen mit der jeweiligen Anzahl davor.
Das Ganze nach Häufigkeit sortiert.
Keine Raketentechnik, aber praktisch und daher worth sharing
.
Für den geneigten Leser:
Wer sich das ganze gleich per Mail schicken lassen möchte, kann hinten noch ein | sendmail abx@xyz.de dranhängen.
Wie bereits vor einigen Tagen, sind auch jetzt nochmal die Mailinglisten nicht am Netz. Das Ende der Downtime ist auf morgen früh, 7:30 Uhr gelegt. Wenn ihr also im Büro seit, geht hoffentlich wieder alles
Weitere Infos in den typo3.org News.
