Beispiel-Artikel im Shop per Script einpflegen

Shopware Labs

Der Bereich Shopware Labs ist die Plattform für alle Entwickler. Hier findet man technische Dokumentationen und zahlreiche Tipps und Tricks rund um das Thema Programmieren. In dieser Rubrik stellen außerdem die Entwickler der shopware AG neue und experimentelle Lösungsansätze vor. Neue Funktionen, die in dieser Rubrik bereitgestellt werden, sind teilweise auch für zukünftige Releases geplant. Die Funktionen können dann ohne Programmierkenntnisse zukünftig direkt im Shopware Backend konfiguriert werden oder werden über Plugins bereitgestellt. Informationen über neue, geplante Funktionen finden Sie in unserer Roadmap.

Bitte beachten Sie, dass die hier bereitgestellten Lösungsansätze nicht offiziell supportet werden und nur eingebaut werden sollten, sofern Sie über das entsprechende, technische Wissen verfügen.

0 Kommentare
  • Gültig bis Version: 3.5.7

Per Script Artikel einpflegen

Für Performance-Tests oder Template-Anpassungen werden Artikel zur Darstellungen oftmals benötigt. Ohne großen Aufwand können Sie diese einfach per Script in Ihre Shopware integrieren. Nachfolgende Sachen können per Script hinzugefügt werden:

  • Artikeldichte (Artikelanzahl, Anpassung muss im Script vorgenommen werden)
  • Übersetzungen für Subshops
  • Kategorien
  • Artikel mit Beschreibungstext

Artikel mit der Abbildung des Konfigurators sind aktuell noch nicht verfügbar. Nachfolgend die Anleitung zur "zufälligen Erstellung" Beispiel-Artikel.

Das Script können Sie sich unten im Downloadbereich fertig herunterladen.

Schritt 1

Erstellen Sie im Verzeichnis Ihrer Shopware ein leeres Dokument mit der Endung .php. Der Name ist hier frei wählbar.

In diesem Beispiel verwenden wir jedoch den Namen "artikel.php".

Einfügen des PHP-Codes in die artikel.php

Fügen Sie nachfolgenden Code in die artikel.php ein:

<?
include("engine/connectors/api/api.php");
ini_set('display_errors',1);
error_reporting(E_ALL);
$api = new sAPI();
$import     = &$api->import->shopware;    // includes funtion for clever import of data
 
 
// clean the database table articles and categories
$import->sDeleteAllArticles();
$import->sDeleteAllCategories();
 
 
$mappingmask = array (
    "name"=>"Modell",
    "ordernumber"=>"Artikelnummer",
    "price"=>"Preis",
    "supplier"=>"Hersteller",
    "suppliernumber"=>"Fabrikartikel",
    "baseprice"=>"UVP",
    "instock"=>"Bestand",
    "WG_1",
    "WG_2",
    "description_long"=>"Bemerkung",
    "image"=>"Bild"
);
 
 
$makeCategories = 2000;
$ctCategories = 0;
$categories = array();
$words = array("Save","mein","Hund","test","Haus","der","Das","unser","
Meer","Klaus","von","ich","du","Computer","Hardware","Demo","Telefon","Telefax","Toner","Bild","Rudi","Marlboro","
Stern","Strand","Wasser","Sonne","Eis","Kalt","Warm","Spiegel","Maus","Tasse","Tür","Papier","Brief","Zettel",
"Stift","Kulli","will","möchte","dein","Paket","Brenner","Flasche","Handy","Medizin","denke","dachte","wollte","möchte","cd","
Taschentuch","Adapter","Stereo","Mono","Geld","Hundert","Tausend","50","1","100","10","99","89","Windows","
Office","Edding","Kugel","Quadrat","Meter","Anruf","Notiz","Diskette","Drucker","Kopfhörer","Schrank","Lüfter","Bild",
"Code","Zend","Rechnung","Lieferung","frage","antwort","zufall","sein","oder","nicht","sein","Hallo","Welt","Erde","Mond");
 
