Mastodon-Feed in Kirby 5 einbinden

Wer eine Mastodon-Instanz betreibt und gleichzeitig eine Kirby-Website hat, wird früher oder später auf die Idee kommen, seinen Mastodon-Feed dort einzubinden. Das Plugin scottboms/kirby-mastodon-feed macht das möglich – mit einigen Stolpersteinen, die ich hier dokumentiere.

Plugin installieren

Das Plugin ist nicht auf Packagist, also kein composer require. Stattdessen per Git:

cd /var/www/kirby/site/plugins
sudo -u www-data git clone https://github.com/scottboms/kirby-mastodon-feed.git mastodon-feed

Konfiguration

In site/config/config.php müssen zwei Blöcke eingetragen werden. Wichtig: Es gibt bereits einen cache-Block in der Standardkonfiguration – den nicht ersetzen, sondern erweitern:

'cache' => [
  'pages' => [
    'active' => false,
    'ignore' => ['search']
  ],
  'scottboms.mastodon' => [
    'type' => 'file',
  ]
],
'scottboms.mastodon' => [
  'username'       => 'deinusername',
  'server'         => 'deine-instanz.social',
  'dateformat'     => 'd.m.Y',
  'cache'          => true,
  'cachettl'       => 900,
  'excludereplies' => true,
  'limit'          => 20,
],

Stolperstein 1: Die Dokumentation nennt instance als Schlüssel, das Plugin erwartet aber server. Mit instance startet der Feed nicht und wirft eine Exception.

Stolperstein 2: Der cache-Block muss innerhalb des bestehenden cache-Arrays ergänzt werden, nicht als separater Block. Zwei cache-Einträge in der Config führen dazu dass einer ignoriert wird.

Seite anlegen

Für eine eigene Mastodon-Seite zunächst das Blueprint anlegen:

# site/blueprints/pages/mastodon.yml
title: Mastodon Feed
icon: 🐘

Dann den Controller:

# site/controllers/mastodon.php
<?php
return function ($page) {
  $title       = $page->title();
  $description = $page->description();
  $cover       = $page->cover()->toFile();
  return compact('title', 'description', 'cover');
};

Stolperstein 3: Das Zoon-Theme-Layout layouts/default erwartet zwingend die Variablen $title, $description und $cover. Fehlt eine davon, bricht die Seite mit einem 500-Fehler ab. Die Fehlermeldung im nginx-Log ist eindeutig, aber nur mit sudo tail -30 /var/log/nginx/error.log sichtbar.

Dann das Template:

# site/templates/mastodon.php
<?php snippet('layouts/default', slots: true) ?>
<?php slot() ?>
<main id="main" class="main">
  <article class="page base-grid" style="--column-repeat:12">
    <div class="base-grid-column crumbs-column" style="--column:3/10">
      <?php snippet('breadcrumbs') ?>
    </div>
    <div class="base-grid-column content-column" style="--column:3/10;">
      <h1><?= $page->title() ?></h1>
      <?= snippet('mastodon_feed') ?>
    </div>
  </article>
</main>
<?php endslot() ?>

Seite im Panel anlegen

Stolperstein 4: Wer die Inhaltsseite manuell per Kommandozeile anlegt, bekommt Probleme mit dem Status-Management (kein Draft möglich, roter Kreis im Panel). Besser: Das Template mastodon in site.yml bei den erlaubten Templates für Drafts und Sections eintragen, dann die Seite sauber über das Panel anlegen.

In site/blueprints/site.yml unter drafts und first_level jeweils - mastodon ergänzen.

Snippet anpassen

Das mitgelieferte Standard-Snippet funktioniert, ist aber vollständig unstyled. Ein eigenes Snippet legt man unter site/snippets/mastodon_feed.php ab – Kirby bevorzugt automatisch die eigene Version gegenüber der Plugin-Version.

Für eine vernünftige Darstellung im Layout benötigt das Snippet CSS. Da der oEmbed-iframe vom YouTube-Plugin feste width- und height-Attribute bekommt, muss CSS mit !important arbeiten:

.embed-wrapper iframe {
  width: 100% !important;
  height: auto !important;
  aspect-ratio: 16/9;
}

Bekannte Einschränkungen

Die Mastodon API liefert keine Link-Vorschaubilder (OpenGraph Cards). Wer das möchte, müsste für jeden Link eine separate OpenGraph-Abfrage implementieren – das ist deutlich aufwändiger und nicht Teil dieses Plugins.

Boosts lassen sich per Konfiguration nicht ausblenden, nur über eine Anpassung des Snippets.

Fazit

Das Plugin ist solide und wird aktiv gepflegt. Die Einrichtung ist in etwa einer Stunde erledigt, wenn man die oben genannten Stolpersteine kennt. Das Ergebnis ist ein sauberer, gecachter Mastodon-Feed direkt auf der eigenen Website – ohne externe Einbettung und ohne Abhängigkeit von Drittdiensten.


Share