Hallo, seit neustem erhalten Kunden die ein Plugin Update installieren wollen eine Fehlermeldung Unable to update, got exception: An exception occurred while executing 'INSERT INTO s\_core\_config\_element\_translations (description, label, element\_id, locale\_id) VALUES (?, ?, ?, ?)' with params [null, "Text Settings", 1132, 2]: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '1132-2' for key 'element\_id'
Ich verstehe die Fehlermeldung so, dass eine Übersetzung der Datenbank hinzugefügt werden soll, aber die schon vorhanden ist. Muss man in der Update Funktion in der Bootstrap.php erst alle alten Übersetzungen löschen? Das ist meine translation Funktion die in der install Funktion aufgerufen wird. public function createMyTranslations() { $form = $this-\>Form(); $translations = array( 'en\_GB' =\> array( 'textSettings' =\> 'Text Settings', 'imgMarginR' =\> 'Right Margin' ) ); $shopRepository = Shopware()-\>Models()-\>getRepository('\Shopware\Models\Shop\Locale'); //iterate the languages foreach($translations as $locale =\> $snippets) { $localeModel = $shopRepository-\>findOneBy(array( 'locale' =\> $locale )); foreach($snippets as $element =\> $snippet) { //not found? continue with next language if($localeModel === null){ continue; } $elementModel = $form-\>getElement($element); if($elementModel === null) { continue; } //create new translation model $translationModel = new \Shopware\Models\Config\ElementTranslation(); $translationModel-\>setLabel($snippet); $translationModel-\>setLocale($localeModel); // add the translation to the form element $elementModel-\>addTranslation($translationModel); } } }
*push*
Ich würde im Update nicht übersetzen, und wenn dann nur die Einträge, die im Update dazu gekommen sind. In meinen Plugins gibt es in der install die Routinen zum Form erstellen und übersetzen. Im Update werden dann zusätzlich nur die übersetzt, die auch erst dann dazu kommen sind. Ansonsten ist auch noch die Hilfsfunktion zum übersetzen zu erwähnen. Gültig ab 4.2.2 if ($this-\>assertMinimumVersion('4.2.2')) { $this-\>addFormTranslations($translations); }
Schöne Grüße, Niklas
Hallo Niklas, vielen Dank für deine Antwort. Ich übersetze nichts in der Update Function. Die Übersetzung ist ja in der install() Du hast mich aber auf eine Idee gebracht. Ich habe keine Update Function in der Bootstrap. Etwas recherchiert und hier fündig geworden. Shopware 4 essentials of plugin development [quote]If this function isn’t implemented, the install function is run instead when the upgrade process is started. [/quote] Ich probiere mal eine leere Update Function die true zurück gibt. Dann müsste eigentlich das Problem gelöst sein.
[quote=„benda“]Ich probiere mal eine leere Update Function die true zurück gibt. Dann müsste eigentlich das Problem gelöst sein.[/quote] Genau, für den Start genau das richtige. Der switch case für die Abfrage der alten Versionsnummern kann ja später folgen und ist ja erst einmal keine Pflicht. Schöne Grüße, Niklas