docs
TYPO3 v14
Erste Schritte  /  Einführung und Architektur

01 — Einführung und Architektur

Was Yavi ist

Das Modul Yavi Theme, Seite Design / Colors — die ganze Markenpalette auf einem Bildschirm
Das Modul Yavi Theme, Seite Design / Colors — die ganze Markenpalette auf einem Bildschirm

Yavi ist eine Familie von TYPO3-Extensions:

ExtensionComposer-NameRolle
yavi_corewebagentur-yahya/yavi-coreDas Framework: Inhaltselemente, Backend-Modul, Navigationsvarianten, Token-System. Enthält kein Markendesign.
yavi_lucernewebagentur-yahya/yavi-lucerneEin Theme: Business-/Agentur-Look. Navy + Gold, Inter.

yavi_core setzt auf Bootstrap Package (bk2k/bootstrap-package) auf und ergänzt es, statt es zu ersetzen: Inhaltselemente, Bildverarbeitung und SCSS-Kompilierung von Bootstrap Package bleiben bestehen.

Eine Regel, die den größten Teil des Aufbaus erklärt

!
yavi_core ist das Framework, kein Design. Jeder Wert, der eine Site nach Lucerne aussehen lässt — das Navy, das Gold, Inter, die Header-Proportionen, die Eckenradien — steht im Theme, nie im Core.

Deshalb liefert yavi_core neutrale Grautöne als Vorgabe aus, und deshalb deklariert ein Theme seine Werte vollständig statt als Abweichung: So kann ein Schwester-Theme niemals versehentlich einen Wert erben.

Die vier Ebenen

Vor jeder Änderung steht die Frage, auf welche Ebene sie gehört. Die falsche Ebene zu wählen ist der häufigste Fehler im Umgang mit diesem System.

EbeneWoGilt fürDeployment nötig
1 — Site SettingsBackend-Modul Yavi Theme → config/sites/<id>/settings.yamleine Sitenein
2 — Theme-Setpackages/<theme>/Configuration/Sets/Full/settings.yamljede Site, die dieses Theme nutztja
3 — Theme-SCSSpackages/<theme>/Resources/Public/Scss/jede Site, die dieses Theme nutztja
4 — Corepackages/yavi-core/jedes Theme, jeden Kundenja

Faustregel: Was nur diesen Kunden betrifft → Ebene 1. Was das Design ist → Ebene 2 oder 3. Ebene 4 nur für echte Fehler oder für Funktionen, von denen alle etwas haben.

Ein Wert auf einer höheren Ebene gewinnt. Ein leeres Feld auf Ebene 1 bedeutet nicht „kein Wert“ — es bedeutet „durchfallen auf Ebene 2, dann 4“.

Wie eine Seite ihr Aussehen bekommt

text
Site Settings (Ebene 1)
        │  vom Backend-Modul nach config/sites/<id>/settings.yaml geschrieben
        ▼
ThemeCssVariablesRenderer  →  <style> :root { --card-radius: …; --navbar-height: … } </style>
        │
        ▼
theme-<hash>.css  ←  serverseitig aus SCSS kompiliert, von scssphp (Bootstrap Package)
        │              Structure/*.scss  (Geometrie, Verhalten — Core)
        │              Skin/*.scss       (Farbe, Schatten, Dekoration — darf das Theme ersetzen)
        ▼
die gerenderte Seite

Zwei Folgerungen, die man sich merken sollte:

Structure und Skin

Das SCSS des Core ist zweigeteilt:

OrdnerEnthältThemes
Scss/Structure/Geometrie, Layout, Verhalten: was eine Karte zur Karte macht.selten angefasst
Scss/Skin/Farbe, Schatten, Rahmen, Dekoration: was eine Karte nach Lucerne aussehen lässt.je Komponentenfamilie ersetzt

Ein Theme ersetzt die Skin-Datei einer Komponentenfamilie im Ganzen, statt einzelne Deklarationen zu überschreiben. Es gibt keine Cascade Layers — die Datei des Themes kommt schlicht später.

Das Token-System in einem Bild

scss
// yavi_core: _variables-defaults.scss — die theme-unabhängige Vorgabe
--card-radius: calc(12px * var(--theme-radius-scale, 1));

// yavi_lucerne: _variables.scss — der eigene Wert des Themes
--card-radius: 25px;

// Site Settings (Ebene 1) — in den Seitenkopf geschrieben
--card-radius: calc(18px * var(--theme-radius-scale, 1));

Alles, was eine Site konfigurieren kann, ist eine CSS Custom Property, und jede Custom Property hat genau einen Eigentümer. Siehe 15 — Theming.

Was ohne Zutun mitkommt

Dieselbe Seite bei 390px — die mobile Navigation ist eine eigene Variante, nicht das zusammengeklappte Desktop-Menü
Dieselbe Seite bei 390px — die mobile Navigation ist eine eigene Variante, nicht das zusammengeklappte Desktop-Menü