$wordsEN = array("The","Moon","Sun","Sir","Want","will","be","get","put","save","ask","question","order","basket","invoice",
"she","he","me","complicated","test","have","correct","folder","module","work","called","allways","error","message","outdated","help",
"figured","duplicate","classes","modules","named");
 
 
$getMainCategories = $api->sDB->GetAll("
SELECT id FROM s_categories WHERE parent = 1
");
 
foreach ($getMainCategories as $maincategory){
$categories = array();
for ($i = 0; $i <= 5;$i++){
    // 10 Hauptkategorien
    $categories[$i] = array("description"=>generateRandomCode(3));
    $parent = $import->sCategory( array(
    "description"=>$categories[$i]["description"], 
    "parent"=>$maincategory["id"] 
    ));
 
    // Jeweils zwischen 6 und 10 Unterkategorien
    $rand = rand(6,10);
    for ($i2 = 0;$i2 <= $rand;$i2++){
        $categories[$i]["sub"][$i2] = array("description"=>generateRandomCode(3));
        $parent2 = $import->sCategory( array(
        "description"=>$categories[$i]["sub"][$i2]["description"], 
        "parent"=>$parent 
        ));
        $rand2 = rand(6,10);
        for ($i3 = 0;$i3 <= $rand2;$i3++){
            $categories[$i]["sub"][$i2]["sub"][$i3] = array("description"=>generateRandomCode(3));
            $saveCategories[] = $import->sCategory( array(
            "description"=>$categories[$i]["sub"][$i2]["sub"][$i3]["description"], 
            "parent"=>$parent2
            ));
        }
    }
}
}
 
 
 
 
function generateRandomCode($length,$lang="")
{
  global $words;
  global $wordsEN;
  if (empty($lang)){
  $wordsLength = count($words);
 
  $length = rand(1,$length);
  for ($i = 1;$i<=$length;$i++){
      $myString[] = $words[rand(0,$wordsLength)];
  }
  $myString = implode(" ",$myString);
  }else {
        $wordsLength = count($wordsEN);
 
      $length = rand(1,$length);
      for ($i = 1;$i<=$length;$i++){
          $myString[] = $wordsEN[rand(0,$wordsLength)];
      }
      $myString = implode(" ",$myString);
  }
  return $myString;
  //return strtoupper(substr(md5(rand(1,99999).date("FjYgias")), 0, $length));
}
$mappingmask = array (
    "name",
    "ordernumber",
    "price",
    "supplier",
    "suppliernumber",
    //"shippingtime",
    "baseprice",
    "instock",
    "WG_1",
    //"active",
    "description_long"=>"Bemerkung",
    "image"=>"Bild"
    //"description",
    //"attr" => "attributes",
);
 
function random_float ($min,$max) {
   return ($min+lcg_value()*(abs($max-$min)));
}
$mapping =& $api->convert->mapping;
$mappingmask = $mapping->prepare_mask ($mappingmask);
// Building random articles
$countArticles = 5000;
for ($i=0;$i<=$countArticles;$i++){
    $ordernumber = "AT".rand(1,999999).substr(md5(generateRandomCode(4)),0,5);
    $articlename = generateRandomCode(4);
    $description = generateRandomCode(150);
    $articles[$i] = array(
    "name"=>$articlename,
    "ordernumber"=>$ordernumber,
    "price"=>random_float(1,1000),
    "supplier"=>generateRandomCode(1),
    "instock"=>rand(0,500),
    "WG_1"=>$saveCategories[rand(0,count($saveCategories))],
    "Bemerkung"=>$description
    );
}
 
 
foreach ($articles as $article){    
 
    // Assing value from $article_tmp (array of one csv row) exactly to $article_data by $mappingmask
    // $article_data includes all relevant column names and according values
      $article_data = $mapping->convert_line($mappingmask, $article, true);    
 
      // condition of shippingtime: Change the content of $article_data, section shippingtime
 
      // expand $article_data by supplierID for adding LINK
      $article_data["supplierID"] = $import->sSupplier( array(
                                          "supplier"=>$article_data['supplier'],
                                          "link"=>$article_data['supplierlink']
                                          ));                                        
 
      $article_insert = $import->sArticle( $article_data );            
 
      $article_data = array_merge($article_data, $article_insert);            
 
 
 
    $category_insert = $import->sArticleCategory ($article_data["articleID"], $article["WG_1"]);
 
    $import->sDeleteOtherArticlesCategories($article_data["articleID"], $category_insert);            
 
    $customergroup = "EK";
    $tax = 19;
    // create an array with relevant, nesessary and given values
    $price = array(
        "price" => $article_data["price"],
        "articledetailsID" => $article_data["articledetailsID"],
        "pricegroup" => "EK",
        "baseprice" => $article_data["baseprice"],
        "pseudoprice" => $article_data["pseudoprice"],
        "tax" => 19
    );    
    // import prices now
    $import->sArticlePrice($price);      
 
    $import->sDeleteArticleImages( array( "articleID"=>$article_data["articleID"] ));
 
    // Import translations
    $translate = array('name'=>generateRandomCode(5,"en"),'keywords'=>generateRandomCode(15,"en"),'description'=>generateRandomCode(35,"en"),'description_long'=>generateRandomCode(155,"en"),'additionaltext');
    $import->sTranslation("article", $article_data["articleID"], "en", $translate);
 
    // import file now. System will manage all exigencies:
    // file copy, thumbernail generation, insert according id's in database tables et cetera 
    /*$import->sArticleImage( array( 
            "image"=>$article_data["image"],
            "articleID"=>$article_data["articleID"]
            )); */ 
}
?>
 

Aufruf des Scripts über die Domain

Im vorletzten Schritt, rufen Sie die soeben erstellte artikel.php Datei über Ihre Domain auf. Beispiel:

www.ihrshop.de/artikel.php

Shopcache leeren

Damit die Artikel auch in der Storefront angezeigt werden, muss der Shopcache aus dem Backend heraus gelöscht werden.

WICHTIG: Artikel die vor dem Import vorhanden sind, werden automatisiert entfernt.

Verfügbare Downloads:

Artikel bewerten

Waren diese Informationen hilfreich? Ja Nein


Kommentare: (0)

Dieser Artikel wurde noch nicht kommentiert!

Artikel kommentieren


Die mit einem * markierten Felder sind Pflichtfelder.

Weitere interessante Artikel:

Anlegen und Anpassen von Attributen (Freitext-Feldern)

Vorwort Shopware unterstützt bis zu 20 Zusatzfelder, die automatisch in der Eingabemaske der Artikelstammdaten bereitgestellt werden. Für die Anpassung sind einfache MySQL-Kenntnisse erforderlich.... [weiterlesen]

 

Einbindung von Affilinet

Produktexport Änderungen Klicken Sie unter Marketing auf das Modul Produktexporte. Editieren Sie den Bestehenden „affili.net“ Feed. Ändern Sie die Kopfzeile in: {strip} art_number{#S#} category{#S#} title{#S#}... [weiterlesen]

Shopseiten deaktivieren, per Link aber erreichbar machen

Das Problem: Eigene Shopseiten oder auch Statische Seiten wie z.B. das Impressum werden einer Menüstruktur zugeordnet und werden somit auch direkt in der Navigation sichtbar. Wenn Sie nun aber einen Artikel Ausblenden bzw.... [weiterlesen]

Bestell-Nr.: SW1526

Lieferzeit ca. 5 Tage

€ 4,00

Preise inkl. gesetzlicher
MwSt. zzgl. Versandkosten*

€ 4,00

Preise inkl. gesetzlicher
MwSt. + Versandkosten*