API - Kategorien

Hallo zusammen, ich brauche eure Unterstützung beim logischen Import/Update von Kategorien. Es geht um ca. 15t Artikel, welche 3 mal am Tag eingelesen werden. Die CSV hat immer 3 Spalten welche die Kategorie Struktur abbilden. Kat-A,Kat-B,Kat-C Also immer 3 Ebenen. Mit der alten API konnte man einfach die Kategrie erstellen, wenn es diese noch nicht gab wurde die Kategorie angelegt oder bene upgedatet. Das war so sehr praktisch. Nun muss ich das irgendwie kombinieren / abfragen, was etwas kompliziert ist. Ich muss per SQL prüfen ob es Kat-A gibt, welche als ParentID 3 hat. Wenn dies nicht der Fall ist anlegen. Somit kann es Ebene 2 und 3 (Kat-B und Kat-C) ebenfalls noch nicht geben und müssen angelegt werden. Gibt es Kat-A so geht das Spiel weiter mit Kat-B und der ID Kat-A als ParentID etc. Hat sowas ähnliches schon mal jemand umgesetzt? Wie würden ihr das am schlausten machen? Danke für euer Feedback.

Hi, in unserer Standard API machen wir sowas in der Art hier: \Shopware\Components\Api\Resource\Category::findCategoryByPath Vielleicht hilft dir das ja schon weiter? Grundsätzlich kannst du ab Shopware 4.1 auch mit dem “path” field in der s_categories arbeiten - dort findet sich der Kategorie-Pfad einer jeden Kategorie denormalisiert in dem Format “|11|5|3|” - in diesem Fall wäre die Kategorie in der Kategorie 11, die wiederum in 5, die wiederum in 3 ist. Schöne Grüße Daniel

Hi Daniel, ich müsste aber zu dem Pfad noch den Namen parallel abfragen, sonst macht es kein Sinn, oder was meinst du? Anhand dem Pfad bekomme ich ja alle Kategorien zurück geliefert, die diesen haben. Danke Gesendet von meinem iPhone mit Tapatalk

Hi, wenn ich dich richtig verstehe, brauchst du ja genau sowas: Deutsch->Tee und Kaffe->Tee und möchtest das entweder erzeugen oder laden, wenn es das schon gibt, oder? In dem Fall kannst du dich doch eigentlich an dem von mir verlinkten Beispiel aus der Category-Resource orientieren, oder? Da wird ja genau das gleiche gemacht. Der Ansatz mit dem „path“ geht natürlich erstmal von IDs aus - das stimmt. Aber die Logik der Category-Ressource müsste für dich doch passen. lG Daniel

Hi Daniel, ich kann wenn ich GitHub durchsuche nichts zu findCategoryByPath finden. Bzw. finde ich auch in https://github.com/ottscho/shopware-4/b … tegory.php nicht die Funktion. Wo versteckt sich die Funktion? Danke dir.

Hi, die Funktion ist seit Dezember 2013 drin, dein Branch ist veraltet. Siehe hier: https://github.com/shopwareAG/shopware- … y.php#L241 lG Daniel

Oh shit. Danke :thumbup:

Hi Daniel, ich habe noch ein Problem mit den Kategorien. Bei meinem Demoshop SW 4.3 funktioniert das \Shopware\Components\Api\Resource\Category::findCategoryByPath bestens. Hier gebe ich den String Deutsch|Genusswelt|Edelbrände zum Test mit und ich erhalte die Kategorie. Mache ich das bei einem anderen Shop (auch SW 4.3) so schmiert mir alles bei hier ab: $categoryModel = $this->getRepository()->findOneBy(array(‘name’ => $categoryName, ‘parentId’ => $parentId)); Und zwar bei Deutsch - 1. Hier muss irgendwas mit den Models nicht passen. Hast du eine Idee wie ich das lösen kann? Wenn ich im String Deutsch| weglasse, so schmiert mir nichst ab und ich bekomme NULL zurück. Ich komme leider nicht weiter.

okay, ich habe nun alle Kategorien gelöst und neu aufgebaut. Jetzt klappt die Abfrage ob es den Path gibt. Aber das anlegen, falls nicht vorhanden klappt nicht. [quote] $test = “Deutsch|Freizeitwelten|Vintage2”; try { $categoryResource = \Shopware\Components\Api\Manager::getResource(‘Category’); $temp = $categoryResource->findCategoryByPath($test, true); //var_dump($temp); } catch (Exception $e) { echo $e->getMessage(); } [/quote] Leerseite ohne Rückgabewert oder Fehler.

okay, es fehlt mal wieder das flush(). jetzt geht es.