[Frage] Problem beim Editieren von Datensätzen mit Datei-Uploads

  • SabineW SabineW
    T3PO
    0 x
    25 Beiträge
    0 Hilfreiche Beiträge
    30. 07. 2013, 19:12

    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


  • 1
  • mimaxx mimaxx
    Jedi-Ritter
    0 x
    144 Beiträge
    1 Hilfreiche Beiträge
    31. 07. 2013, 10:56

    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

    1. // Image Upload
    2. $varCountImages = count($_FILES['upload']['name']['image']); // Anzahl der Values
    3. for ($t=0; $t<$varCountImages; $t++) {
    4.  
    5. if ($_FILES['upload']['name']['image'][$t] != NULL) {
    6. $basicFileFunctions = t3lib_div::makeInstance('t3lib_basicFileFunctions');
    7.  
    8. $fileNameImage = $basicFileFunctions->getUniqueName(
    9. $_FILES['upload']['name']['image'][$t],
    10. t3lib_div::getFileAbsFileName('uploads/tx_myext/images/'));
    11.  
    12. t3lib_div::upload_copy_move(
    13. $_FILES['upload']['tmp_name']['image'][$t],
    14. $fileNameImage);
    15. $uploadImages[] = basename($fileNameImage);
    16. }
    17. }

    updateAction

    1. /*****************
    2.  * IMAGE HANDLING *
    3.  * ***************/
    4.  
    5. //aktuelle Images in Array
    6. if($inventory->getImage()!=''){
    7. $updateImages = explode(',',$inventory->getImage());
    8. }
    9.  
    10. //Arrays vergleichen. Ergebnis: Bestehenbleibende
    11. if($argumente['image']!=NULL && $inventory->getImage()!=''){
    12. $images = explode(',',$inventory->getImage());
    13. $updateImages = array_diff($images, $argumente['image']);
    14. }
    15.  
    16. //Löschen alter Images
    17. foreach ($argumente['image'] as $value){
    18. $image = @unlink(PATH_site.'/uploads/tx_myext/images/'.$value);
    19. }
    20.  
    21. // Upload neue Images
    22. $varCountImage = count($_FILES['upload']['name']['image']); // Anzahl der Values
    23. for ($t=0; $t<$varCountImage; $t++) {
    24.  
    25. if ($_FILES['upload']['name']['image'][$t] != NULL) {
    26. $basicFileFunctions = t3lib_div::makeInstance('t3lib_basicFileFunctions');
    27.  
    28. $fileNameImage = $basicFileFunctions->getUniqueName(
    29. $_FILES['upload']['name']['image'][$t],
    30. t3lib_div::getFileAbsFileName('uploads/tx_myext/images/'));
    31.  
    32. t3lib_div::upload_copy_move(
    33. $_FILES['upload']['tmp_name']['image'][$t],
    34. $fileNameImage);
    35. $updateImages[] = basename($fileNameImage);
    36. }
    37. }
    38.  
    39. //Neues Array mit alten und neuen Files
    40. $inventory->setImage(implode(",", $updateImages));
    41.  
    42. /*********************
    43.  * IMAGE HANDLING end *
    44.  * ********************/

    Edit.html hier können die Bilder markiert werden die gelöscht werden sollen

    1. <f:if condition="{images}">
    2. <h2>Bilder</h2>
    3. <p style="font-size:12px;margin-top:-10px;">Bild zum Löschen markieren!</p>
    4. <f:for each="{images}" as="image">
    5. <label><f:form.checkbox name="image[]" value="{image}" additionalAttributes="{data-mini : 'true'}"/>{image}</label>
    6. </f:for>
    7. <br>
    8. </f:if>

    über Javascript kann per Add-Button neue Bilder hinzugefügt werden das +count+ kommt vom JS

    1. <input id='file1' type='file' name='upload[file]["+count+"]'>

    Gruß
    mimaxx

  • SabineW SabineW
    T3PO
    0 x
    25 Beiträge
    0 Hilfreiche Beiträge
    31. 07. 2013, 19:25

    Das ist im Prinzip genau das, was ich brauche - danke mimaxx!

    Viele Grüße
    Sabine

  • 1