Themes

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

  1. Theme-Ordner nach bl-themes/ kopieren.
  2. Im Adminbereich unter Themes aktivieren.
  3. Startseite, Beitrag, statische Seite, Kategorie und Tag öffnen.
  4. Pagebreak prüfen.
  5. Ein Plugin aktivieren, das siteHead oder siteBodyEnd nutzt, und kontrollieren, ob es ausgeführt wird.

Quellen und weiterführende Dokumentation