Kleines Custom Modul um den Inhatlstypen Manual und Documentation das Backend Theme zuzuweisen.
Danach werden diese Inhaltstypen im Backend dargestellt und übernehmen nichts Theme des Projektes. Bleiben somit auch im Backend sichtbar.
Modul erstellen
- Folgende Verzeichnisstruktur erstellen
pernet_manu_docu/ ├── pernet_manu_docu.info.yml ├── pernet_manu_docu.services.yml └── src/ └── Theme/ └── ManualDocumentationThemeNegotiator.php
- pernet_manu_docu.info.yml (Verzeichnis modules/custom/pernet_manu_docu/)
name: 'per.net Manual and Documentation' type: module description: 'Provides project manual and documentation.' package: 'per.net' core_version_requirement: ^11
- pernet_manu_docu.services.yml
services: pernet_manu_docu.theme_negotiator: class: Drupal\pernet_manu_docu\Theme\ManualDocumentationThemeNegotiator tags: - { name: theme_negotiator, priority: 1000 }
- ManualDocumentationThemeNegotiator.php
- Was hier passiert, ist überschaubar:
applies()fragt: «Bin ich für diese Seite zuständig?»- Drupal holt den
nodeaus der aktuellen Route. - Gibt es keinen Node → unser Modul mischt sich nicht ein.
- Ist sein Bundle
manualoderdocumentation→TRUE. - Dann fragt Drupal
determineActiveTheme(). - Das antwortet momentan schlicht mit
claro.
<?php namespace Drupal\pernet_manu_docu\Theme; use Drupal\Core\Routing\RouteMatchInterface; use Drupal\Core\Theme\ThemeNegotiatorInterface; /** * Uses the administration theme for Manual and Documentation content. */ class ManualDocumentationThemeNegotiator implements ThemeNegotiatorInterface { /** * {@inheritdoc} */ public function applies(RouteMatchInterface $route_match): bool { $node = $route_match->getParameter('node'); if (!$node) { return FALSE; } return in_array($node->bundle(), [ 'manual', 'documentation', ], TRUE); } /** * {@inheritdoc} */ public function determineActiveTheme(RouteMatchInterface $route_match): ?string { return \Drupal::config('system.theme')->get('admin'); } }
- Was hier passiert, ist überschaubar:
Weitere Modulelemente... > Inhalt folgt.
Info für chatgpt:
[MODESTIA / PER.NET – MANUAL & DOCUMENTATION – STAND]
ZIEL
Interne Projektdokumentation und Redaktor-Manual sollen von der öffentlichen Website getrennt sein. Die Inhalte bleiben normale Drupal-Nodes, sollen aber im Administration Theme dargestellt werden.
CONTENT TYPES
- manual
- documentation
CUSTOM MODULE
Machine name: pernet_manu_docu
Name: per.net Manual and Documentation
Pfad:
web/modules/custom/pernet_manu_docu/
Aktuelle Struktur:
pernet_manu_docu/
├── pernet_manu_docu.info.yml
├── pernet_manu_docu.services.yml
├── pernet_manu_docu.libraries.yml
├── pernet_manu_docu.module
├── css/
│ └── manu-docu.css
└── src/
└── Theme/
└── ManualDocumentationThemeNegotiator.php
THEME NEGOTIATION
Das Modul erkennt Nodes der Bundles:
- manual
- documentation
und verwendet für diese das konfigurierte Administration Theme.
Wichtig: NICHT hart auf Claro festgelegt.
Aktueller Code in determineActiveTheme():
return \Drupal::config('system.theme')->get('admin');
Dadurch funktioniert das Modul später auch in anderen per.net-Projekten mit anderem Administration Theme.
DARSTELLUNG
Die Darstellung im Claro-Theme gefällt bereits sehr gut.
Kein eigenes pernet_docs-Theme nötig.
Der <article>-Wrapper bietet diese Selektoren:
.node--type-manual
.node--type-documentation
800px/max-width und eigene Fonts waren nur Überlegungen und sind momentan NICHT nötig. Das Administration Theme mit system-ui usw. passt.
CSS
Library in pernet_manu_docu.libraries.yml:
manu_docu:
css:
theme:
css/manu-docu.css: {}
Die Library wird über hook_preprocess_node() nur für manual und documentation geladen.
css/manu-docu.css ist momentan noch leer bzw. nur für spätere kleine projektspezifische Anpassungen vorgesehen.
Ein Rahmen um den <article>-Bereich gefällt grundsätzlich und kann später dort ergänzt werden. Margin wurde ausdrücklich als unnötig verworfen.
USER-MANUAL-TEST
Drupal-Contrib-Modul user_manual 1.1.0 wurde testweise installiert und anschließend vollständig entfernt.
Es brachte zusätzlich drupal/entity 1.8.0 mit. Beide wurden wieder entfernt.
Toolbar war bereits VOR diesem Test installiert/enabled und wurde durch den Test NICHT verändert.
user_manual hat gezeigt:
- eigene User Manual Entities
- Topics/Taxonomie
- eigene View
- Darstellung im Administration Theme
Konzept wurde aber verworfen, weil es unnötig kompliziert/unsichtbar in der Bedienung war:
- Entries wurden unter Structure → User manual types angelegt
- Topics mussten separat angelegt werden
- keine intuitive Create-Oberfläche
- keine klare Navigation für Redaktoren
- normale Nodes + unser eigenes kleines Modul sind für per.net einfacher und transparenter.
AKTUELL NOCH OFFEN
1. EIGENE ÜBERSICHT
Eine eigene View für Manual + Documentation, z.B.:
/admin/content/pernet-docs
Die normalen Nodes sollen NICHT einfach in der normalen Content-Übersicht untergehen.
Vermutlich eigener Admin-Menüpunkt:
"Manual & Documentation"
Ideal wäre eine übersichtliche Trennung:
Documentation
- ...
Manual
- ...
2. BERECHTIGUNGEN
Eigene Permission im Modul, sinngemäß:
"Access per.net Manual and Documentation"
Später ggf. differenzierbarer:
- bestimmte Benutzer/Rollen dürfen Manual lesen
- technische Benutzer/Admins dürfen zusätzlich Documentation lesen
Keine speziellen Benutzer wie "manu" / "docu" als eigentliche Sicherheitslösung. Benutzer können höchstens zum Testen verwendet werden.
3. DIREKTER ÖFFENTLICHER ZUGRIFF
WICHTIG:
Manual- und Documentation-Nodes sollen NICHT öffentlich über ihre Node-URL abrufbar sein.
Nicht nur die View schützen, sondern auch direkten Zugriff auf die Nodes.
Geplante Lösung:
Drupal Node Access im eigenen Modul.
Rabbit Hole wurde besprochen, aber zunächst NICHT installieren. Es ist eher für das Verhalten der direkten Entity-Seite gedacht und nicht unsere eigentliche Rechteverwaltung.
4. ADMIN-MENÜ
Der Editor soll im Administration Theme einfach eine eigene Anlaufstelle finden können, z.B.:
Content
→ Manual & Documentation
Die normale Content-Übersicht muss dafür nicht zwingend verändert werden.
PATHAUTO
Für beide Content Types ist Pathauto bereits eingerichtet.
Aktuell gemeinsames Pattern:
[node:content-type]/[node:title]
Das ergibt z.B.:
manual/...
documentation/...
Kein /admin/-Prefix nötig. Ein /admin/-Alias würde die Node intern trotzdem nicht zu einer Admin-Route machen.
ARCHITEKTURZIEL
Am Ende soll pernet_manu_docu möglichst unverändert in die spätere per.net-Projektbasis übernommen werden können.
Prinzip:
Kundentheme
→ öffentliche Website
Administration Theme
→ Drupal-Backend
pernet_manu_docu
→ Manual + Documentation
→ Theme Negotiation
→ eigenes CSS nur falls nötig
→ eigene Übersicht
→ Berechtigungen
→ Node Access
Keine zweite Drupal-Installation.
Keine zusätzliche komplexe Entity-Struktur.
Keine unnötigen Contrib-Module, wenn Core + kleines Custom Module reichen.
AKTUELLER ARBEITSSTAND
Theme-Umschaltung funktioniert bereits.
CSS-Library wird geladen.
Darstellung im Administration Theme ist für den Nutzer sehr gut.
Jetzt können zunächst 2–3 Manual-/Documentation-Artikel geschrieben werden.
DANACH WEITER:
1. View für Manual + Documentation
2. Admin-Menüpunkt
3. Permission
4. Node Access
5. mit Testrollen/-benutzern prüfen
6. ggf. kleines CSS für Rahmen/optische Hervorhebung
[/MODESTIA / PER.NET – MANUAL & DOCUMENTATION – STAND]