Ein Beispiel, wie man ein Projekt mit mehreren MOST-Modulen gut strukturieren kann

in  Basics , , ,

Ein Beispiel, wie man ein Projekt mit mehreren MOST-Modulen gut strukturieren kann

Gastbeitrag von Ralf Köster

Für unsere Pfarreiengemeinschaft ist es nun an der Zeit, einmal die alte Zikula Seite zu modernisieren. Wir haben entschieden, dass es nur wenige der alten Module auf die neue Seite schaffen sollen. Das sind in diesem Falle News, Content und Scribite. Bei allen drei Modulen gehen wir davon aus, dass sie auch noch viele Jahre bestehen bleiben werden. Alles andere wollen wir mit MOST-Modulen machen. Damit sind wir hoffentlich zukunftssicherer, als jemals in der Vergangenheit.

In diesem Beitrag möchte ich euch schildern, wie ich das Projekt strukturiert habe und vor allem warum.

Als Ablage für mein Projekt habe ich Github gewählt. Ich synchronisiere jetzt immer mein Projekt mit Github. Somit kann ich dort mit den Issues meine ToDo-Liste pflegen und habe ein hervorragendes Backup für mein Projekt. Das Beispielprojekt, über das ich hier rede, findet ihr hier.

Von der Struktur her haben wir zwei Hauptordner angelegt. Zum Einen ist da core und zum Anderen Mockup. Im Mockup habe ich eine grob entworfene Seite gespeichert, damit ich meinem Team zeigen kann, was ich mir so grob vorstelle. Wenn ihr mit einer Agentur zusammenarbeitet, kann die ihre Dateien dort ablegen. Im core-Ordner habe ich dann alles so abgelegt, dass ich das über meine Zikula 1.4.x Installation einfach so rüberkopieren kann.

Nun sind die Module aus dem Generator ja noch nicht ganz fertig. Insbesondere die Templates werden ja so gut wie immer mit angepasst. Auch gibt es in der Regel Übersetzungen des Moduls. Die Templates und Übersetzungen schreiben wir am Besten alle in das app/Resource/views bzw. app/Resource/translation Verzeichnis vom Core. Das hat den entscheidenden Vorteil, dass wir jederzeit das generierte Modul komplett löschen können und das neue Generat nach modules/Vendor/UnserModul kopieren können. Aber Achtung: Wenn man php-Dateien im Modul angepasst hat, sind die Anpassungen nach dem Löschen wieder weg. Ob ich die auch im App-Ordner überschreiben kann, muss ich noch ausprobieren. Aber die Experten, die sowas machen, haben sowieso andere Strategien ;-). Wir müssen aufpassen, das wir den Ordner in app/Resources richtig benennen. Der Ordnername besteht aus einem zusammengesetzten Namen aus Vendor und Modulname. Vendor steht hier übrigends als Synonym, für das, was ihr da in euren Most-Modulen angegeben habt. Das wird euch immer automatisch beim Generieren erzeugt. In das modules/Vendor-Verzeichnis kopieren wir also alle unsere generierten Module hinein.

Da wir ja noch Legacy Module mitschleppen müssen, brauchen wir für die Templates und Übersetzungen auch ein ordentliches Zuhause. Da hierfür noch nicht alle Vorteile von Symfony greifen, haben wir hier zwei Ordner. Zum Einen schreiben wir alle Templates, die wir in News überschreiben wollen in das Verzeichnis config/modules/News/templates. Diese werden jedoch nicht automatisch erkannt. Daher müssen wir die geänderten Templates auch noch über die Datei config/template_overrides.yml bekannt machen. Die Übersetzungsdateien kommen ganz normal in den Ordner modules/News/locale/de/LC_MESSAGES, wie wir es seit Einführung von Gettext kennen. Ich halte die Module, die ich nicht selber generiere, nicht in meinem Verzeichnis vor, denn sie sind einfach über Github zu beziehen.

Zusammenfassung:

Alles, was wir bei MOST-Modules ändern, kommt in den app-Ordner, die Module kommen in das modules-Verzeichnis und werden dort nicht verändert.

Ausblick:

In zwei weiteren Beiträgen werde ich noch beschreiben, wie wir mit der Komandozeile (ssh) und mit Hilfe von wget unsere Seiten recht schnell aufsetzen können, sowie eine Beschreibung, wie wir mittels des neuen standalone Generators und einem Powershell Skript unter Windows unsere Module recht einfach aktuell halten können.

Weitere Beiträge in Kategorie Basics

Einfaches JS-Management mit ImportMaps in neuer Symfony AssetMapper-Komponente
- Im Symfony-Ökosystem werden Frontend-Komponenten seit einiger Zeit zunehmend über UX-Komponenten verarbeitet. Auch wenn hierdurch einige Anbelange vereinfacht werden, ist doch oftmals der Aufbau einer …
Symfony UX im Kontext von ModuleStudio
- Stimulus und Symfony UX Ein JavaScript-Ökosystem für Symfony wurde bereits Ende 2020 gestartet. Vereinfacht ausgedrückt wurde Symfony Flex erweitert, um auch JavaScript-Anteile in einem Bundle leicht …
Das Buch zu Symfony ist in einer neuen Version erschienen
- Bereits im Jahr 2020 haben wir das Buch “Symfony: The Fast Track” hier vorgestellt. Nun ist eine neue Auflage bereitgestellt worden, welche auf den Stand für Symfony 5.4 und 6.0 gebracht …
Symfony und API Platform starten offiziellen Docker-Support
- Seit knapp einem Monat steht eine umfangreiche Unterstützung zur Docker-basierten Arbeit mit Symfony bereit. Hierbei gibt es Neuerungen in mehreren zentralen Werkzeugen, die ineinander greifen und …
Optische Varianzen mit SCSS-Maps umsetzen
- In vielen Weblayouts ist es notwendig, unterschiedliche Ausprägungen einer bestimmten kosmetischen “Stellschraube” zu realisieren. So können etwa einzelne Akzentfarben je nach Unterseite, …