Voeg CMS voor de Publieke Website toe (overgenomen van rikx-org)
Pagina-editor, hoofdmenu, SEO en media onder Publieke Website → Pagina's (/website), los van het CMS in rikx-org: eigen tabellen in de beheerdatabase. Blokken (hero, tekstblok, testimonial, voordelenlijst, call-to-action) met Quill, NL/EN/DE met terugval op NL, en afbeeldingsupload naar MEDIA_DIR met een openbare /media-route (CSP-sandbox). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -117,6 +117,49 @@ function migrate(db: DatabaseSync) {
|
||||
addColumnIfMissing(db, "projects", "impactmaker_account_id", "INTEGER");
|
||||
addColumnIfMissing(db, "projects", "ronde_id", "INTEGER REFERENCES rikx_rondes(id) ON DELETE SET NULL");
|
||||
db.exec("CREATE INDEX IF NOT EXISTS idx_projects_ronde ON projects(ronde_id)");
|
||||
|
||||
// Publieke Website (CMS), overgenomen van rikx-org; functies in lib/cms.ts.
|
||||
// NL staat in pages/content_blocks zelf, EN/DE in de *_translations-tabellen.
|
||||
db.exec(`
|
||||
CREATE TABLE IF NOT EXISTS pages (
|
||||
slug TEXT PRIMARY KEY,
|
||||
meta_title TEXT NOT NULL DEFAULT '',
|
||||
meta_description TEXT NOT NULL DEFAULT '',
|
||||
og_image TEXT,
|
||||
canonical_url TEXT,
|
||||
noindex INTEGER NOT NULL DEFAULT 0,
|
||||
nav_label TEXT,
|
||||
nav_order INTEGER NOT NULL DEFAULT 0,
|
||||
updated_at TEXT NOT NULL DEFAULT (datetime('now'))
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS content_blocks (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
page_slug TEXT NOT NULL REFERENCES pages(slug) ON DELETE CASCADE,
|
||||
block_key TEXT NOT NULL,
|
||||
type TEXT NOT NULL CHECK (type IN ('hero','richtext','testimonial','benefits','cta')),
|
||||
label TEXT NOT NULL,
|
||||
content TEXT NOT NULL DEFAULT '{}',
|
||||
sort_order INTEGER NOT NULL DEFAULT 0,
|
||||
UNIQUE (page_slug, block_key)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS page_translations (
|
||||
page_slug TEXT NOT NULL REFERENCES pages(slug) ON DELETE CASCADE,
|
||||
lang TEXT NOT NULL CHECK (lang IN ('en','de')),
|
||||
meta_title TEXT NOT NULL DEFAULT '',
|
||||
meta_description TEXT NOT NULL DEFAULT '',
|
||||
nav_label TEXT NOT NULL DEFAULT '',
|
||||
PRIMARY KEY (page_slug, lang)
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS block_translations (
|
||||
block_id INTEGER NOT NULL REFERENCES content_blocks(id) ON DELETE CASCADE,
|
||||
lang TEXT NOT NULL CHECK (lang IN ('en','de')),
|
||||
content TEXT NOT NULL DEFAULT '{}',
|
||||
PRIMARY KEY (block_id, lang)
|
||||
);
|
||||
`);
|
||||
}
|
||||
|
||||
function addColumnIfMissing(db: DatabaseSync, table: string, column: string, definition: string) {
|
||||
|
||||
Reference in New Issue
Block a user