NCA Social Media
Erstellt:
Aktualisiert:
Autor:
Roland Golla
Grünes Ausstellungsschild Media Credits mit gerahmten Bildern

Was ist das Sulu Media Credits Bundle?

Das Sulu Media Credits Bundle sammelt die Bildnachweise aller Medien, die auf der aktuellen Seite verwendet werden, und gibt sie gebündelt an einer Stelle aus. Es liest Credit und Copyright aus den Metadaten der Media Library und findet über das Reference Bundle heraus, wo ein Medium überhaupt eingebunden ist.

Hinter dem Bundle steht die PERSPEQTIVE GmbH, Maintainer ist Markus Holstein. Es steht unter MIT Lizenz, wird in der Liste der Friends of Sulu Community Bundles geführt und ist kein offizielles Bundle des Sulu Cores. Die aktuelle Version 0.9.0 erschien am 4. Mai 2026 und setzt PHP 8.3 sowie Sulu 2.6 voraus.

Der Funktionsumfang in Kurzform:

  • Automatische Erkennung: Medienreferenzen werden über verschiedene Inhaltstypen hinweg gefunden.
  • Zentrale Ausgabe: alle Nachweise der aktuellen Seite an einer Stelle, etwa im Footer.
  • Metadaten: Credit und Copyright kommen direkt aus dem Medium.
  • Rückverlinkung: Links auf die Seiten, auf denen ein Bild genutzt wird.
  • Erweiterbar: eigene Inhaltstypen lassen sich über zwei Interfaces anbinden.
Inhalt

Media Credits mit NCA: Schnelle Hilfe vom Experten

NCA arbeitet seit Jahren produktiv mit Sulu. Diese Website läuft selbst darauf, inklusive Media Library, Referenzen und eigener Blöcke. Wir kennen das Zusammenspiel aus PHPCR Inhalten, Doctrine Entities und Twig Templates aus der täglichen Arbeit und können einschätzen, wann ein Community Bundle Zeit spart und wann eine schlanke eigene Lösung im Projekt die bessere Wahl ist.

Wir unterstützen beim PHP Consulting rund um Sulu, bei der Integration von Community Bundles und bei der Absicherung über eine CI/CD Pipeline mit automatisierten Tests. Grundlagen vermitteln wir in der Sulu CMS PHP Schulung, und das gesamte NCA Glossar für Sulu CMS ordnet die wichtigsten Bundles ein, etwa das Sulu Community Bundle und das Sulu Comment Bundle.

Lass uns über dein Sulu Projekt sprechen
Finde das passende Angebot für dein Projekt
Anfrage-Konfiguration
Starten Sie Ihre Anfrage
Projektart
Infos
Nachricht

Eliminierung technischer Schulden mit PHPStan, Rector PHP und PHPUnit. Über 20 Jahre Praxiserfahrung in skalierbaren Backends.

CORE EXPERTISE

Gesetzliche Konformität & Inklusion. Optimierung von Performance und Conversion durch radikal nutzerzentriertes, universelles Design.

BFSG COMPLIANT

Skalierbare KI-Systeme mit echtem Code Ownership. CI/CD, Backup-Strategien und Infrastruktur, die mit deinem Team wächst.

ENTERPRISE READY

Wie das Bundle an die Daten kommt

Die Grundlage liefert das Reference Bundle. Seit Sulu 2.6 gehört es zum Core und speichert automatisch, wo und wie Entitäten im System verwendet werden. Medien und Snippets bekamen damals einen eigenen Reiter für Referenzen in der Detailansicht.

Das Media Credits Bundle setzt genau dort an. Es fragt für die aktuell aufgerufene Seite ab, welche Medien verlinkt sind, holt Credit und Copyright aus den Metadaten dazu und bündelt alles in einer Collection. Beim Durchlaufen der Referenzen arbeitet es mit Generatoren, um den Speicherverbrauch klein zu halten.

Drei Dinge laufen damit zusammen: die Erkennung über verschiedene Inhaltstypen, die zentrale Ausgabe an einer Stelle der Seite und die Rückverlinkung auf die Seiten, die ein Bild nutzen. Erweiterbar ist das Ganze über zwei Interfaces, die weiter unten im Detail stehen.

Installation und Aktivierung

Die Installation läuft über Composer. Das Paket ist als Typ sulu-bundle registriert und steht unter MIT Lizenz. Vorausgesetzt werden PHP 8.3 und Sulu 2.6.

Code:
          

composer require perspeqtive/sulu-media-credits-bundle

