protected PHP Funktionen in OXID eShop debuggen

Im OXID Framework gibt es viele protected Funktionen, die man entweder wegen der Sourcecode Verschlüsselung in PE/EE oder deren Verwendung an schwer zugänglichen Stellen in kaum erweiterbaren Funktionen/Klassen nur mit viel Aufwand testen / debuggen.

Hier ist ein Beispiel:

Die Funktion „oxArticle->getCustomerAlsoBoughtThisProducts()“ lädt inaktive Artikel in Cross Selling Listen, also musste ich diese Funktion und alle ihre Bestandteile debuggen.

Diese Funktion erstellt erhält eine SQL Query von protected Funktion „_generateSearchStrForCustomerBought()“ und lädt dann die Liste der Artikel.
Daher kann man nicht einfach so die generierte Query einsehen.

Der übliche Weg zum debuggen:

In einer CE könnte man var_dump() am Ende von „_generateSearchStrForCustomerBought()“ einbauen und schauen, was dabei rauskommt. PE Benutzer, sofern er kein OXID Partner ist und über keinen Sourcecode verfügt, muss hierfür ein Modul schreiben und z.B. oxArticle mit einer eigenen public Funktion erweitern, die nur „_generateSearchStrForCustomerBought()“ aufruft und die Query zurück gibt.
Durchschnittlicher Zeitaufwand: 2 Minuten für CE und 15-20 Minuten für PE. Ggf. zusätzliche 15 Minuten für unerfahrene Entwickler oder 25 Minuten für müde Entwickler.
Ein unerfahrener müder Entwickler wird vermutlich Beruhigungsmittel und eine neue Tastatur brauchen.

Debugging mit dev-console:

Die Idee ist die gleiche: oxArticle erweitern, aber wir brauchen kein extra Modul dafür:

Einfacher gehts kaum!

In der Ausgabe erhalten wir folgende Query:

Kurze Erklärung dieser Query

  • Subquery in Zeilen 2-5 holt alle Bestellungen mit dem Produkt oder seinen Varianten
  • Zeile 7 fügt Artikel-IDs der Produkte in dieser Bestellungen hinzu
  • Zeile 8 fügt Produktdatenden vorhandenen Artikel-IDs hinzu
  • Zeile 9 entfernt dieses Produkt und seine Varianten
  • Zeilen 10-13 filtern nach aktiven, suchbaren Produkte und aktiven, suchbaren Varianten mit Lagerbestand
  • Zeile 14 prüft ob die Vaterartikel in der Liste auch aktive Varianten haben

Am Ende erhalten wir aktive + suchbare Vaterartikel mit aktiven Varianten und aktive + suchbare Varianten.
Aber… Stop! Wenn ein Vaterartikel deaktiviert wurde (z.B: MHD Abgelaufen oder keine Nachlieferung möglich, etc), bleiben seine Varianten im 99,99% der Fälle weiterhin aktiv. Würdest du 150 Varianten zum deaktivieren einzeln anklicken?
variants-meme

An dieser Stelle haben wir das Problem: diese Query prüft nicht, ob die Väterartikel der Varianten immer noch aktiv sind. Daher tauchen in den Cross Selling Listen auch Produkte auf, die es eigentlich gar nicht mehr gibt. Der nichtsahnende Kunde klickt drauf und wird kommentarlos auf die Startseite geworfen, weil der Vaterartikel inaktiv ist.

Falls du das selbe Problem hast, hier ist meine Lösung https://github.com/vanilla-thunder/fix-acq


Download

dev-console“ ist ein Bestandteil von „vt-devutils„. Weitere Infos und Anleitung zur Installation gibts hier: https://marat.ws/tools-fuer-oxid-entwickler/


By | 2016-10-16T18:07:24+00:00 Juli 8th, 2016|Categories: Tutorials|0 Comments