Hallo,
bisher konnte ich alle Bereiche des Artikels als Klasse in C# abbilden bis auf die „Categorie“.
Folgenden Aufruf habe ich für die API verwendet:
"http://xxx/shopware/2mit/api/Articles/1
Das Ergebnis für die „Categorie“ sieht wie folgt aus:
„categories“:{„5“:{„id“:5,„name“:„Rollartikel“}},"
Was soll hier die {„5“ ?
Wie kann ich die „categorie“ in einer Klasse abbilden?
Hier ein Beispiel wie ich die Klasse für „tax“ aufgebaut habe:
„tax“:{„id“:1,„tax“:„19.00“,„name“:„19%“},"
public class ArticlesData
{
..
...
public string availableFrom { get; set; }
public string availableTo { get; set; }
public List attribut { get; set; }
public List mainDetail { get; set; }
public List tax { get; set; }
...
..
}
public class ArticelTax
{
public string id { get; set; }
public string tax { get; set; }
public string name { get; set; }
}
Hi,
die 5 als Key ist letztlich auch die Kategorie-ID. Das soll ein schnelleres / effizienteres Mapping / Lookup ermöglichen. Letztlich ist das aber etwas php-zentrisch gedacht, das stimmt schon. Da ich C# nicht kenne, kann ich da im Detail nichts zu sagen, habe aber im Hinterkopf, dass das hier schonmal diskutiert wurde. Wenn dir kein anderer da einen Tipp geben kann, würde ich dich bitten, da ein Ticket für anzulegen - damit die Core-Jungs das auf dem Schirm haben.
Danke!
Daniel
Hallo,
danke für deine Antwort
Für die schnelle Lösung habe ich folgende Änderung in der Article.php vorgenommen:
protected function getArticleCategories($articleId)
{
$builder = $this->getManager()->createQueryBuilder();
$builder->select(['categories.id', 'categories.name'])
//++DJ 11.02.16 kann so in C# nicht verarbeitet werden
//++OLD
//->from('Shopware\Models\Category\Category', 'categories', 'categories.id')
//-- OLD
//++ NEW
->from('Shopware\Models\Category\Category', 'categories')
//--NEW
//++DJ 11.02.16
->innerJoin('categories.articles', 'articles')
->where('articles.id = :articleId')
->setParameter('articleId', $articleId);
return $this->getFullResult($builder);
}
Gruß
Denis
Für die schnelle Lösung habe ich folgende Änderung in der Article.php vorgenommen
Niemals im Core Dateien ändern, im nächsten Update wird alles zurückgesetzt und die Funktionalität mit anderen Plugins kann nicht mehr garantiert werden.
Besser eigene Logik schreiben und oder über Events (oder im Grenzfall Hooks) die Daten erweitern/manipulieren.
Schöne Grüße,
Niklas
Hallo Niklas,
vielen Dank für deinen Hinweis.
Das ist mir schon bewusst, daher habe ich auch schnelle Lösung geschrieben
falls es keine keine Lösung seitens Shopware “Core Jungs” geben sollte, werde
ich eine eigne API hierfür erstellen.
Gruß Denis