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

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, …
Git spielend im Griff
- Eine schöne interaktive Möglichkeit, einige Konzepte von Git näher kennen zu lernen, bietet die Seite Learn Git Branching. In diesem Spiel werden in unterschiedlichen Tutorials und Aufgaben die …
Sektionen zum Ein- und Ausklappen ohne JavaScript und in Markdown nutzen
- Der HTML5-Standard bietet einige Tags, mit denen sich interaktive Elemente abbilden lassen. Ein sehr nützliches Beispiel sind die Tags <details> und <summary>: sie erlauben die Erstellung …
Lesetipp: das Buch zu Symfony 5 auf deutsch
- Das Buch “Symfony 5: The Fast Track” von Fabian Potencier zeigt anhand praktischer Beispiele einen großen Teil der Bandbreite der Symfony-Komponenten. Es eignet sich daher für einen …
CSS-Konzepte spielerisch lernen
- Die Cascading Style Sheets zum Gestalten von Internetseiten und Webanwendungen gibt es schon eine ganze Ewigkeit. Elementare Dinge ändern sich hier vergleichsweise selten. Mit der Umstellung von …