Mit Symfony Flex ist die Registrierung erledigt. Ohne Flex trägst du das Bundle manuell in die config/bundles.php ein.

Code:
          

return [
    // ...
    PERSPEQTIVE\MediaCreditsBundle\MediaCreditsBundle::class => ['all' => true],
];

Danach steht die Twig Function im Frontend zur Verfügung. Mehr Konfiguration braucht es für den Standardfall nicht. Was jetzt noch fehlt, sind gepflegte Metadaten an den Medien, sonst bleibt die Ausgabe leer.

Bildnachweise im Template ausgeben

Das Bundle stellt eine Twig Function bereit. media_credits liefert eine CreditsCollection, über die du iterierst. Mit hasCredits prüfst du vorher, ob überhaupt etwas vorliegt, und gibst den Abschnitt sonst gar nicht aus.

Code:
          

{% set credits = media_credits() %}
{% if credits.hasCredits %}
  <ul class="media-credits">
  {% for item in credits %}
    <li>
      {{ item.title }}
      {% if item.credit %} - {{ item.credit }}{% endif %}
    </li>
  {% endfor %}
  </ul>
{% endif %}

Jeder Eintrag bringt neben Titel, Credit und Copyright eine Collection mit Referenzen mit. Darüber gibst du aus, auf welchen Seiten ein Bild verwendet wird, inklusive Titel und URL der jeweiligen Seite. Das macht aus einer reinen Nachweisliste eine nachvollziehbare Übersicht.

Datenstruktur der Credits Objekte

Feld Typ Inhalt
mediaId int ID des Mediums in der Media Library
title string Titel des Mediums aus den Metadaten
copyright string Copyright Feld aus den Metadaten
credit string Credit Feld aus den Metadaten
references MediaReferenceCollection Seiten, auf denen das Medium verlinkt ist

Die Grenzen des Bundles kennen

Eine Einschränkung steht im Repository klar dokumentiert: Für die Rückverlinkung werden nur Bilder berücksichtigt, die direkt in Page Types verwendet werden. Kommen die Medien aus Snippets oder aus eigenen Entities, bleibt die Referenzliste leer.

Credit und Copyright stehen trotzdem bereit. Das heißt praktisch: Der Nachweis selbst funktioniert, nur der Link auf die nutzende Seite fehlt. Für ein Impressum mit reiner Nachweisliste reicht das. Wer die Referenzen zeigen will, muss nachrüsten.

Zwei weitere Punkte gehören in die Bewertung. Die Versionsnummer 0.9.0 steht vor dem ersten stabilen Release, die API kann sich also noch bewegen. Und die Composer Anforderung zeigt auf Sulu 2.6, nicht auf 3.0. Vor einem Major Upgrade lohnt der Blick ins Repository, ob das Bundle nachgezogen hat.

Eigene Inhaltstypen anbinden

Für Snippets und eigene Entities lässt sich die Erkennung nachrüsten. Dafür gibt es zwei Interfaces: eines findet die Referenzen zu einer Media ID, das andere baut die URL zum gefundenen Ziel. Das erste liefert Arrays mit referenceResourceId, referenceResourceKey, referenceTitle und referenceLocale.

Code:
          

namespace App\Repository;

use PERSPEQTIVE\MediaCreditsBundle\Domain\References\ReferenceByTypeRepositoryInterface;

class ProductReferenceRepository implements ReferenceByTypeRepositoryInterface
{
    public function findReferences(string $mediaId): iterable
    {
        yield [
            'referenceResourceId' => '123',
            'referenceResourceKey' => 'product',
            'referenceTitle' => 'Produktname',
            'referenceLocale' => 'de',
        ];
    }
}

Das zweite Interface entscheidet per isResponsible, ob es für einen Ressourcentyp zuständig ist, und liefert in find die passende URL. So bleibt pro Inhaltstyp eine kleine Klasse statt einer wachsenden Fallunterscheidung im Template.

Code:
          

namespace App\Repository;

use PERSPEQTIVE\MediaCreditsBundle\Domain\Url\UrlRepositoryByTypeInterface;

class ProductUrlRepository implements UrlRepositoryByTypeInterface
{
    public function find(string $id, string $locale): ?string
    {
        return '/' . $locale . '/produkte/' . $id;
    }

    public function isResponsible(string $type): bool
    {
        return 'product' === $type;
    }
}

Eingesammelt werden beide über Tagged Iterators. Läuft das Projekt mit autoconfigure, registrieren sich die Services von selbst, weil das Bundle die Interfaces für die Autokonfiguration anmeldet. Ohne autoconfigure setzt du die Tags von Hand.

