[REST API] Kategorien erstellen

Hallo, ich tue mich verdammt schwer mit Kategorien-Erstellung über die API. Folgendes konnte ich finden: // Anlegen einer Kategorie $createCategory = array( 'parentId' =\> 3, 'name' =\> 'Testkategorie' ); $categorie = $client-\>post('categories', $createCategory); Dies funktioniert soweit. Führe ich dies aber 2x aus, so habe ich 2 Kategorien mit dem gleichen Namen. Was ja so keinen Sinn macht. Mit der alten API wurde bemerkt, dass die Kategorie schon besteht. Daher gab es keine doppelten Kategorien. Wenn ich jetzt mal einen typisch alten Artikelexport von mir als vorlag nimm, da sind ja pro Artikeldatzesatz in einer externen CSV oder XML die Kategorien bzw. der Pfad hinterlegt. z.B. Produkte, Siemens, Telefone Dies würde ich dann so machen (natürlich in einer Schleife): // Anlegen einer Kategorie $createCategory = array( 'parentId' =\> 3, 'name' =\> 'Produkte' ); $categorie = $client-\>post('categories', $createCategory); $createCategory = array( 'parentId' =\> $categorie[data][id], 'name' =\> 'Siemens' ); $categorie = $client-\>post('categories', $createCategory); $createCategory = array( 'parentId' =\> $categorie[data][id], 'name' =\> 'Telefone' ); $categorie = $client-\>post('categories', $createCategory); Beim ersten Aufruf klappt es. Beim zweiten habe ich alles doppelt usw. Wie prüfe ich nun ob die Kategorie schon angelegt ist? Besser wäre, wenn einfach keine doppelten Datensätze angelegt werden! Ebenso, wie fülle ich Arittbutfelder der Kategorie? Ebenso, gibt es noch pro Kategorie diverse Einstellungen? Mit der alten API habe ich das so gemacht. Bei jedem Artikel. Wenn die Kategoriestruktur schon vorhanden war, wurden aber keine doppelten Datensätze erzeugt: $category\_data = array("category\_1"=\>$cat1name, "category\_2"=\>$cat2name, "category\_3"=\>$cat3name, "category\_4"=\>$cat4name, "category\_5"=\>$cat5name); $currentcategory = $maincategory; for ($i=1;!empty($category\_data["category\_$i"]);$i++) { $currentcategory = $api-\>sCategory( array( "description"=\>$category\_data["category\_$i"], "parent"=\>$currentcategory ) ); }

Hallo ottscho, von der Überlegung her finde ich das erstmal absolut nachvollziehbar, allerdings ist das im REST-Context nicht ganz so einfach, weil wir eigentlich eine sehr saubere Unterscheidung von POST und PUT haben. Falls du die ID kennst, würde ich erstmal einen PUT fahren und im Fehlerfall halt die Kategorie mit POST erstellen. Ansonsten müsstest du mit GET und einem entsprechenden Filter die Kategorie anhand von Parent und Namen suchen. Zu deiner anderen Frage: Die verschiedenen Felder werden mit „fromArray“ gesetzt, d.h. vom Prinzip her kannst du alles setzen, was in \enginge\Shopware\Models\Category\Category.php einen Setter hat und jetzt nicht gerade irgendeine Relation ist (wie z.B. articles). Die Schreibeweise richtet sich dabei nach den dazugehörigen Eigenschaften, also bspw „metaDescription“. Besten Gruß, Daniel

Hallo Daniel, danke für deine schnelle Antwort. In der Regel kenn ich ja die Kategorie ID nicht. Ich habe eine CSV Liste mit Artikel und wirren Kategoriebezeichnungen. Nun sollten diese Artikel mit den Kategorien angelget werden. Kann ich den nur anhand dem Kategorienamen und dem Parent herausfinden, ob es die Kategorie schon gibt?

hast du mir bitte eine Beispiel => fromArray Bzgl. Kategorien steht in den Labs nicht viel Informationen. Danke

Hallo ottscho, ich weiß gar nicht, was du meinst, steht doch alles im Wiki *husträuspergeradenachgepflegt* :slight_smile: Ein Beispiel zum Filtern findest du im Wiki bei der Artikel-Resource: http://wiki.shopware.de/Rest-API-Tutori … _Beispiele Besten Gruß, Daniel

Danke :slight_smile: Habt ihr schön heute Morgen editiert :thumbup: :shopware: Jetzt komme ich zurecht.

[quote=“Daniel Nögel”] Ein Beispiel zum Filtern findest du im Wiki bei der Artikel-Resource: http://wiki.shopware.de/Rest-API-Tutori … _Beispiele [/quote] Bin ich blind? Wo ist da ein Beispiel zum filtern?

Nein, bist du nicht, habe den falschen Link gesetzt :oops:: http://wiki.shopware.de/Rest-API-Tutori … eispiele_2 Also unter “weitere Beispiele” bei den Bestellungen. Das ist analog auch bei den Kategorien (und allen anderen Resourcen) möglich. Besten Gruß, Daniel

hi,

 

ich benutze restapi client die ihr zuverfügung gestelt haben.

allerding bei erstellen von categories kriege ich folgende fehler meldung.:

No Success

This resource has no support for batch operations.

hier ist eine kleine codse abschnit:

 

private function InsertNewCategoriesByShopware($newCategories){

        foreach($newCategories as $categorie){

            $newCategorie=array();

            $newCategorie[„id“] = $categorie->id;

            $newCategorie[„name“] = $categorie->name;

            $newCategorie[„parentId“] = $this->rootParentIdFromShopware;

            $result=$this->InsertNewCategorieByShopware($newCategorie);

            print_r($result);

        }

    }

private function InsertNewCategorieByShopware($categorie){

        $shopwareRestApiClient = new RestApiClient();

        return $shopwareRestApiClient->put(‚categories/‘,$categorie);

    }

@marioiram‍ Schau dir doch einmal das Shopware SDK an: GitHub - LeadCommerceDE/shopware-sdk: A PHP SDK for the Shopware 5 REST API