Skip to main content
Home
Schatzchaeschtli 2026

Main navigation

  • Home
User account menu
  • Log in

Breadcrumb

  1. Home

Modul: pernet Dokumentation und Manual

By PierreAdmin , 30 September 2026

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 node aus der aktuellen Route.
      • Gibt es keinen Node → unser Modul mischt sich nicht ein.
      • Ist sein Bundle manual oder documentation → 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');
        }
      
      }
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]

 

  • manual
  • dokumentation
  • modul
  • pernet
Module

Tag Suche

Categories (Taxonomie-Menu)

  • Drupal
    • Module
    • Theming
    • Views
  • Webentwicklung
    • Composer
    • CSS/SCSS
    • Deployment
    • Drush
    • Git
    • HTML
    • JavaScript
    • PHP
    • SSH
    • SVG
    • VS Code
  • Datenbank
    • mySQL
  • Server
    • Apache
    • DNS
    • Domains
    • Plesk
    • SSL/TLS
  • System
    • Mac
    • Unix
    • Windows