# Drupal
* Open-Source
* 14% der Top-10.000-Websites verwenden Drupal, z.B. auch Duden
* Im Hintergrund läuft Drupal mit PHP und einer Datenbank.
* Eignet sich gut für Blogs und Foren, man kann es aber auch für Online-Shops und andere Seiten verwenden (Wish verwendet z.B. auch Drupal)
* Es gibt regelmäßige Updates (die neueste Version ist erst im Dezember erschienen) und Sicherheitslücken werden schnell gepatcht
* Bei CMS gibt es eine umfassende Nutzerverwaltung
* Wir haben uns schnell zurechtgefunden, der Aufbau ist übersichtlich, jedenfalls wenn man ein vorgefertigtes Theme verwendet. Im Vergleich zu WordPress ist WordPress aber noch anfängerfreundlicher
* Drupal ist sehr flexibel, skalierbar, unterstützt verschiedene Sprachen und ist damit für größere Seiten gut geeignet.
* Drupal ist für Screenreader ausgelegt und damit barrierefrei
# Monolithische CMS versus Headless-CMS
Drupal ist ein monolithisches Content-Management-System. Das heißt, dass es eine Website als Frontend gibt. Im Gegensatz dazu gibt es bei Headless-CMS nur ein Backend, auf das man mit einer API zugreifen kann, aber kein Frontend. Headless-CMS sollte man verwenden, wenn man den Content nicht nur als Website, sondern auch z.B. über eine Smartphone-App darstellen will. Drupal hat aber auch eine API, mit der es auch als Headless-CMS verwendet werden kann.
# Datenbank CMS versus Flat-File-CMS
Drupal hat im Hintergrund eine Datenbank. Es gibt aber auch CMS, die stattdessen Dateien, z.B. Markdown-Dateien, verwenden. Flat-File-CMS sind zwar einfacher und schlanker, mit Drupal und anderen Datenbank-CMS hat man aber mehr Möglichkeiten.
# Installation
compose.yaml herzeigen, dann Bilder herzeigen
# Contentverwaltung
http://localhost/ - Front-End und oben das Back-End
http://localhost/admin/content - (Content) Seitenübersicht und -verwaltung
http://localhost/node/add - (Content -> Inhalt hinzufügen) Seite hinzufügen
http://localhost/node/add/article - (Content -> Inhalt hinzufügen -> Artikel) Artikel hinzufügen (z.B. Blogeintrag)
http://localhost/node/add/page - (Content -> Inhalt hinzufügen -> Einfache Seite) Einfach Seite hinzufügen (z.B. Kontakt-Info)
http://localhost/admin/structure/types - (Struktur -> Inhaltstypen) Hier kann man Inhaltstypen bearbeiten und hinzufügen
Vielleicht abmelden und als normaler User anmelden und schauen, wie sich Website ändert.
Fürs Backend kann man anstatt einer GUI auch eine REST-Schnittstelle verwenden.
# Konfiguration
http://localhost/admin/config/system/site-information - (Konfiguration -> System -> Grundeinstellungen der Website) Pfad der Startseite zu vorhin angelegtem Artikel ändern
# Benutzerverwaltung
http://localhost/admin/config/people/accounts - (Konfiguration -> Benutzer -> Kontoeinstellungen) Einstellen, wie Konten registriert werden
http://localhost/admin/people - (Benutzer) Liste von Konten
http://localhost/admin/people/permissions - (Benutzer -> Berechtigungen) den Nutzergruppen Berechtigungen vergeben
# Module
https://www.drupal.org/project/project_module - Alle Module (Plugins)
https://www.drupal.org/project/project_module?f%5B2%5D=&f%5B3%5D=sm_core_compatibility%3A10 - Module für Drupal 10 (erschienen Dezember 2022), keine Rückwärtskompatibilität
http://localhost/admin/modules - (Erweitern) Modulübersicht (Core-Module und externe)
http://localhost/admin/modules/install - (Erweitern -> Neues Modul hinzufügen) externes Modul installieren mit Link von drupal.org
# Google-Analytics-Modul
https://www.drupal.org/project/google_analytics
http://localhost/admin/config/services/google-analytics (Erweitern -> Nach Google filtern -> Google Analytics -> Konfigurieren) -> geht nicht, weil keine Web Property ID
# SEO
Mehrere Module:
1. https://www.drupal.org/project/pathauto - Pathauto für schöne Links (Konfiguration: http://localhost/admin/config/search/path/patterns), ohne Pathauto: http://localhost/node/2, mit Pathauto: http://localhost/neuigkeiten
2. https://www.drupal.org/project/metatag - Metatag fügt automatisch Meta-Tags im Header hinzu, damit Browser z.B. die Zielgruppe von Website wissen oder auch für Twitter-Preview
* http://localhost/admin/config/search/metatag - Konfiguration, bei Content und "Inhalt: Artikel" wurden Tags hinzugefügt
* http://localhost/neuigkeiten - (Startseite -> Neuigkeiten) wenn man Quelltext anzeigt, sieht man im Header Meta-Tags
3. https://www.drupal.org/project/simple_sitemap - Mit Simple XML Sitemap kann man Sitemap generieren (XML-Datei mit verschiedenen Unterseiten für Suchmaschinen): http://localhost/sitemap.xml
# Themes
https://www.drupal.org/project/project_theme - Alle Themes
https://www.drupal.org/project/project_theme?f%5B2%5D=sm_core_compatibility%3A10 - Module für Drupal 10
https://www.drupal.org/project/estore - Theme für Online-Shop (geht nicht mit Drupal 10)
http://localhost/admin/appearance - (Design) Theme einstellen
http://localhost/admin/structure/block - (Struktur -> Blocklayout) Bausteine des Themes verschieben, Theme anpassen
Für größere Websites programmiert man meistens ein eigenes Theme, wodurch man sehr flexibel ist, was aber auch viel Zeit benötigt. Im Hintergrund schreibt man selbst den JavaScript-, CSS- und HTML-/PHP-Code mit einer Template-Engine (Twig).
Beispieldatei: https://git.drupalcode.org/project/gin/-/blob/8.x-3.x/templates/html.html.twig
# Vor- und Nachteile
## Vorteile
* Hohe Flexibilität, wenn man eigenes Theme und eigene Module programmiert
* Skalierbarkeit: Riesige Websites mit viel Datenverkehr verwenden Drupal
* Sicherheit: Regelmäßige Updates, guten Ruf, Website vom Weißen Haus verwendet Drupal
* Open-Source: Gratis, viele Entwickler, viele Themes und Module
## Nachteile
* Open-Source: Bei Problemen gibt es niemanden, bei dem man sich beschweren könnte (für Firmen besonders relevant)
* Keine Rückwärtskompatibilität, Themes und Module müssen geupdatet werden
* Größter Nachteil: Wenn man mehr ändern will als das, was in der Präsentation gezeigt worden ist, muss man HTML, CSS, JS und PHP beherrschen.
# Wer sollte Drupal benutzen?
* Vor allem für Programmierer gedacht.
* Gut für größere Firmen mit eigenen Programmierern
* Für KMUs sind andere CMS meistens besser geeignet