isotope / core

Core repository of Isotope eCommerce, an eCommerce extension for Contao Open Source CMS
https://isotopeecommerce.org
135 stars 107 forks source link

Varianten werden nicht gelöscht #2187

Closed Xirdion closed 1 year ago

Xirdion commented 3 years ago

Contao-Version: 4.9.10 Isotope-Version: 2.6.15

Folgendes Szenario:

Man hat einen Artikel mit Varianten. Diesen Artikel dupliziert man nun. Es wird die Seite des neuen Artikels geladen. Klickt man nun auf den Zurück-Button von Contao, dann wird der Vaterartikel wieder gelöscht. Aber die dazugehörigen Varianten bleiben weiterhin in der Datenbank bestehen. Sie sind nur nicht auffindbar, weil der Artikel mit der dazugehörigen pid nicht mehr existiert.


Ich habe überprüft, ob es sich hierbei um einen generellen Fehler in Contao handelt. Bei den Formularen habe ich den gleichen Ablauf gefunden. Ein Klick auf Duplizieren ladet ebenfalls sofort die Seite des neuen Eintrags. Allerdings werden beim direkten Klick auf Zurück alle dazugehörigen Form-Fields auch wieder gelöscht. So bleiben keine Leichen in der Datenbank zurück.

aschempp commented 3 years ago

Kannst du das Problem in der Shop-Konfiguration > Integritätsprüfung beheben?

Xirdion commented 3 years ago

Leider nicht. Ungültige Produkt-Varianten werden hier nicht erkannt.

image


In der Datenbank existiert aber der Haupt-Artikel nicht.

image

aschempp commented 3 years ago

Verstehe ich richtig dass es dir um die Leichen in der Datenbank geht, oder haben diese auch einen negativen Einfluss auf den Betrieb?

Xirdion commented 3 years ago

Ja, genau um die Leichen in der Datenbank geht es. Wir haben eine Eigenentwicklung am System, die anhand der sku versucht ein Produkt zu laden. Dadurch, dass aber die Leichen vorhanden sind, werden die falschen Produkte gefunden. Darüber sind wir dann darauf aufmerksam geworden, dass bei dem oben beschriebenen Vorgang die Datensätze in der DB übrig bleiben.

aschempp commented 1 year ago

fixed in 12513a999df2633fa134270dda408601570e44d9

C-H-R-I-S-U commented 1 year ago

Zu der Änderung noch ein kleiner Hinweis: das funktioniert erst ab Contao 4.9.17, denn davor war die Funktion reviseTable in DC_Table noch etwas anders. Das hatte bei mir dazu geführt, dass alle Produkte aus der Datenbank gelöscht wurden.

aschempp commented 1 year ago

das sollte definitiv nicht sein! Weisst du konkret woran es liegt?

C-H-R-I-S-U commented 1 year ago

Also in der DC_ProductData.php neu eingefügten Funktion reviseTable wird zuerst ptable gesetzt und dann parent::reviseTable aufgerufen. Dadurch sollte meinem Verständnis nach reviseTable von DC_Table aufgerufen werden. Und dort wurde mit Version 4.9.17 was bei der Abfrage von ptable verändert. Es wurde dann folgendes hinzugefügt:

elseif ($ptable == $this->strTable) { $objIds = $this->Database->execute('SELECT c.id FROM ' . $this->strTable . ' c LEFT JOIN ' . $ptable . ' p ON c.pid=p.id WHERE p.id IS NULL AND c.pid > 0'); }

davor gab es nur den else-Zweig:

else { $objIds = $this->Database->execute("SELECT c.id FROM " . $this->strTable . " c LEFT JOIN " . $ptable . " p ON c.pid=p.id WHERE p.id IS NULL"); }

Die Variante vor 4.9.17 sorgt aber dafür, dass bei pid=0 aber auch die ID von dem Produkt ohne Variante zurückgegeben wird. Und dann wurden bei mir immer alle Produkte gelöscht. Aufgefallen ist es mir, da auch Einträge die ich direkt in der DB gemacht hatte, wieder gelöscht wurden.