-- Migration für Meta-Entries Tabelle -- Führe diese SQL-Datei aus um die Tabelle zu erstellen CREATE TABLE IF NOT EXISTS meta_entries ( id INT PRIMARY KEY AUTO_INCREMENT, -- Route-basierte Meta-Daten route_pattern VARCHAR(255) NULL, -- Entity-basierte Meta-Daten entity_type VARCHAR(100) NULL, entity_id INT NULL, -- Meta-Daten Felder title VARCHAR(255) NULL, description TEXT NULL, keywords TEXT NULL, -- Open Graph og_title VARCHAR(255) NULL, og_description TEXT NULL, og_image VARCHAR(500) NULL, og_type VARCHAR(50) NULL, -- Twitter twitter_card VARCHAR(50) NULL, twitter_site VARCHAR(100) NULL, -- Andere canonical VARCHAR(500) NULL, custom_meta JSON NULL, -- System-Felder priority INT DEFAULT 0, active BOOLEAN DEFAULT TRUE, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, -- Indizes INDEX idx_route_pattern (route_pattern), INDEX idx_entity (entity_type, entity_id), INDEX idx_active_priority (active, priority), -- Unique Constraints UNIQUE KEY unique_route_pattern (route_pattern), UNIQUE KEY unique_entity (entity_type, entity_id), -- Constraints CONSTRAINT check_route_or_entity CHECK ( (route_pattern IS NOT NULL AND entity_type IS NULL AND entity_id IS NULL) OR (route_pattern IS NULL AND entity_type IS NOT NULL AND entity_id IS NOT NULL) ) ); -- Beispiel-Daten einfügen INSERT INTO meta_entries (route_pattern, title, description, og_title, og_type, priority, active) VALUES ('/', 'Startseite - Meine Website', 'Willkommen auf meiner Website. Hier finden Sie alles über...', 'Startseite', 'website', 100, TRUE), ('/blog', 'Blog - Meine Website', 'Alle Artikel und Neuigkeiten aus unserem Blog', 'Blog', 'website', 90, TRUE), ('/blog/*', 'Blog: {title} - Meine Website', '{description}', '{title}', 'article', 80, TRUE), ('/contact', 'Kontakt - Meine Website', 'Nehmen Sie Kontakt mit uns auf. Wir freuen uns auf Ihre Nachricht.', 'Kontakt', 'website', 70, TRUE); -- Template-Beispiele mit Platzhaltern INSERT INTO meta_entries (entity_type, entity_id, title, description, og_title, og_description, priority, active) VALUES ('product', 1, '{product.name} - Jetzt kaufen | Mein Shop', '{product.name} für nur {product.price}€. {truncate:product.description}', '{product.name}', '{truncate:product.description}', 100, TRUE), ('article', 1, '{article.title} | Mein Blog', '{truncate:article.content}', '{article.title}', '{truncate:article.content}', 100, TRUE);