Shopware API: Import von Bildern + VariantenMapping Rules

Hallo, wie man Bilder importiert ist klar, nur kann man auch irgendwie direkt die Mapping Rules für die Varianten setzen kann? Gruß, Michael

Muss hier noch einmal *pushen*. Hab in den prepareImageAssociatedData API Funktion keine Funktionalität dazu gefunden und mache das jetzt “handisch” durch Einträge in s_articles_img. Würde aber natürlich gerne einen offiziellen Weg gehen.

Hi Michael, wenn bei Import den Bildern ein mapping mitgegeben wird, wird zumindestens schon mal ein mapping in der Tabelle s_article_img_mappings angelegt. Nur habe ich noch nicht rausgefunden, welche Struktur die rules haben müssen, sodass diese auch angelegt werden. [images] =\> Array ( [0] =\> Array ( [articleID] =\> 100 [link] =\> link [mappings] =\> Array ( [0] =\> Array ( ... hier müsste jetzt die richtige array struktur für eine mapping rule oder aber eine configurator option rein ... ) ) ) ) Vielleicht könnte sich SW dies bezüglich bitte nochmal zu Wort melden.

push. Das würde mich auch brennend interessieren. :wink: Da dies sonst Hardcore in die Datenbank geschrieben werden müsste und auch wieder entfernt, wenn das Bild, Varianten oder Artikel nicht mehr existiert.

Ich hänge auch an dieser Stellen. Nachdem ich die Models und Co studiert habe kam ich leider auch nicht weiter. Eine Möglichkeit kam mir dann in dieser Form $mappings = array( array( 'rules' =\> array( 'option' =\> array( 'id' =\> 34, 'name' =\> 'L' , ) ) ) ); Jedoch wird hier der Fehler gewurfen. Integrity constraint violation: 1048 Column ‘option_id’ cannot be null Mir erschließt sich jedoch keine Lösung um diese option_id zu setzen über die API selbst.

Hatte das ganze per Hand scheinbar hinbekommen, habe jetzt aber doch Probleme beim Varianten-Mapping, weil einfach irgendwas fehlt. Suche daher auch weiterhin die saubere Lösung!

Moin, hatte auch das Problem und derzeit scheint es mit der API wohl auch nicht direkt möglich zu sein. Hab mir folgenden Code aus dem CSV-Importscript kopiert. Wenn der nach dem Befüllen der Mapping-Tabellen in die DB ausgeführt wird läuft die Zuordnung in Frontend und Backend. $manager = Shopware()-\>Models(); $repos = $manager-\>getRepository('Shopware\Models\Article\Article'); $builder = Shopware()-\>Models()-\>createQueryBuilder(); $images = $builder-\>select(array('images', 'mappings', 'rules', 'option')) -\>from('Shopware\Models\Article\Image', 'images') -\>innerJoin('images.mappings', 'mappings') -\>leftJoin('mappings.rules', 'rules') -\>leftJoin('rules.option', 'option') -\>where('images.articleId = ?1') -\>andWhere('images.parentId IS NULL') -\>setParameter(1, $articleId) -\>getQuery(); $images = $images-\>execute(); /\*\* @var \Shopware\Models\Article\Image $image \*/ foreach ($images as $image) { $query = $repos-\>getArticleImageDataQuery($image-\>getId()); $imageData = $query-\>getOneOrNullResult(\Doctrine\ORM\AbstractQuery::HYDRATE\_ARRAY); $repos-\>getDeleteImageChildrenQuery($image-\>getId())-\>execute(); foreach ($image-\>getMappings() as $mapping) { $options = array(); foreach ($mapping-\>getRules() as $rule) { $options[] = $rule-\>getOption(); } $imageData['path'] = null; $imageData['parent'] = $image; $details = $repos-\>getDetailsForOptionIdsQuery($articleId, $options)-\>getResult(); foreach ($details as $detail) { $newImage = new \Shopware\Models\Article\Image(); $newImage-\>fromArray($imageData); $newImage-\>setArticleDetail($detail); Shopware()-\>Models()-\>persist($newImage); Shopware()-\>Models()-\>flush(); } } }