Wie erzeugt man eine Category?

Hi,

die Frage klingt simple, aber trotzdem hab ich bisher keine vernünftige Antwort gefunden.

Es geht darum eine Category-Entity in die DB zu bekommen.

Hier mal der Code:

 $category = new \Shopware\Models\Category\Category(); $category-\>setPrimaryIdentifier(123); $category-\>setName("name"); $category-\>setActive(true); $category-\>setBlog(true); $category-\>internalSetPath("path"); $category-\>setHideFilter(true); $category-\>setShowFilterGroups(true); $category-\>setHideTop(true); $category-\>setNoViewSelect(true); $category-\>setPosition(0); 

 Shopware()-\>Models()-\>persist($category);

 

Das ganze in der install-Methode der Bootstrap. Also bei der PlugIn Installation.

Hab dann mal per native SQL eine erstellt. Geht, sofern man das Left und Right Attribut setzt. Aber wie geht das per PHP?

 

Danke schon mal für die Antworten.

BTW: Die Plug-In Installation geht nicht, es kommt aber keine Fehlermeldung. :confused:

Hallo,

vermutlich geht’s leichter und sicherer über die lokale REST-Api:

$resCat = \Shopware\Components\Api\Manager::getResource(‘Category’);

$aCat = array(
   “parentId”     => $parentId, 
   “name”        => $catName,
   “active”    => $active
);
$newCat = $resCat->create($aCat);

In $aCat können natürlich noch weitere Attribute definiert werden. 
Weitere Infos zum lokalen Api-Zugriff: http://community.shopware.com/Shopware-4-Lokaler-Zugriff-auf-die-API_detail_992.html

Viel Erfolg,
Nils

 

Hilft flushen?

Hi,

grundsätzlich ist es mit der Categorie-Ressource vermutlich einfacher, da hat @netzperfekt‍ schon Recht. Gerade gestern haben wir uns da aber noch ein Problem im Zusammenhang mit AutoFlush und der Plugin-Installation angesehen - wenn da also merkwürdige Fehlermeldungen aus dem ORM-Stack bei der install()-Methode kommen, würde es daran liegen.

In dem Initial-Beispiel oben fehlt mir (neben dem flush von @steinsoftware‍) auch noch die Parent-Kategorie-Zuordnung - irgendwo muss die Kategorie ja „eingehängt“ sein. Der „setPrimaryIdentifier“ ist zwar bei Kategorien möglich - aber eigentlich kannst du das weg lassen, die Datenbank sucht sich dann selbst eine passende ID :)).

Besten Gruß,

Daniel