2017-06-08 2 views
0

Ich habe ein kleines Wordpress-Plugin entwickelt, um die Daten von Benutzern aus der Datenbank als CSV-Datei herunterzuladen.Anzeige der Erfolgsmeldung nach dem Download CSV

Alles funktioniert gut, obwohl ich Probleme habe herauszufinden, wie eine Erfolgsmeldung angezeigt wird.

Unter dem Code der Methode, die Pflege der Datenexport nimmt:

/* 
* Export CSV File 
*/ 
public function export_CSV() 
{ 

    if ($this->users) { 

     $fileName = "Export_users_" . date("Y-m-d_H:i:s", time()); 
     $fileName = $fileName.".csv"; 
     header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
     header('Content-Description: File Transfer'); 
     header('Content-Encoding: UTF-8'); 
     header("Content-type: application/csv;charset=UTF-8"); 
     header("Content-Disposition: attachment; filename={$fileName}"); 
     header("Expires: 0"); 
     header("Pragma: public"); 
     echo "\xEF\xBB\xBF"; // UTF-8 BOM 
     $fh = @fopen('php://output', 'w'); 
     $headerDisplayed = false; 

     foreach ($this->users as $user) { 

      if($user) { 


       $user_meta = get_user_meta($user->data->ID); 

       //Push user meta into $user array 

       foreach($user_meta as $key => $var) 
       { 
        $user->data->$key = trim($var[0]); 
       } 

       //convert object in array; 

       $usersArray = (array)$user->data; 

       // Add a header row if it hasn't been added yet 

       if ($headerDisplayed == false) { 

        // Use the keys from $directory as the titles 

        fputcsv($fh, array_keys($usersArray)); 

        $headerDisplayed = true; 
       } 

       // Put the data into the stream 

       fputcsv($fh,$usersArray); 


      }//end if 

     }//end foreach 

     // Close the file 

     fclose($fh); 

     // Users exported successfully 

     $this->response = "Users exported successfully!"; 

     // Make sure nothing else is sent 

     exit; 


    } else { 

     // No results found 

     $this->response = "Sorry, no results found!"; 

    } 

} 

I Ausgang verwenden müssen ansonsten die CSV-Datei, die alle HTML-Code der Seite enthält. Gibt es eine Möglichkeit, eine Javascript-Datei zu starten, um die Nachricht im Frontend zu aktualisieren?

Vielen Dank im Voraus!

+0

Setzen Sie den Download-Material in einer anderen Seite. Sie können die Header nur einmal senden, deshalb können Sie HTML nach dem Senden des CSV-Headers nicht drucken. – modsfabio

+0

Nach meinem Wissen gibt es keine Möglichkeit, etwas zu starten, nachdem ein Download abgeschlossen wurde. Ich denke, dass Sie ServerSentEvents oder etwas verwenden konnten, aber das scheint ein bisschen übertrieben. – Halcyon

Antwort

0

Zu allererst:

Setzen Sie auf die Download-Details in einer anderen Seite. Sie können die Header nur einmal senden, das ist einer der Gründe, warum Sie HTML nach dem Senden des CSV-Headers nicht drucken können.

Zweitens könnten Sie dann eine if/else-Anweisung erstellen, wenn die Funktion erfolgreich war. und wenn es so wäre könnte man einige JS Code wie das Beispiel fügen Sie unter:

if($download = true) { 
    echo "<script> alert('Download succesfull!'); </script>"; 
} 
else { 
    echo "<script> alert('Download failed!'); </script>"; 
} 

Tho ich bin nicht sicher, ob es wie oben arbeiten könnte, da es ein Serverereignis. Eine andere mögliche Lösung wäre das Erstellen eines ServerEventChecks.

+0

Diese Lösung hat nicht funktioniert. Ich habe oben eine Lösung gefunden. Danke trotzdem @Deathstorm – Marco

0

Ich kam zu einer Lösung, indem ich die Antwortnachricht als Variable in der Kopfzeile übergab.

$this->response = "Users downloaded Successfully!"; 
header("Location:?page=export-users&response=".$this->response); 

und abrufen es dann etwa so:

<?php if(isset($_GET['response'])){ ?> 
     <div class="updated notice"> 
      <p><?php echo __($_GET['response']);?></p> 
     </div><!--error notice--> 
    <?php } ?> 
Verwandte Themen