Dynamische Antwort der REST API?

Hallo,

ich habe das Beispiel für die REST API aus der Dokumentation benutzt. Momentan mache ich es so, das ich über einen Upload Button eine CSV-Datei hochlade und diese dann mit PHP durchlaufen lasse. Dann schicke das ganze weg. Wie kann man das dynamischer gestalten. So nach dem Motto eins weg geschickt, danach gleich Ausgabe ob Erfolg oder Fehler.

Geht das nur mit Javascript? Und wenn ja, gibt es dafür irgendwo Beispiele?

Kannst du noch mal genauer beschreiben was du tust? Man kann die API Aufrufe in einer Schleife in PHP laufen lassen. Als eine Datenquelle (Artikeldaten) würde sich eine Datenbank anbieten. Eine CSV würde jedoch auch gehen. 

Aber klar gerne. Hier mein “Code” . So aktualisiere ich Preise.

    Ungültige Dateiendung. Nur CSV-Dateien sind erlaubt");
      }
       
      //Überprüfung der Dateigröße
      $max_size = 250000*1024; //250000 KB
      if($_FILES['csv_upload']['size'] > $max_size) {
        die("Bitte keine Dateien größer 250MB hochladen");
      }
       
      //Pfad zum Upload
      $new_path = $upload_folder.$filename.'.'.$extension;
       
      //Neuer Dateiname falls die Datei bereits existiert
      if(file_exists($new_path)) { //Falls Datei existiert, hänge eine Zahl an den Dateinamen
        $id = 1;
        do {
          $new_path = $upload_folder.$filename.'_'.$id.'.'.$extension;
          $id++;
        } while(file_exists($new_path));
      }
       
      //Alles okay, verschiebe Datei an neuen Pfad
      move_uploaded_file($_FILES['csv_upload']['tmp_name'], $new_path);
      //echo 'Datei erfolgreich hochgeladen: '.$new_path.'';
      echo 'Datei verarbeitet: '.$new_path.'';

      // Upload beendet

      // Upload öffnen und Informationen entnehmen:
      $fp = fopen($new_path, "r");
      echo "";
      $counter = 1;
      while ( ($dataRow = fgetcsv($fp, 0, ";")) !== FALSE ) {
        if(is_numeric($dataRow[1])){
           // Update des Preises
            $updateArticle = array(
                    'mainDetail' => array(
                    'prices' => array(
                      array(
                          'customerGroupKey' => 'EK',
                          'price' => floatval($dataRow[1])
                      )
                    )
                  )
                );
          // Senden der Update Preise
          $client->put('articles/'. $dataRow[0] .'?useNumberAsId=true', $updateArticle);
        }
        else{
          echo "Zeile $counter wird ignoriert, da die zweite Spalte keine Zahl ist.";
        }
        $counter++;
      }
      // hochgeladene Daten löschen
      unlink($new_path);
      }
    ?>

 

Ganz schön smart. Du kannst aber genauso alle anderen Felder aktualisieren. Oder übersehe ich etwas?

Ja das selbe Beipiel funktioniert auch mit Artikel Erstellung. Wünschenswert wäre hier das nach jeder Artikeländerung eine Rückmeldung im Browser erfolgt.
Und dafür brauch ich dann wohl Javascript?! Undecided

Kannst du in PHP keine Meldungen nach jedem API-Call ausgeben?!

Der Client gibt ja eine Response zurück bei jedem put.

Gib die doch einfach aus, breake deine while-Schleife, und generiere einen “next”-Button der dann mit der nächsten Zeile weiter macht.

Weiß nicht ob eine CSV dafür das beste mittel ist. Ich glaube ich würde den Inhalt der CSV vorher irgendwo zwischenspeichern. Eine DB oder ein Array in der Session oder sowas.

Damit man nicht jede Zeile einzeln bestätigen muss könntest du zusätzlich noch vorher abfragen ob der API-Aufruf erfolgreich war und nur bei Fehlern eine Bestätigung fordern.

…ja genau…und gleichzeitig die gängigen Rückmeldungen übersetzen :wink: es hört sich nach einem guten Plan an :slight_smile:

Wieso nicht ein eigenes Backend-Plugin für den CSV Import schreiben?
Oder das bestehende Import-Modul mit einem eigenen Satzaufbau verwenden? …

Schöne Grüße,
Niklas