Blog

Kostenloser PrestaShop 9-Kompatibilitätsprüfer für Module

Das PrestaShopAddons-Team 6 Minuten Lesezeit

Bevor Sie einen Shop auf PrestaShop 9 aktualisieren, sollten Sie wissen, welche Module nicht mehr funktionieren werden. Es funktioniert zwar, jedes Modul einzeln auf einer Testversion zu installieren und sich durchzuklicken, aber das ist zeitaufwendig und zeigt nur die Probleme, die Sie zufällig auslösen.

Deshalb haben wir ein kleines Skript geschrieben, das den ersten Durchgang für dich übernimmt. ps9check Es scannt ein Modul und listet den Code auf, der durch PrestaShop 8 oder 9 entfernt wurde: Kernklassen und -methoden, hooks, verschobene Presenter-Klassen, in PHP 8 entfernte PHP-Funktionen sowie einige Fallstricke bei der Validierung von Themes und Add-ons. Es ist kostenlos und Open Source: github.com/asymetria/ps9-compat-check.

Schnellstart

Auf Ihrem Computer oder Server muss PHP 7.4 oder neuer installiert sein. PrestaShop und Composer werden nicht benötigt.

  1. Das Skript herunterladen: ps9-compat-check (ZIP), und entpacken Sie es.
  2. Führen Sie das Programm auf einem Modulordner oder einer Modul-ZIP-Datei aus:
php ps9check.php /path/to/modules/yourmodule
php ps9check.php yourmodule.zip

In einem Shop befinden sich die Module im modules/ Ordner. So wählen Sie unter Linux oder macOS alle auf einmal aus:

