Dies ist meine erste Extension, die ich auf Basis extbase/fluid realisiere. Es geht soweit gut voran, aber ich habe ein Problem, bei dem mir Suche in Doku und Internet nicht weiterhilft.
Das ist das Szenario:
Das Modell repräsentiert ein Firmen-Profil. Eine der Eigenschaften ist das Firmen-Logo. Die Firma kann das Profil jederzeit per editAction ändern.
In folgender Situation tritt das Problem auf:
Das Firmenprofil existiert einschließlich des bereits per f:form.upload hochgeladenen Logos. Beim nächsten Editieren des Profils wird im Formular wieder das <f:form.upload property="logo" />-Feld angeboten. Wird keine Datei erneut hochgeladen, tritt ein Fehler auf.
Ergebnis: Nach dem Speichern des Datensatzes ist die ursprünglich vorhandene Info zum Logo (der Dateiname) gelöscht.
Meine Vorstellung ist, dass es einen Weg geben muss, den Dateinamen aus dem Repository auszulesen und im Falle, dass kein neues Logo hochgeladen wird, diesen bisherigen Dateinamen wieder in die Datenbank zurückzuschreiben. Oder aber auch, dieses Feld vom Update auszunehmen.
Vielleicht habe ich da auch noch ein grundsätzliches Verständnisproblem mit den extbase/fluid-Konzepten. Auf jeden Fall bin ich für jeden Hinweis dankbar!
Sabine
Hi,
kenne jetzt Deine Programmierung nicht aber ich könnte dir Code Snippets von mir geben vielleicht hilft es ja. Allerdings können bei mir mehr als ein Bild hochgeladen werden
createAction
// Image Upload
$varCountImages = count($_FILES['upload']['name']['image']); // Anzahl der Values
for ($t=0; $t<$varCountImages; $t++) {
if ($_FILES['upload']['name']['image'][$t] != NULL) {
$basicFileFunctions = t3lib_div::makeInstance('t3lib_basicFileFunctions');
$fileNameImage = $basicFileFunctions->getUniqueName(
$_FILES['upload']['name']['image'][$t],
t3lib_div::getFileAbsFileName('uploads/tx_myext/images/'));
t3lib_div::upload_copy_move(
$_FILES['upload']['tmp_name']['image'][$t],
$fileNameImage);
$uploadImages[] = basename($fileNameImage);
}
}
updateAction
/*****************
* IMAGE HANDLING *
* ***************/
//aktuelle Images in Array
if($inventory->getImage()!=''){
$updateImages = explode(',',$inventory->getImage());
}
//Arrays vergleichen. Ergebnis: Bestehenbleibende
if($argumente['image']!=NULL && $inventory->getImage()!=''){
$images = explode(',',$inventory->getImage());
$updateImages = array_diff($images, $argumente['image']);
}
//Löschen alter Images
foreach ($argumente['image'] as $value){
$image = @unlink(PATH_site.'/uploads/tx_myext/images/'.$value);
}
// Upload neue Images
$varCountImage = count($_FILES['upload']['name']['image']); // Anzahl der Values
for ($t=0; $t<$varCountImage; $t++) {
if ($_FILES['upload']['name']['image'][$t] != NULL) {
$basicFileFunctions = t3lib_div::makeInstance('t3lib_basicFileFunctions');
$fileNameImage = $basicFileFunctions->getUniqueName(
$_FILES['upload']['name']['image'][$t],
t3lib_div::getFileAbsFileName('uploads/tx_myext/images/'));
t3lib_div::upload_copy_move(
$_FILES['upload']['tmp_name']['image'][$t],
$fileNameImage);
$updateImages[] = basename($fileNameImage);
}
}
//Neues Array mit alten und neuen Files
$inventory->setImage(implode(",", $updateImages));
/*********************
* IMAGE HANDLING end *
* ********************/
Edit.html hier können die Bilder markiert werden die gelöscht werden sollen
<f:if condition="{images}">
<h2>Bilder</h2>
<p style="font-size:12px;margin-top:-10px;">Bild zum Löschen markieren!</p>
<f:for each="{images}" as="image">
<label><f:form.checkbox name="image[]" value="{image}" additionalAttributes="{data-mini : 'true'}"/>{image}</label>
</f:for>
<br>
</f:if>
über Javascript kann per Add-Button neue Bilder hinzugefügt werden das +count+ kommt vom JS
<input id='file1' type='file' name='upload[file]["+count+"]'>
Gruß
mimaxx
Das ist im Prinzip genau das, was ich brauche - danke mimaxx!
Viele Grüße
Sabine