Hersteller Import über die Datenbank ohne Nebeneffekte machbar?

Shopware Version: 5.2.5

Hallo Zusammen,

ich bin gerade dabei ein Magento-System zu migrieren. Da mein Magento-System ursprünglich vor vielen Jahren mit der Version 1.3 begonnen hat, habe ich die Herausforderung, dass die Hersteller nur auf einem Attribut in den Produkten integriert waren. Nun möchte ich gerne einen initialen Herstellerimport in Shopware vornehmen. 

Dabei habe ich mir in Magento CSV-Exports geschrieben, welche ich in die leeren Herstellertabellen: 

  • s_articles_supplier
  • s_articles_supplier_attributes

Nach meinen ersten Tests funktioniert das Ganze auch wie gewünscht. Ich wollte hier in die Runde fragen, ob das Vorgehen so in Ordnung ist oder ob ich mir da irgendwelche bösen Nebeneffekte verursachen könnte? 

Vielen Dank. 

Liebe Grüße

Kevin

Beim Artikelimport werden die fehlenden Hersteller automatisch angelegt. Hast du noch mehr Daten zum Hersteller außer seinem Namen?

Hi,

danke für die Antwort. Mein Problem ist aber, dass ich die Hersteller nicht auf den Artikel als typisches Herstellerattribut habe.

Folgende Konstellation ist bei mir im Magento System im Einsatz (früher ging das leider nicht anders)

Ich habe zig unterschiedliche Herstellerkategorieseiten. Diese enthalten vielen Informationen der Hersteller

  • Name
  • Beschreibung
  • Adresse
  • Herstellerlink
  • Metainformationen 

Quasi fast das volle Programm an Daten. 

Zusätzlich gibt es auf dem Artikel eine Eigenschaft als Filter, welche lediglich eine Referenz zu der Kategorie hat.

Aus diesem Grund sehe ich wenig Chancen über den Artikelimport die Hersteller automatisiert angelegt zu bekommen, da ich die ja quasi gar nicht als typisches Herstellerattribut in den Produkten habe. 

Liebe Grüße

Kevin

Ohne Artikel werden die Herstellerseiten, meines Wissens, nicht angezeigt. 

Bzgl. deiner Frage ich befürchte du wirst es einfach testen müssen. 

Ich persönlich würde es eher über die API versuchen. 

s_articles_suppliers und die dazugehörigen attributes haben eigentlich keine weiteren Abhängigkeiten auf andere Tabellen. Sollte so funktionieren.

Hi, 

da gebe ich dir Recht. Artikel müssen noch vorhanden sein. 

Das ist dann mein 2. Schritt dafür zu Sorgen, dass die Referenz des Herstellers bei meinem Artikelimport korrekt mitgegeben wird. Ich werde das in jedem Falle mal ausgiebig testen. Nach meinen ersten Tests sah es gut aus. Wobei natürlich die API natürlich eine saubere Methode ist :) 

Danke für für deinen Input 

@t2oh4e schrieb:

s_articles_suppliers und die dazugehörigen attributes haben eigentlich keine weiteren Abhängigkeiten auf andere Tabellen. Sollte so funktionieren.

Genau das hatte ich gehofft zu hören :slight_smile: Dann bin ich schon beruhigt… 

Liebe Grüße und Danke

Kevin 

Ich habe mir nun die API auch nochmals angesehen und mich entschieden, den Import einfach über die API zu machen. Ist sauberer und auch nicht wirklich viel mehr Aufwand. Danke nochmal für eure Tipps. 

Liebe Grüße

Kevin

Hi Zusammen,

wollte nochmal Bescheid geben, dass ich den Import nun via Shopware API vorgenommen habe. Habe mir lediglich ein kleines PHP-Skript geschrieben und entsprechend über meinen alten Magento-Shop aufgerufen. Funktioniert sauber und ohne Probleme. 

Für alle die es interessiert anbei der Code: 

include 'SwApiClient.php';
require("../app/Mage.php"); // load the main Mage file
Mage::app(); // not run() because you just want to load Magento, not run it.

$apiClient = new ApiClient(
//URL of the Server
    'http://URL/api',
    //Username
    'APIUSER',
    //API Key
    'APIKEYAUSSHOPWAREBACKEND'
);

// load all of the active categories in the system and include all attributes
$categories = Mage::getModel('catalog/category')
    ->getCollection()
    ->addAttributeToSelect('*')
    ->addIsActiveFilter()
    ->addAttributeToFilter('parent_id',array('in' => array(25,29,35,49,77,103,166,174,188,221,239,401,500,547,578,633,664,707)));

$export_file = "log_import_suppliers.log"; 
$export = fopen($export_file, 'w') or die("Permissions error."); 
$supplier_file = "supplier_shopware.csv"; 
$export_supplier = fopen($supplier_file, 'w') or die("Permissions error."); 

$output = "";

$output = date('d.m.Y H:i') . "Start Importing manufactuers";
$output .= "\r\n"; // add end of line
fwrite($export, $output); // write the file header with the column names

$outputSupplier = "id~name\r\n"; // column names. end with a newline.
fwrite($export_supplier, $outputSupplier); // write the file header with the column names

foreach ($categories as $category) {

    $apiImportCall = $apiClient->post('manufacturers', array(
        'name' => $category->getName(),
        'link' => $category->getLinkweingut(),
        'description' => $category->getDescription(),
        'metaTitle' => $category->getMetaTitle(),
        'metaKeywords' => $category->getMetaKeywords(),
        'metaDescription' => $category->getMetaDescription(),
        'attribute' => array(
            'attr' => $category->getAdresserzeuger()
        )
    ));
    $output = date('d.m.Y H:i') . " Result Importing: " . $category->getName() . " --> " . $apiImportCall["success"];
    $output .= "\r\n"; // add end of line

    fwrite($export, $output);

    if($apiImportCall["success"] == 1)
    {
        $outputSupplier = ""; // re-initialize $output on each iteration
        $outputSupplier .= '"' .$apiImportCall["data"]["id"]. '"~'; 
        $outputSupplier .= '"'.$category->getName().'"'; /
        $outputSupplier .= "\r\n"; // add end of line
        fwrite($export_supplier, $outputSupplier);
    }

}

echo "Finished import";

fclose($export); // close the file handle.
fclose($export_supplier);

Danke nochmals für den Tip. 

Liebe Grüße

Kevin

2 Likes