Closed Xirdion closed 1 year ago
Kannst du das Problem in der Shop-Konfiguration > Integritätsprüfung beheben?
Leider nicht. Ungültige Produkt-Varianten werden hier nicht erkannt.
In der Datenbank existiert aber der Haupt-Artikel nicht.
Verstehe ich richtig dass es dir um die Leichen in der Datenbank geht, oder haben diese auch einen negativen Einfluss auf den Betrieb?
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.
fixed in 12513a999df2633fa134270dda408601570e44d9
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.
das sollte definitiv nicht sein! Weisst du konkret woran es liegt?
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.
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.