Ein Bludit-Theme von Null bauen: vollständiges Tutorial mit Blogansicht und Hooks
Von metadata.json über index.php bis Pagebreak, CSS und Plugin-Hooks: ein komplettes minimales Theme.
Ein Bludit-Theme kann erstaunlich klein anfangen: ein Ordner, eine index.php, Metadaten und Sprachdaten. In diesem Tutorial entsteht daraus ein vollständiges, aber bewusst minimalistisches Blog-Theme mit Startseite, Einzelansicht, CSS, Pagebreak und Plugin-Hooks.
Das fertige Beispiel liegt in diesem Projekt außerdem als praxis-minimal-theme-1.0.0.zip bereit.
1. Verzeichnis anlegen
bl-themes/praxis-minimal/
├── index.php
├── metadata.json
├── languages/
│ ├── de_DE.json
│ └── en.json
└── css/
└── style.css
2. metadata.json
{
"author": "Dein Name",
"version": "1.0.0",
"releaseDate": "2026-09-18",
"license": "MIT",
"compatible": "3.22",
"notes": "Mein erstes Theme"
}
3. Sprachdatei
{
"theme-data": {
"name": "Praxis Minimal",
"description": "Ein minimales Bludit-Blogtheme."
}
}
4. Die index.php
<?php defined('BLUDIT') or die('Bludit CMS.'); ?>
<!doctype html>
<html lang="<?php echo Theme::lang(); ?>">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<?php echo Theme::metaTagTitle(); ?>
<?php echo Theme::css('css/style.css'); ?>
<?php Theme::plugins('siteHead'); ?>
</head>
<body>
<?php Theme::plugins('siteBodyBegin'); ?>
<header>
<a href="<?php echo Theme::siteUrl(); ?>"><?php echo $site->title(); ?></a>
<p><?php echo $site->slogan(); ?></p>
</header>
<main>
<?php if ($WHERE_AM_I === 'page'): ?>
<article>
<h1><?php echo $page->title(); ?></h1>
<?php echo $page->content(); ?>
</article>
<?php else: ?>
<?php foreach ($content as $page): ?>
<article>
<h2><a href="<?php echo $page->permalink(); ?>"><?php echo $page->title(); ?></a></h2>
<?php echo $page->contentBreak(); ?>
<a href="<?php echo $page->permalink(); ?>">Weiterlesen</a>
</article>
<?php endforeach; ?>
<?php endif; ?>
</main>
<?php Theme::plugins('siteBodyEnd'); ?>
</body>
</html>
5. Warum contentBreak() wichtig ist
Auf Listenansichten solltest du bei Blogposts contentBreak() benutzen. Dadurch respektiert das Theme Bludits <!-- pagebreak -->. Auf der Einzelansicht liefert content() den vollständigen Beitrag.
6. Plugin-Hooks nicht vergessen
Ein Theme, das Theme::plugins('siteHead'), siteBodyBegin und siteBodyEnd nicht aufruft, kann Plugins faktisch aussperren. Auch pageBegin und pageEnd sind für Erweiterungen rund um Beiträge nützlich.
7. Aktivieren und testen
- Theme-Ordner nach
bl-themes/kopieren. - Im Adminbereich unter Themes aktivieren.
- Startseite, Beitrag, statische Seite, Kategorie und Tag öffnen.
- Pagebreak prüfen.
- Ein Plugin aktivieren, das
siteHeadodersiteBodyEndnutzt, und kontrollieren, ob es ausgeführt wird.