for m in /var/www/shop/modules/*/; do php ps9check.php "$m"; done

So sieht ein Bericht aus

Dies ist das Ergebnis für Version 2.0.4 von ps_checkpayment, eines der hauseigenen Zahlungsmodule von PrestaShop, geschrieben in PrestaShop 1.7 days:

PrestaShop 9 compatibility check — ps_checkpayment 2.0.4
21 files scanned

ERROR    ps_checkpayment.php:176
         Tools::displayPrice() was removed in PrestaShop 9.0.
         → Use $this->context->getCurrentLocale()->formatPrice($price, $this->context->currency->iso_code).

ERROR    ps_checkpayment.php:270
         Tools::displayPrice() was removed in PrestaShop 9.0.

NOTICE   views/templates/front/payment_infos.tpl:34
         Unfiltered output ({... nofilter}). The PrestaShop Addons review reports it as a security issue.

2 error(s), 0 warning(s), 1 notice(s)

PrestaShop hat dieses Modul schon vor langer Zeit korrigiert, und die aktuelle Version läuft fehlerfrei. Der gleiche Code wird jedoch nach wie vor in zahlreichen Shops verwendet, zusammen mit Modulen von Drittanbietern, deren Autoren diese nie aktualisiert haben.

Jeder Fund verweist auf eine Datei und eine Zeile. Bei den häufigsten Problemen schlägt der Bericht auch eine Korrektur vor, sodass Sie sofort erkennen können, ob die Korrektur mit einer einzigen Zeile erledigt ist oder einen größeren Aufwand erfordert.

Was dabei geprüft wird

  • Entfernte Kernklassen, unabhängig davon, ob es zusammen mit new, extends, use oder statische Aufrufe. Wenn eine Klasse lediglich verschoben wurde – beispielsweise die Presenter für den Warenkorb und die Produkte –, wird im Bericht der neue Namespace angezeigt.
  • Entfernte Kernmethoden, wie zum Beispiel Tools::displayPrice(), Tools::encrypt() oder Configuration::getInt(), einschließlich der Methoden, die ein Modul erbt: $this->addMedia() in einem Front-Controller oder $this->ajaxDie().
  • Konstanten und hooks entfernt, beides in registerHook() und in hookXxx() Methoden, die nie wieder aufgerufen werden.
  • Der angegebene Kompatibilitätsbereich. Falls ps_versions_compliancy Liegt der Wert unter 9.0, wird das Modul bei PrestaShop 9 überhaupt nicht installiert.
  • Entfernungen in PHP 8. PrestaShop 9 erfordert PHP 8.1 oder neuer, daher funktionieren Funktionen wie create_function() oder each() werden ebenfalls gemeldet.
  • Überschreibungen von Kernmethoden, die nicht mehr existieren, die plötzlich nicht mehr funktionieren.
  • Fallstricke bei Hummingbird und Add-ons: Module, die ihr eigenes HTML an das Warenkorb-Modal des Themes übergeben, themenabhängige Template-Includes und nofilter Ausgabe.

Woher stammt die Liste des entfernten Codes?

Wir haben die Liste nicht von Hand erstellt. Ein zweites Skript im Repository liest die PrestaShop-Quellcode Für die Versionen 1.7.8, 8.2 und 9.0 vergleicht es deren Klassen, Methoden, Konstanten und hooks und erfasst, was in welcher Version entfernt wurde. Die aktuellen Daten umfassen 444 entfernte Klassen, etwa 1.800 entfernte Methoden, 23 Konstanten und 16 hooks. Jeder kann das Projekt anhand der offiziellen Releases neu kompilieren.

Wir haben die Ergebnisse anhand von echtem Code überprüft. Auf eigene Faust Block Sliding Cart Das Modul meldete, bevor wir es auf PrestaShop 9 aktualisiert haben, genau die Probleme, die die Addons-Validierung damals angezeigt hatte. In der aktuellen Version, die diese Validierung bestanden hat, werden keine Fehler mehr gemeldet. Auch die aktuellen Versionen der PrestaShop-eigenen Module werden ohne Fehler angezeigt.

Einsatz in der CI

Das Skript gibt bei Fehlern den Exit-Code 1 zurück, sodass es einen Build abbrechen kann. Für ein auf GitHub gehostetes Modul reichen zwei Schritte in einem Workflow aus:

- run: curl -sL https://github.com/asymetria/ps9-compat-check/archive/refs/heads/master.tar.gz | tar xz
- run: php ps9-compat-check-master/ps9check.php .

Verwendung --format=json für Ihre eigenen Werkzeuge oder --format=md als Tabelle, die Sie in ein Ticket oder einen Bericht einfügen können.

Was es nicht kann

Da es sich um einen statischen Scan handelt, werden hier auch Codeabschnitte gemeldet, die von PrestaShop entfernt wurden. Da der Typ einer Variablen nicht erkannt werden kann, führt ein Aufruf wie $product->something() wird nur gemeldet, wenn dieser Methodenname nirgendwo mehr im Kern vorhanden ist. Außerdem werden dadurch weder geänderte Verhaltensweisen noch Fehler erfasst, die erst zur Laufzeit auftreten.

Betrachten Sie dies als ersten Durchlauf. Installieren Sie anschließend das Modul auf einer PrestaShop-9-Kopie mit aktiviertem Debug-Modus, öffnen Sie die Konfigurationsseite und klicken Sie sich durch die front office-Optionen im Hummingbird-Theme. Was dabei für unser eigenes Modul herauskam, haben wir beschrieben in Upgrade eines PrestaShop-Moduls auf PrestaShop 9: Was ist schiefgelaufen und wie haben wir das Problem behoben?.

Das Scannen der Module ist Schritt 5 von 12. Den vollständigen Plan, vom Backup bis zum Go-live, finden Sie in unserer Checkliste für das Update von PrestaShop 1.7 auf 9.

Häufig gestellte Fragen

Ist der Checker kostenlos?

Ja. Es handelt sich um Open Source unter der MIT-Lizenz, und Sie können es in Ihrem eigenen Shop, in den Shops Ihrer Kunden oder in Ihren eigenen Tools nutzen.

Wird dadurch mein Modul geändert oder etwas hochgeladen?

Nein. Das Programm liest lediglich die Dateien aus und erstellt einen Bericht. Es werden keine Änderungen vorgenommen, und es verlassen keine Daten Ihren Computer.

Kann ich es in einem Live-Shop einsetzen?

Ja, es liest nur Dateien. Dennoch ist es am sichersten, die modules/ Ordner oder die ZIP-Dateien der Module herunter und führen Sie die Überprüfung auf Ihrem eigenen Computer durch.

Der Bericht ist leer. Ist mein Modul bereit für PrestaShop 9?

Das bedeutet, dass keine der bekannten Entfernungen gefunden wurde, was ein gutes Zeichen ist. Teste es trotzdem an einer PrestaShop-9-Kopie: Der Checker kann weder Verhaltensänderungen noch themenspezifische Layoutprobleme erkennen.

Welche PrestaShop-Versionen werden abgedeckt?

Es enthält eine Auflistung der zwischen den Versionen 1.7.8 und 9.0 entfernten Elemente und ist daher sowohl für Module der Version 1.7, die auf Version 8 oder 9 aktualisiert werden, als auch für Module der Version 8.x, die auf Version 9 aktualisiert werden, nützlich.

Falls der Bericht lang ist

Manche Korrekturen umfassen nur eine einzige Zeile. Andere erfordern eine Neuprogrammierung der Art und Weise, wie ein Modul seine Klassen lädt oder seine Vorlagen rendert. Wenn Sie es lieber jemand anderem überlassen möchten, dann ist das genau unsere Aufgabe: Korrekturen am PrestaShop-Modul. Senden Sie uns den Bericht zu, und wir melden uns mit Fragen oder einem Angebot bei Ihnen.