core
core copied to clipboard
Kopieren von Varianten, fehlende Vererbung von nicht Varianten-Attributen
mm_products (hierarchisch, mehrsprachig) mm_product_group (flat, mehrsprachig)
Attribute
- Name (variante)
- Produkt Gruppe (keine Variante)
- Beschreibung (Variante)
Beim kopieren von (Kind) Elementen werden alle Werte die Variant-override sind übernommen, jedoch z.b. wie in unserem Fall nicht die Produkt-Gruppe (die nur beim Elternelement gesetzt wird) übernommen.
Ähnlich: https://github.com/MetaModels/core/issues/657
@stefanheimes da warst du doch letztens dran?
Jop, bin gerade dran da eine Lösung zu finden. Wollte damit diese Woche Anfangen.
@stefanheimes für das kopieren hat @dmolineus gestern einen fix (siehe pr) bereitgestellt. Dazu aber noch von David:
ich habe die Ursache für das fehlerhafte Kopieren der Varianten gestern
noch entdeckt und dafür einen Pull Request gestellt.
https://github.com/MetaModels/core/pull/891
Dies behebt allerdings nicht das Problem mit der Mehrsprachigkeit. Die wird vom DCG noch gänzlich missachtet.
Da müssen an zwei Stellen im DCG einige Umbauarbeiten gemacht werden für eine Lösung. Ich finde die momentane Implementierung der Mehrsprachigkeit des DCG nicht optimal.
Das Problem mit der Mehrsprachigkeit betrifft uns nicht so ganz akut, ein fix in den nächsten Wochen wäre aber durchaus nicht verkehrt.
Zusatz: Das Kopieren von eine Variante in eine andere Vargroup sorgt auch dafür das die Werte, welche von der Base Varianten kommen, nicht gleich überschrieben werden. Hier für muss erst einmal die Base Variante aufgerufen werden und gespeichert werden.
Nein, ich kopiere Elemente in der selben Vargroup, wobei diese dann die Werte verlieren die keine varianten Attribute sind.
Was passiert ist folgendes:
- Variante einer Gruppe wird innerhalb der Gruppe kopiert
- DCG cloned das Model -> Item erzeugt Kopie ohne ID
- DCG speichert das Model -> MetaModel->saveItem wird aufgerufen
- Da die Daten noch NICHT in der DB liegen müssen die bisher vorhanden Werte der NonVariant Attribute initial geschrieben werden.
Genau dafür sorgt der Fix. Eine Variante holt sich soweit ich das sehe ja nicht dynamisch die Daten jedes Mal von der Base.
Wird die Base gespeichert, schreibt diese alle Daten in die Variaten. deswegen übernimmt eine Variante auch die Base Werte nicht, wenn die Varianten in eine andere VarGroup gezogen wird. Entweder nehmen wir beim Kopieren dann die Möglichkeit dafür weg, das also eine Variante in eine andere VarGroup kopiert werden kann oder passen das saveVariant an.
Ok, dann müsste man aber nach dem Kopieren einer Variante das Speichern der Base triggern, sodass auch in der neuen Variante die Werte da sind.
@discordier was sagst du dazu? Dadurch, dass das Kopieren erst später hinzugefügt wurde, ist das save nicht mehr dafür wirklich ausgelegt. Was sollen wir am besten machen? Eigentlich müssen wir das Verhalten für die varianten beim Kopieren noch anpassen das gleiche gilt auch für das Verschieben.
Check in MM 2.2
- Attribut A [text] (ohne V)
- Attribut B [text] (mit V)
- Attribut C [komb. V aus A + B] (mit V)
beim Kopieren kommt
ContaoCommunityAlliance\DcGeneral\Exception\DcGeneralRuntimeException:
Unparsable encoded id value: ''
at vendor/contao-community-alliance/dc-general/src/Data/ModelId.php:117
at ContaoCommunityAlliance\DcGeneral\Data\ModelId::fromSerialized()
(vendor/contao-community-alliance/dc-general/src/Controller/ModelCollector.php:147)
at ContaoCommunityAlliance\DcGeneral\Controller\ModelCollector->getModel()
(vendor/contao-community-alliance/dc-general/src/EventListener/ModelRelationship/TreeEnforcingListener.php:78)
at ContaoCommunityAlliance\DcGeneral\EventListener\ModelRelationship\TreeEnforcingListener->process()
(vendor/symfony/event-dispatcher/Debug/WrappedListener.php:126)
at Symfony\Component\EventDispatcher\Debug\WrappedListener->__invoke()
(vendor/symfony/event-dispatcher/EventDispatcher.php:264)
at Symfony\Component\EventDispatcher\EventDispatcher->doDispatch()
(vendor/symfony/event-dispatcher/EventDispatcher.php:239)
at Symfony\Component\EventDispatcher\EventDispatcher->callListeners()
(vendor/symfony/event-dispatcher/EventDispatcher.php:73)
at Symfony\Component\EventDispatcher\EventDispatcher->dispatch()
(vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcher.php:168)
at Symfony\Component\EventDispatcher\Debug\TraceableEventDispatcher->dispatch()
(vendor/contao-community-alliance/dc-general/src/Contao/View/Contao2BackendView/EditMask.php:785)
at ContaoCommunityAlliance\DcGeneral\Contao\View\Contao2BackendView\EditMask->execute()
(vendor/contao-community-alliance/dc-general/src/Contao/View/Contao2BackendView/ActionHandler/EditHandler.php:120)
at ContaoCommunityAlliance\DcGeneral\Contao\View\Contao2BackendView\ActionHandler\EditHandler->process()
(vendor/contao-community-alliance/dc-general/src/Contao/View/Contao2BackendView/ActionHandler/EditHandler.php:82)
at ContaoCommunityAlliance\DcGeneral\Contao\View\Contao2BackendView\ActionHandler\EditHandler->handleEvent()
(vendor/symfony/event-dispatcher/Debug/WrappedListener.php:126)
at Symfony\Component\EventDispatcher\Debug\WrappedListener->__invoke()
(vendor/symfony/event-dispatcher/EventDispatcher.php:264)
at Symfony\Component\EventDispatcher\EventDispatcher->doDispatch()
(vendor/symfony/event-dispatcher/EventDispatcher.php:239)
at Symfony\Component\EventDispatcher\EventDispatcher->callListeners()
(vendor/symfony/event-dispatcher/EventDispatcher.php:73)
at Symfony\Component\EventDispatcher\EventDispatcher->dispatch()
(vendor/symfony/event-dispatcher/Debug/TraceableEventDispatcher.php:168)
at Symfony\Component\EventDispatcher\Debug\TraceableEventDispatcher->dispatch()
(vendor/contao-community-alliance/dc-general/src/Controller/DefaultController.php:158)
at ContaoCommunityAlliance\DcGeneral\Controller\DefaultController->handle()
(vendor/metamodels/core/src/BackendIntegration/Module.php:74)
at MetaModels\BackendIntegration\Module->generate()
(vendor/contao/core-bundle/src/Resources/contao/classes/Backend.php:434)
at Contao\Backend->getBackendModule()
(vendor/contao/core-bundle/src/Resources/contao/controllers/BackendMain.php:167)
at Contao\BackendMain->run()
(vendor/contao/core-bundle/src/Controller/BackendController.php:48)
at Contao\CoreBundle\Controller\BackendController->mainAction()
(vendor/symfony/http-kernel/HttpKernel.php:158)
at Symfony\Component\HttpKernel\HttpKernel->handleRaw()
(vendor/symfony/http-kernel/HttpKernel.php:80)
at Symfony\Component\HttpKernel\HttpKernel->handle()
(vendor/symfony/http-kernel/Kernel.php:201)
at Symfony\Component\HttpKernel\Kernel->handle()
(web/index.php:31)