Code:
          

services:
    App\Repository\ProductReferenceRepository:
        tags:
           - { name: 'perspeqtive.media_credits.reference_finder_repository' }

    App\Repository\ProductUrlRepository:
        tags:
           - { name: 'perspeqtive.media_credits.url_repository' }

Warum Bildnachweise mehr sind als Pflichtprogramm

Viele Bildlizenzen verlangen eine Namensnennung. Agenturbilder, Stockfotos, Creative Commons Material: Fast überall steht in den Bedingungen, wie der Urheber genannt werden muss. In der Praxis scheitert das selten am Willen, sondern daran, dass niemand mehr weiß, welches Bild aus welcher Quelle stammt und wo es inzwischen überall eingebunden ist.

Genau diese Lücke schließt das Bundle. Die Information wandert einmal beim Upload in die Metadaten und bleibt dort, auch wenn das Bild später auf drei weiteren Seiten landet. Statt einer gepflegten Liste im Impressum, die beim nächsten Relaunch veraltet, entsteht die Ausgabe aus dem tatsächlichen Stand der Inhalte.

Ein Nachweis ersetzt dabei keinen Alternativtext. Der Credit beantwortet die Frage nach der Herkunft, der Alt Text beschreibt, was auf dem Bild zu sehen ist. Beide Felder gehören zur sauberen Pflege eines Mediums, und beide sollten im Redaktionsprozess verankert sein statt in einer Nacharbeit kurz vor dem Launch.

Display media credits for your images.

SuluMediaCreditsBundle, Open Source Bundle der PERSPEQTIVE GmbH – Projektbeschreibung auf GitHub

Erfahrung aus dem eigenen Sulu Betrieb

nevercodealone.de läuft selbst auf Sulu. Jedes Bild in diesem Glossar liegt in der Media Library, bekommt beim Upload Titel und Alternativtext und wird über die Blöcke der Seite eingebunden. Genau dieser Alltag entscheidet, ob ein Bundle wie Media Credits nützlich ist oder nur eine weitere Abhängigkeit im Composer.

Wir ordnen Community Bundles ein, bevor sie in ein Kundenprojekt wandern: Wer pflegt das Repository, wie sieht die Testabdeckung aus, was passiert beim nächsten Sulu Major. Dazu kommt die Frage, ob eine eigene Implementierung im Projekt am Ende weniger kostet als die Anpassung eines fremden Bundles.

Weiterführend im NCA Glossar: das Sulu Headless Bundle für API First Projekte, das Sulu Form Bundle für Formulare und das Sulu Automation Bundle für geplantes Publishing. Zur Bildqualität passen der Alternativtext und die Textalternativen für Nicht Text Inhalte.

CYPRESS.IO Ambassador und IT Consultant für QA Engenieering und Qualität in PHP Projekten.
Erreichen Sie unsere PHP Consultant Spezialisten

Wir sind Experten für PHP und helfen Ihnen, Ihre digitalen Herausforderungen zu meistern. Unser erfahrenes Team unterstützt Sie bei PHP Updates, PHP Refactoring und berät Sie remote zu allen Fragen rund um PHP. Mit unseren vollautomatischen CI/CD Deployments und einer robusten Docker-Infrastruktur bringen wir Ihre PHP-Projekte auf das nächste Level. Vertrauen Sie auf unsere Expertise für zuverlässige und skalierbare PHP-Lösungen.

Häufige Fragen zum Sulu Media Credits Bundle

Die Fragen, die uns zu Bildnachweisen im Sulu CMS am häufigsten erreichen. Von der Composer Anforderung über die Pflege der Metadaten bis zur Frage, wohin die Nachweise auf der Seite gehören.

Was kostet das Sulu Media Credits Bundle 2026?

Das Bundle ist kostenlos. Es steht unter MIT Lizenz und wird über Composer installiert, es gibt keine Lizenzgebühr und keinen Enterprise Tarif. Aufwand entsteht nur bei der Integration: Metadaten pflegen, Ausgabe ins Template bauen und testen. Wer eigene Entities anbinden will, rechnet zusätzliche Entwicklungszeit für die beiden Repository Interfaces ein.

Welche Sulu Version braucht das Media Credits Bundle 2026?

