Grundlagen und Best Practices Grundlagen und Best Practices
Ein Beispiel, wie man ein Projekt mit mehreren MOST-Modulen gut strukturieren kann

Sonntag, 19. Februar 2017

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.

Wir haben die Struktur wie folgt gewählt:

core
   app
      Resources
         VendorModul1
            translations
            views
         VendorModul2
            translations
   config
      modules
         News
            templates
   modules
      Vendor
         Modul1
         Modul2
   themes
      Vendor
         MyTheme
Mockup

Wir haben 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 Grundlagen und Best Practices

^