wie schalte ich die Sprache zwischen Produkt-Upserts in Shopware 6 richtig um?
// upsert product in language 1
$this->productRepository->upsert([
$sw_product
], $this->context);
// please give me a solution here ...
// upsert product in language 2
$this->productRepository->upsert([
$sw_product
], $this->context);
// ...
nicht sicher, ob das ein guter Weg ist, was ich in einem anderen Plugin gefunden habe …
$this->context = new Context(new SystemSource(), [], Defaults::CURRENCY, [$langIdFromLanguageRepository]);
Weiter scheint dies nicht in Custom-Fields zu funktionieren …
Was ist der empfohlene Weg in einem eigenen Plugin? Ich kann keine offizielle Dokumentation auf den Shopware-Websites finden …
Wir benötigen eine offizielle stabile Lösung, die langfristig funktioniert.
Du kannst auch Übersetzungen auch direkt für jede Sprache aktualisieren:
$repo->upsert([
'id' => $product->getId(),
'translations' => [
[
'languageId' => Defaults::LANGUAGE_SYSTEM,
'customFields' => ['foo' => 'bar']
]
]
], $context);
Viele Grüße
Hallo @EikeBrandtWarneke,
danke für die Antwort.
Wäre dies offiziell „best practice“?
Ich würde ungern Sachen doppelt übergeben.
Aktuell übergeben wir „customFields“ direkt an den $sw_product array für den upsert.
Beispiel:
$sw_product = [
'productNumber' => '123456',
'name' => 'Produkt 123'
];
....
$sw_product['customFields'] = [
'custom_field1' => "Hello",
'custom_field2' => "World"
];
Ween ich dein Beispiel richtig verstehe, müsste ich das ganze mit Sprache nochmal im array element ‚translations‘ machen - richtig?
schon mal ein schönes Wochenende und Viele Grüße
Du kannst natürlich auch alles andere direkt mit aktualisieren:
$repo->upsert([
'id' => $product->getId(),
'productNumber' => '12345',
'stock' => 10,
'translations' => [
[
'languageId' => Defaults::LANGUAGE_SYSTEM,
'name' => 'Name DE',
'customFields' => ['foo' => 'bar']
],
[
'languageId' => $englishId,
'name' => 'Name EN',
'customFields' => ['bla' => 'blub']
]
]
], $context);
Viele Grüße
Hallo @EikeBrandtWarneke,
OK, verstehe denke ich.
Das heißt es muss aber nicht wie her
$repo->upsert([
'id' => $product->getId(),
'productNumber' => '12345',
'stock' => 10,
'name' => 'Name Sprachunabhängig'
'translations' => [
[
'languageId' => Defaults::LANGUAGE_SYSTEM,
'name' => 'Name DE',
'customFields' => ['foo' => 'bar']
],
[
'languageId' => $englishId,
'name' => 'Name EN',
'customFields' => ['bla' => 'blub']
]
]
], $context);
das Feld name nochmal sprachunabhängig vorkommen …
Hallo @EikeBrandtWarneke,
bei mir wird unter der Tabelle „shopware.product_translation“ keine englische Übersetzung angelegt.
Fehler kommt aber auch keiner …
Ich habe eben noch etwas rumgespielt.
Über einen Array wie folgt
'translations' => [
'en-GB' => ['name' =>'english text'],
'fr-FR' => ['name' =>'french text']
]
scheint es zu gehen, was mich wieder zu meiner ursprünglichen Frage bringt mit dem von Shopware offiziellen richtigen Weg und einer Doku hierzu …