OXID7 Modulmigration

22. Juni 2024

 

Bereits Mitte 2023 wurde der OXID eShop in der Version 7.0 veröffentlicht. Mittlerweile steht die Version 7.1 zur Verfügung.

Im nachfolgenden Blogpost möchten wir euch ein paar Einblicke in die Modulmigration von OXID 6 auf OXID 7 geben. Die grundlegendste Änderung ist die Einführung der TWIG-Template-Engine. Die bisher genutzte, eigenentwickelte „SMARTY“-Lösung wurde dadurch abgelöst, bleibt jedoch weiterhin nutzbar.

Template-Erweiterungen

Twig-Syntax

Templates können grundsätzlich übernommen werden, jedoch muss der Smarty-Syntax durch die Twig-Syntax ersetzt werden.

  • Ersetzen von Smarty-Definitionen  [{ }] mit Twig-Definitionen {{ }}
  • Ersetzen von -> Operatoren mit einem Punkt .
  • Entfernen von allen & Dollar-Zeichen bei Variablen.

Eine vollständige Liste der zu konvertierenden Plugins und Syntaxe gibt es hier. Außerdem gibt es einen Smarty2Twig-Converter auf Github.

Blöcke

Die Blockdateien müssen in folgender Struktur abgelegt werden:

/modulevendor/moduleid/views/twig/extensions/themes/templateid/filename.html.twig

–> /pc/pccache/views/twig/extensions/themes/admin_twig/article_main.html.twig

Es ist nicht mehr notwendig die Blöcke in der metadata.php zu definieren. Diese werden automatisch eingelesen, sofern die Verzeichnisstruktur gepasst.

Ãœbersetzungen

Aus [{oxmultilang ident="PCCACHE_TITLE"}] wird {{ translate({ ident: "PCCACHE_TITLE" }) }}.

Sprachdateien

Die Sprachdateien (Übersetzungen) müssen in folgender Struktur abgelegt werden:

/modulevendor/moduleid/views/templateid/locale/example_lang.php

–> /pc/pccache/views/admin_twig/views/de/pccache_lang.php

Weiterhin kann auch die module_options.php im gleichen Verzeichnis vorhanden sein. Diese wird jedoch nur geladen, wenn man als Admin eingeloggt ist.

Hinweis: Sprachdateien werden nur geladen, wenn mindestens eine Klasse (extend) erweitert wird. Ist das Application-Verzeichnis vorhanden, werden die Dateien aus der neuen Struktur nicht eingelesen. Wir hatten außerdem auch schon den Fall, dass das translations-Verzeichnis im Modul-Rootverzeichnis liegen muss.

Modulsettings

In der Version 7.1 wurde der Zugriff auf den ModuleSettingsService nochmal überarbeitet.

OXID 7.0 (auch möglich ab 7.1)

$moduleSettingService = ContainerFacade::get(ModuleSettingServiceInterface::class);

OXID 7.1 (nur möglich ab 7.1)

$moduleSettingService = ContainerFactory::getInstance()
->getContainer()
->get(ModuleSettingServiceInterface::class);

Für jeden Settings-Type gibt es jetzt (leider) eine eigene Funktion, z. B. $moduleSettingService->getBoolean() oder $moduleSettingService->getString().

Dokumentation und Academy Videos

Die offizielle OXID-Dokumentation findet man hier. Weiterführende „OXID eSales Academy“ Videos zu den einzelnen Themen gibt es außerdem auf dem OXID Youtube-Kanal.

Eine lokale Entwicklungsumgebung für OXID 7 auf Docker-Basis haben wir auf Github zur Verfügung gestellt.