Rust-Datenmodell für Typo3
Überblick
Dieses Datenmodell bildet zentrale TYPO3-Konzepte als reine Rust-structs und enums ab: Seiten (pages), Inhaltselemente (tt_content), Sprachen, Workspaces, Benutzer und Datei-Referenzen. Es enthält keine Datenbank- oder API-Logik, sondern nur die Datenstrukturen selbst.
Der vollständige Quellcode liegt in der Datei typo3_model.rs.
Basistypen
Kleine Alias-Typen für lesbarere Signaturen:
| Typ | Rust-Definition | Bedeutung |
|---|---|---|
Uid |
u64 |
Eindeutige Datensatz-ID (TYPO3: immer positiv) |
Pid |
i64 |
Seiten-/Storage-ID; 0 = Root |
LanguageUid |
i32 |
Sprach-UID; -1 = alle Sprachen, 0 = Standardsprache |
ColPos |
i32 |
Spaltenposition im Backend-Layout (0 = Main, 1 = Sidebar, …) |
Enums
Doktype
Seitentyp (doktype-Feld der Tabelle pages), bestimmt das Frontend-Verhalten einer Seite.
pub enum Doktype {
Standard = 1,
Link = 3,
Shortcut = 4,
BackendUserSection = 6,
MountPoint = 7,
Spacer = 199,
Sysfolder = 254,
Recycler = 255,
}
CType
Inhaltstyp (CType-Feld der Tabelle tt_content). Deckt die Core-Typen ab; Plugin und Other fangen Extension-/Plugin-Inhalte auf.
pub enum CType {
Header,
Text,
Textmedia,
Image,
Bullets,
Table,
Uploads,
Html,
Plugin { list_type: String },
Other(String),
}
WorkspaceStage
Freigabestatus eines Datensatzes innerhalb eines Workspace.
pub enum WorkspaceStage {
Editing,
ReadyToPublish,
ReadyToPreview,
}
Record
Getaggter Wrapper, um Datensätze unterschiedlichen Typs (z. B. in Suchergebnislisten) einheitlich zu behandeln.
pub enum Record {
Page(Page),
Content(ContentElement),
File(FileReference),
}
Structs
Visibility
Wiederverwendbare Sichtbarkeits-/Zeitsteuerung, wie sie in TYPO3 auf fast jedem Datensatz-Typ vorkommt.
| Feld | Typ | Bedeutung |
|---|---|---|
hidden |
bool |
Datensatz manuell ausgeblendet |
deleted |
bool |
Datensatz (soft-)gelöscht |
starttime |
i64 |
Unix-Timestamp ab Sichtbarkeit (0 = sofort) |
endtime |
i64 |
Unix-Timestamp bis Sichtbarkeit (0 = unbegrenzt) |
fe_groups |
Vec<Uid> |
Frontend-Gruppen mit Zugriff (leer = öffentlich) |
Localization
Lokalisierungs-Beziehung eines Datensatzes (Connected Mode).
| Feld | Typ | Bedeutung |
|---|---|---|
sys_language_uid |
LanguageUid |
Sprache dieses Datensatzes |
l10n_parent |
Option<Uid> |
uid des Originals in der Standardsprache |
Page
Eine TYPO3-Seite (Tabelle pages).
pub struct Page {
pub uid: Uid,
pub pid: Pid,
pub doktype: Doktype,
pub title: String,
pub slug: String,
pub sorting: i64,
pub nav_title: Option<String>,
pub is_siteroot: bool,
pub visibility: Visibility,
pub localization: Localization,
pub content_elements: Vec<ContentElement>,
}
ContentElement
Ein Inhaltselement (Tabelle tt_content).
pub struct ContentElement {
pub uid: Uid,
pub pid: Pid,
pub ctype: CType,
pub col_pos: ColPos,
pub sorting: i64,
pub header: Option<String>,
pub bodytext: Option<String>,
pub visibility: Visibility,
pub localization: Localization,
pub media: Vec<FileReference>,
}
FileReference
Datei-Referenz (Tabelle sys_file_reference).
pub struct FileReference {
pub uid: Uid,
pub file_uid: Uid,
pub title: Option<String>,
pub alternative: Option<String>,
pub description: Option<String>,
pub sorting: i64,
}
SysLanguage
Sprachdefinition (Tabelle sys_language).
pub struct SysLanguage {
pub uid: LanguageUid,
pub title: String,
pub language_iso_code: String,
pub flag_identifier: Option<String>,
}
Workspace
Ein Workspace (Tabelle sys_workspace).
pub struct Workspace {
pub uid: Uid,
pub title: String,
pub stage: WorkspaceStage,
pub members: Vec<Uid>,
}
BackendUser / FrontendUser
Benutzerkonten aus be_users bzw. fe_users.
pub struct BackendUser {
pub uid: Uid,
pub username: String,
pub is_admin: bool,
pub usergroups: Vec<Uid>,
pub disable: bool,
}
pub struct FrontendUser {
pub uid: Uid,
pub username: String,
pub usergroups: Vec<Uid>,
pub visibility: Visibility,
}
Beziehungen zwischen den Typen
- Page enthält mehrere ContentElements (
content_elements) - ContentElement enthält mehrere FileReferences (
media) - Page und ContentElement nutzen beide Visibility und Localization als eingebettete structs
- Record fasst Page, ContentElement und FileReference als Summentyp zusammen
- Workspace referenziert BackendUsers über
members(nur alsUid, keine Einbettung)