Die composer.json fordert PHP 8.3 oder neuer und sulu/sulu in Version 2.6. Das ist kein Zufall: Erst seit Sulu 2.6 gehört das Reference Bundle zum Core, und genau darauf setzt die automatische Erkennung auf. Wer noch auf Sulu 2.5 läuft, muss zuerst das Core Update machen.

Ist das Media Credits Bundle 2026 produktionsreif?

Die aktuelle Version ist 0.9.0, veröffentlicht am 4. Mai 2026. Die Nummer steht noch vor 1.0, die API kann sich also ändern. Das Bundle ist in der Friends of Sulu Liste gelistet und bringt Unit Tests mit. Wir empfehlen einen Testlauf im Staging mit echten Inhalten, bevor es in Production geht.

Wie kommen Credit und Copyright 2026 in die Sulu Media Library?

Beide Felder gehören zu den Metadaten eines Mediums und werden in der Media Library gepflegt, pro Sprache. Das Bundle erfindet nichts dazu, es liest nur aus. Bleiben die Felder leer, erscheint das Bild später ohne Nachweis. Die Pflege gehört deshalb in den Redaktionsprozess beim Upload, nicht in eine Aufräumaktion danach.

Funktioniert das Bundle 2026 auch mit Sulu 3.0?

Die Versionsbeschränkung im Composer zeigt auf Sulu 2.6, ein Einsatz unter Sulu 3.0 ist damit nicht vorgesehen. Wer ein Upgrade plant, prüft den aktuellen Stand im Repository, bevor er sich auf das Bundle verlässt. Bei Community Bundles lohnt sich dieser Blick generell vor jedem Major Upgrade.

Welche Twig Function liefert die Bildnachweise?

Die Function media_credits gibt eine CreditsCollection zurück, über die sich im Template iterieren lässt. Mit der Eigenschaft hasCredits prüfst du vorher, ob überhaupt Nachweise vorliegen, und gibst den Abschnitt nur dann aus. Jeder Eintrag liefert mediaId, title, copyright, credit und eine Collection mit den Referenzen.

Warum fehlen Referenzen bei Bildern aus Snippets?

Für die Rückverlinkung berücksichtigt das Bundle nur Bilder, die direkt in Page Types verwendet werden. Kommen Medien aus Snippets oder eigenen Entities, fehlt der Link auf die nutzende Seite. Credit und Copyright stehen trotzdem zur Verfügung. Wer die Referenzen braucht, bindet den eigenen Inhaltstyp über die beiden Repository Interfaces an.

Wie binde ich eigene Entities an das Bundle an?

Du implementierst ReferenceByTypeRepositoryInterface für das Finden der Referenzen und UrlRepositoryByTypeInterface für die passende URL. Das Bundle sammelt beide über Tagged Iterators ein. Mit autoconfigure registrieren sich die Services von selbst, sonst setzt du die Tags in der services.yaml manuell. Das ist normales Symfony Handwerk ohne Sonderwege.

Wo gehören Bildnachweise auf der Website hin?

Üblich sind zwei Varianten: ein Bereich im Impressum mit allen Nachweisen oder ein Block im Footer der jeweiligen Seite. Das Bundle unterstützt beides, weil es die Credits der aktuell aufgerufenen Seite liefert. Für eine zentrale Nachweisseite brauchst du eine eigene Sammlung über alle Inhalte, das ist zusätzliche Arbeit.

Belastet das Bundle die Performance der Seite?

Das Bundle nutzt Generatoren, um den Speicherverbrauch beim Durchlaufen der Referenzen klein zu halten. Trotzdem laufen Datenbankabfragen pro Seitenaufruf. Auf stark frequentierten Seiten gehört die Ausgabe hinter einen HTTP Cache, und der Effekt sollte mit echten Lastdaten gemessen werden statt geschätzt zu werden.

Ersetzt ein Bildnachweis den Alternativtext?

Nein, das sind zwei verschiedene Dinge. Der Nachweis klärt die Herkunft und die Lizenz, der Alternativtext beschreibt den Bildinhalt für Menschen, die das Bild nicht sehen. Beide Felder gehören gepflegt. Ein Credit im Alt Attribut ist ein Fehler, weil Screenreader dann die Quelle statt des Inhalts vorlesen.

Wie finde ich Bilder ohne gepflegten Credit?

Seit Sulu 2.6 zeigt jedes Medium in der Detailansicht einen Reiter mit seinen Referenzen. Damit siehst du, wo ein Bild überhaupt genutzt wird. Für die Lücken bei Credit und Copyright lohnt ein kurzes Console Command über die Media Entities, das alle Datensätze ohne gefüllte Felder auflistet.