Bei der Vorbesprechung der G-WARD-Gewinner (und anderer aktiver Foren-User) mit Daniel und Nonito am Tage des User-Meetings in Bremen, wurde als eines der drängendsten Probleme die Anpassung von Export-Modulen benannt, da einige Zielportale neue/andere Daten erwarten, als bisher vorgesehen. Nun sind die aktuellen Exportmodule so übel, dass man da als User kaum etwas ändern kann. Ich hatte vor Jahren das Ganze schon mal im xtc-Umfeld komplett überarbeitet, so dass das wesentlich übersichtlicher gehandhabt wird. Und in meinem Archiv habe ich das noch gefunden (aus dem Jahr 2008!). Das verfolgte Konzept ist wie folgt: Es gibt eine Basis-Export-Klasse, die alle operativen Aufgaben erledigt. Die Export-Klassen für die Zielsysteme sind jetzt eine Art "Plugin", die diese Basis-Klasse beerben. Sie sind letzten Endes nur noch dazu da, die Struktur des Export-Headers, und die zu exportierenden Datenfelder zu definieren (jeweils in der gleichen Reihenfolge). (Im Gegensatz zu den jetzigen Modulen, die ein unüberschaubares Programmgewirr sind, ist das jetzt total übersichtlich!) Für die Definition der zu exportierenden Felder sind im Export-Modul die folgenden Daten verfügbar: PHP: brand_namecategories_namecode_isbncode_jancode_mpncode_upcgoogle_export_availability_idgoogle_export_conditionmanufacturers_namenc_ultra_shipping_costsproducts_date_addedproducts_date_availableproducts_descriptionproducts_eanproducts_fsk18products_idproducts_imageproducts_keywordsproducts_modelproducts_nameproducts_priceproducts_quantityproducts_shippingtimeproducts_short_descriptionproducts_tax_class_idproducts_urlproducts_vpeproducts_vpe_statusproducts_vpe_valueproducts_weight Also alles, was man so brauchen könnte. Die Export-Basis-Klasse und die Plugin-Klassen wurden gleich überladbar konzipiert, so dass man diese auch beeinflussen kann. Das Export-Plugin für "billiger.de" sieht jetzt z.B. wie folgt aus: PHP: <?php/* -----------------------------------------------------------------------------------------$Id: billiger.php,v 1.1.1.1.2.1 2008/11/30 11:16:34 avenger Exp $Author: Avenger, entwicklung@powertemplate.deCopyright © 2008 (xtCommerce Version), AvengerCopyright © 2012 (Gambio Version), AvengerExport plugin for billiger.de-----------------------------------------------------------------------------------------based on:(c) 2000-2001 The Exchange Project (earlier name of osCommerce)(c) 2002-2003 osCommerce(cod.php,v 1.28 2003/02/14); www.oscommerce.com(c) 2003 nextcommerce (invoice.php,v 1.6 2003/08/24); www.nextcommerce.org(c) 2004 XT - Commerce; www.xt-commerce.comReleased under the GNU General Public License---------------------------------------------------------------------------------------*/defined( '_VALID_XTC' ) or die( 'Direct Access to this location is not allowed.' );define('MODULE_BILLIGER_TEXT_DESCRIPTION', 'Export - Billiger.de');define('MODULE_BILLIGER_TEXT_TITLE', 'Billiger.de - CSV');include_once(DIR_WS_CLASSES.'export.php');class billiger_ORIGIN extends export{ function __construct() { parent::init(); $this->field_separator=';'; } function export_header_field_names() { $export_header_field_names=array( 'id', 'hersteller', 'modell_nr', 'name', 'kategorie', 'beschreibung', 'bild_klein', 'bild_gross', 'link', 'lieferzeit', 'lieferkosten', 'preis', 'waehrung', 'aufbauservice', '24_Std_service', 'EAN', 'ASIN', 'ISBN', 'PZN', 'ISMN', 'EPC', 'VIN' ); return $export_header_field_names; } function export_data_field_names() { $export_data_field_names=array( 'products_id', 'manufacturers_name', 'products_model', 'products_name', 'categories_name', 'products_description', 'products_image', 'products_image_big', 'products_url', 'products_shippingtime', 'shipping_costs', 'products_price', 'currency', '', '', 'products_ean', '', 'code_isbn', '', '', '' ); return $export_data_field_names; }}MainFactory::load_origin_class('billiger');?> In PHP: function __construct() { parent::init(); $this->field_separator=';'; } wird die Initialisierung der Basisklasse aufgerufen, und das Zeichen definiert, das als Feldtrenner in den Exportdaten zu verwenden ist. In der "export_header_field_names"-Methode des Plugins werden in einem Array die Namen der Exportfelder definiert, die das Zielsystem als Namen erwartet (daraus wird die erste Zeile der Export-Datei aufgebaut...). PHP: function export_header_field_names() { $export_header_field_names=array( 'id', 'hersteller', 'modell_nr', 'name', 'kategorie', 'beschreibung', 'bild_klein', 'bild_gross', 'link', 'lieferzeit', 'lieferkosten', 'preis', 'waehrung', 'aufbauservice', '24_Std_service', 'EAN', 'ASIN', 'ISBN', 'PZN', 'ISMN', 'EPC', 'VIN' ); return $export_header_field_names; } In der "export_data_field_names"-Methode des Plugins werden dann ebenfalls in einem Array die Namen der Datenfelder definiert, die in der Exportdatei ausgegeben werden sollen (in der gleichen Reihenfolge wie die korrespondierenden Feldnamen). PHP: function export_data_field_names() { $export_data_field_names=array( 'products_id', 'manufacturers_name', 'products_model', 'products_name', 'categories_name', 'products_description', 'products_image', 'products_image_big', 'products_url', 'products_shippingtime', 'shipping_costs', 'products_price', 'currency', '', '', 'products_ean', '', 'code_isbn', '', '', '' ); return $export_data_field_names; } Und das ist dann alles, was notwendig ist, um das Exportformat für das jeweilige Zielsystem zu definieren! Es gibt auch Fälle, in denen ein XML-Export verlangt wird, z.B. für "golem.de". Auch das ist berücksichtigt, das Export-Plugin dafür sieht wie folgt aus: PHP: <?php/* -----------------------------------------------------------------------------------------$Id: golem.php,v 1.1.1.1.2.1 2008/11/30 11:16:34 avenger Exp $Author: Avenger, entwicklung@powertemplate.deCopyright © 2008 (xtCommerce Version), AvengerCopyright © 2012 (Gambio Version), AvengerExport plugin for golem.de (XML-export!)-----------------------------------------------------------------------------------------based on:(c) 2000-2001 The Exchange Project (earlier name of osCommerce)(c) 2002-2003 osCommerce(cod.php,v 1.28 2003/02/14); www.oscommerce.com(c) 2003 nextcommerce (invoice.php,v 1.6 2003/08/24); www.nextcommerce.org(c) 2004 XT - Commerce; www.xt-commerce.comReleased under the GNU General Public License---------------------------------------------------------------------------------------*/defined( '_VALID_XTC' ) or die( 'Direct Access to this location is not allowed.' );define('MODULE_GOLEM_TEXT_DESCRIPTION', 'Export - Golem.de (XML)<br><b>Format:</b><br>');define('MODULE_GOLEM_TEXT_TITLE', 'Golem.de - XML');// include needed functionsinclude_once(DIR_WS_CLASSES.'export.php');class golem_ORIGIN extends export{ function __construct() { parent::init(); $this->field_separator='xml'; } function export_header_field_names() { //create header return '<?xml version="1.0" encoding="utf-8"?><doc>'; } function export_data_field_names($export_data) { //create content return ' <product> <group>'.parent::xml_convert($export_data['categories_name']).'</group> <pid>'.parent::xml_convert($export_data['products_model']).'</pid> <name>'.parent::xml_convert($export_data['products_name']).'</name> <manufacturer>'.parent::xml_convert($export_data['manufacturers_name']).'</manufacturer> <description>'.parent::xml_convert($export_data['products_description']).'</description> <ean>'.$export_data['products_ean'].'</ean> <prices> <price> <currency>'.$export_data['currency'].'</currency> <inctax>'.$export_data['products_price'].'</inctax> <extax>'.$export_data['products_price_net'].'</extax> </price> </prices> <availability>'.$export_data['products_quantity'].'</availability> <url>'.$export_data['products_url'].'</url> </product>'; } function export_footer() { //create footer return '</doc>'; }}MainFactory::load_origin_class('golem');?> Etwas komplexer, aber immer noch gut überschaubar.... Und man kann natürlich auch einfach neue Plugins definieren, wenn man woanders hin exportieren will. Ich habe schon mal die aktuellen Definitionen für "billiger.de", "froogle,de", "guenstiger.de" und "golem.de" so angepasst, wie sie den derzeit verwendeten Export-Modulen entsprechen. Es werden noch kenntnisreiche Freiwillige gesucht, die die Datendefinitionen der anderen Export-Module in die entsprechenden Plugins umwandeln....
Ist mit Sicherheit das Grundkonzept was dringend gebraucht wird. In der Basisklasse kann ich doch auch noch benötigte Datenfelder hinzufügen? ODER? Für Google sind ja noch die GoogleCats usw. notwendig. So und da jetzt noch ne Oberfläche fürs Admin geschaffen und das Teil wäre perfekt. Das schau ich mir doch mal genauer an. Sehr interessanter Ansatz. Und das aus dem Jahre 2008!!!
Ich denke nicht, dass man eine Admin-Oberfläche braucht..... Die Plugin-Definitionen muss ja nicht jeder machen... Und Leute die das können und bereit stellen gibt es sicher genügend (mehr als 10 Minuten braucht man dazu nicht).. Und da das ganze updatesicher und durch kopieren installierbar ist, reicht das m.E. voll aus. So eine Admin-Oberfläche macht das gleich 10 Mal aufwändiger.....
Ja, sehe ich auch so. Ich habe bei der Gelegenheit auch die Berechnung der Versandkosten neu gemacht: bisher mussten die ja beim Export für eingegeben werden, so dass die für alle Artikel gleich sind. Wenn diese angegeben werden, werden diese weiterhin für alle Artikel genommen. Sonst wird geprüft, ob Artikelversandkosten definiert sind. Falls vorhanden werden diese verwendet. Falls nicht vorhanden, werden die günstigsten Versandkosten der installierten Shipping-Module für den Artikel innerhalb des Shop-Landes verwendet..... Neu ist auch das Feld "google_category", das nun für den Export zur Verfügung steht.
Wir sind seit kurzem live mit unserem Shop und haben nun das Problem der Anbindung an die Preissuchmaschinen. Ein Problem ist dass die Formate nicht aktuell sind ein anderes ist dass die Versandkosten nur global pro Preissuchmaschine eingegeben werden können. Da wir unterschiedliche Versandkosten für Artikel haben (3,90 € Kleinpaket, 6,90 € Paket, 59,90 € Spedition) ist für uns der Export nicht brauchbar. In unserem bisherigen OS Commerce (PX Webshop) konnte mann die Versandkosten automatisch vom Versandmodul berechnen lassen. Ebenso konnte man die Exportformate selbst anlegen oder verändern. In diesem Bereich sollte Gambio dringend tätig werden, man verliert sonst sehr an Sichtbarkeit. Wie löst Ihr das Problem das Preissuchmaschinen korrekt und automatisiert angesprochen werden können ?