Shop Projekt - Dokumentation
Shop LDM
Teil 05: Seiten & Inhalte
Dieses Modul erweitert das Labels-Modul um strukturierte Seiteninhalte.
Während Labels für UI-Elemente (Buttons, Labels) und kurze Texte verwendet werden, ermöglicht dieses Modul die Verwaltung kompletter Seiten mit mehrsprachigen Inhalten, strukturiert in Sektionen und Inhaltstypen.
- Content_section: Seiten werden in logische Sektionen unterteilt.
- Content_type: Unterschiedliche Inhaltstypen innerhalb jeder Sektion.
- Page_content: Alle Inhalte in allen unterstützten Sprachen.
- v_page_render: Vereinfachte Abfrage für Seiteninhalte (Node-Content-Ansatz).
- Beispiel: Typische Seitenstruktur mit Sektionen, Inhaltstypen und mehrsprachigen Inhalten.
HTML-freundlich: Direkte Integration in Frontend-Templates möglich.
Content_section
Zweck: Definiert strukturierte Bereiche innerhalb einer Seite.
Felder:
- sec_ID (PK)
- cat_ID (FK → Category) -- Seite/Node zugehörigkeit
- sec_order INT NOT NULL DEFAULT 0 -- Reihenfolge der Sektionen
- sec_type VARCHAR(20) -- HTML-Elementtyp (div, section, article)
- sec_html_id VARCHAR(50) -- HTML-ID-Attribut
- sec_class VARCHAR(100) -- CSS-Klassen
- UNIQUE (cat_ID, sec_order) -- Nur eine Sektion pro PositionContent_type
Zweck: Definiert die Art des Inhalts innerhalb einer Sektion.
Felder:
- typ_ID (PK)
- sec_ID (FK → content_section)
- typ_is_global BOOLEAN -- Ist der Inhalt für alle Sprachen gleich?
- typ_order INT -- Reihenfolge innerhalb der Sektion
- typ_element VARCHAR(20) -- HTML-Element (h1, h2, p, ul, etc.)
- typ_class VARCHAR(100) -- CSS-Klassen
- UNIQUE (sec_ID, typ_order) -- Nur ein Typ pro PositionPage_content (Realer Text)
Zweck: Speichert die tatsächlichen Inhalte in verschiedenen Sprachen.
Felder:
- con_ID (PK)
- typ_ID (FK → content_type)
- lan_ID (FK → language) -- NULL = sprachunabhängig
- con_order INT -- Reihenfolge bei Mehrfacheinträgen
- con_value TEXT -- Der eigentliche Inhalt
- UNIQUE (typ_ID, lan_ID, con_order) -- Nur ein Inhalt pro Sprache und Reihenfolgevw_page_render View
Zweck: Vereinfachte Abfrage für Seiteninhalte (Node-Content-Ansatz).
Felder:
- cat_key -- Eindeutiger Seiten-Key (z.B. 'home')
- cat_ID -- ID des Nodes
- sec_ID -- Sektion-ID
- sec_order -- Reihenfolge der Sektion
- sec_type -- HTML-Element der Sektion
- sec_html_id -- HTML-ID der Sektion
- sec_class -- CSS-Klassen der Sektion
- typ_ID -- Inhaltstyp-ID
- typ_order -- Reihenfolge des Typs
- typ_element -- HTML-Element des Typs
- typ_class -- CSS-Klassen des Typs
- typ_is_global -- Sprachunabhängig?
- lan_ID -- Sprach-ID
- con_value -- Der eigentliche Inhalt
Quelle:
- FROM tb_category c
- JOIN tb_content_section cs ON c.cat_ID = cs.cat_ID
- JOIN tb_content_type ct ON cs.sec_ID = ct.sec_ID
- JOIN tb_page_content pc ON ct.typ_ID = pc.typ_ID
Sortierung: ORDER BY cs.sec_order, ct.typ_order, pc.con_orderTypische Seitenstruktur (Beispiel)
page (z.B. 'about_us')
├── section 0: header
│ ├── type 0: h1
│ │ └── 0 'Über uns'
│ └── type 1: p
│ ├── 0: strong 'Willkommen'
│ └── 1: span 'Bei uns.'
├── section 1: intro
│ ├── type 0: h2
│ │ └── 0 'Unsere Geschichte'
│ ├── type 1: p
│ │ ├── 0: 'Text...'
│ │ └── 1: '...Text...'
│ └── type 2: img
│ └── 0 'team-photo.jpg'
└── section 2: team
├── type 0: h2
│ └── 0 'Unser Team'
├── type 1: li
│ ├── 0: ul 'Number 1'
│ ├── 1: ul 'Number 2'
│ ├── 2: ul 'Number 3'
│ └── 3: ul 'Number 4'
└── type 2: p
└── 0 'Kontakt...'