Antwort #2 am: 19. Juli 2017, 14:18:46
Ich hab es mal so gelöst, dass ich folgende Datei ins Root-Verzeichnis des Shops geworfen habe und diese via Cronjob aufrufe; daher auch der Output via "echo", da mein Hoster mir diesen per Mail zusendet.
Vorher habe ich natürlich die Tabelle "orders" in der Datenbank um die Spalte "ekomi_exported", Typ boolean, Standardwert "0" erweitert.
<?php// Export new orders to csv file for eKomi// @author: Parker// @created: 2017-07-14include ('includes/configure.php');include ('includes/application_top.php');error_reporting(0);// Set parameters for CSV Export$csvfile = "temp/eKomi_orders/ekomi_orders.csv";$csvb = "\""; // field bracket, e.g. \", or ', or none$csvd = ";"; // column devider, e.g. ; , \t$csvlb = "\n"; // line breack, e.g. \n// modified error reportingif(GB_ERROR_REPORTING
) { error_reporting(-1);} else { error_reporting(0);}// Get orders from DB$sql_get = "SELECT
`orders_id`,`customers_id`,`delivery_firstname`,`delivery_lastname`,`delivery_company`,`delivery_street_address`,`delivery_suburb`,`delivery_city`,`delivery_postcode`,`delivery_state`,`delivery_country`,`delivery_country_iso_code_2`,`customers_email_address`,`date_purchased`,`language`,`currency`
FROM `orders`
WHERE `ekomi_exported` = 0 AND `orders_status` = 3";$orders = mysql_query($sql_get) or
die ("Sql error : " . mysql_error( ));$orders_array = xtc_db_fetch_array
($orders);$orders_count = mysql_num_fields($orders);// Mark Orders in DB$orders_row = array();while($row = mysql_fetch_assoc($orders)) { $orders_row[] = $row;}$order_list = "Orders that have been exported to eKomi at ".date("d.m.Y H:i:s").":".$csvlb;$order_list .= "---------------------------------------------------------------".$csvlb;foreach ($orders_row as $ordertm) { $sql_write = "UPDATE `orders`
SET `ekomi_exported` = 1
WHERE `orders_id` = ".$ordertm['orders_id']; // echo($sql_write); $order_list .= "OderID:".$ordertm['orders_id']." | Name: ".$ordertm['delivery_firstname']." ".$ordertm['delivery_lastname']." | Firma: ".$ordertm['delivery_company']."\n"; mysql_query($sql_write);}echo($order_list);// ### Make csv// create header$header_csv .= $csvb."orders_id".$csvb.$csvd;$header_csv .= $csvb."customers_id".$csvb.$csvd;$header_csv .= $csvb."delivery_firstname".$csvb.$csvd;$header_csv .= $csvb."delivery_lastname".$csvb.$csvd;// $header_csv .= $csvb."delivery_company".$csvb.$csvd;// $header_csv .= $csvb."delivery_street_address".$csvb.$csvd;// $header_csv .= $csvb."delivery_suburb".$csvb.$csvd;// $header_csv .= $csvb."delivery_city".$csvb.$csvd;// $header_csv .= $csvb."delivery_postcode".$csvb.$csvd;// $header_csv .= $csvb."delivery_state".$csvb.$csvd;$header_csv .= $csvb."delivery_country".$csvb.$csvd;$header_csv .= $csvb."delivery_country_iso_code_2".$csvb.$csvd;$header_csv .= $csvb."customers_email_address".$csvb.$csvd;$header_csv .= $csvb."date_purchased".$csvb.$csvd;$header_csv .= $csvb."language".$csvb.$csvd;$header_csv .= $csvb."currency".$csvb.$csvd;$header_csv .= $csvlb;// create CSV data$data = "";foreach ($orders_row as $ordertocsv) { $line = ''; $line .= $csvb.$ordertocsv['orders_id'].$csvb.$csvd; $line .= $csvb.$ordertocsv['customers_id'].$csvb.$csvd; $line .= $csvb.$ordertocsv['delivery_firstname'].$csvb.$csvd; $line .= $csvb.$ordertocsv['delivery_lastname'].$csvb.$csvd; // $line .= $csvb.$ordertocsv['delivery_company'].$csvb.$csvd; // $line .= $csvb.$ordertocsv['delivery_street_address'].$csvb.$csvd; // $line .= $csvb.$ordertocsv['delivery_suburb'].$csvb.$csvd; // $line .= $csvb.$ordertocsv['delivery_city'].$csvb.$csvd; // $line .= $csvb.$ordertocsv['delivery_postcode'].$csvb.$csvd; // $line .= $csvb.$ordertocsv['delivery_state'].$csvb.$csvd; $line .= $csvb.$ordertocsv['delivery_country'].$csvb.$csvd; $line .= $csvb.$ordertocsv['delivery_country_iso_code_2'].$csvb.$csvd; $line .= $csvb.$ordertocsv['customers_email_address'].$csvb.$csvd; $line .= $csvb.$ordertocsv['date_purchased'].$csvb.$csvd; $line .= $csvb.$ordertocsv['language'].$csvb.$csvd; $line .= $csvb.$ordertocsv['currency'].$csvb.$csvd; $data .= trim($line) . "$csvlb";}$data = str_replace("\r" , "" , $data);if ($data == "") { $data = "No new orders found!\n";}// print "$header_csv\n$data";file_put_contents($csvfile, $header_csv.$data);?> Funktionsweise:
- liest die Tabelle orders aus (Felder definiert in Zeile 25), die noch nicht exportiert sind (ekomi_exported=0) und versendet wurden (orders_status=3, was je Shop variieren kann).
- Setzt das Kennzeichen in der Spalte "ekomi_exported" auf 1, bei allen zuvor ausgelesenen Zeilen (Zeile 33ff).
- Schreibt CSV inkl. Header (Zeile 50ff).
Der Export sieht dann beispielsweise so aus:
"orders_id";"customers_id";"delivery_firstname";"delivery_lastname";"delivery_country";"delivery_country_iso_code_2";"customers_email_address";"date_purchased";"language";"currency";
"2068**";"57**";"Era****";"Dr****";"Deutschland";"DE";"Era***@***.com";"2017-07-16 14:02:45";"german";"EUR";
"2068**";"57**";"Erö****";"Br****";"Deutschland";"DE";"kün***@***.de";"2017-07-16 14:46:31";"german";"EUR";
"2068**";"57**";"Syi****";"Wa****";"Deutschland";"DE";"Syi***@***.de";"2017-07-16 20:16:06";"german";"EUR";
"2068**";"57**";"Von****";"De****";"Deutschland";"DE";"häl***@***.de";"2017-07-17 08:25:17";"german";"EUR";
Wichtig zu beachten ist, dass beim ersten Export
alle jemals getätigten Bestellungen exportiert werden. Die CSV-Datei wird immer neu überschrieben.
Man kann das schöner machen und eleganter programmieren, aber dafür würde ich viel zu lange brauchen. Ich hoffe nur, dass das jemandem hilft, der oder die das gleiche Problem hat.
@awids: Vielleicht magst Du ja mit uns teilen, wie Du es gemacht hast?