Search by

srhinow / download-bundle

srhinow

this extension manage download-list

Package info

gitlab.com/srhinow/download-bundle

Issues

Type:contao-bundle

pkg:composer/srhinow/download-bundle

Statistics

Installs: 224

Dependents: 0

Suggesters: 0

Stars: 0

2.3.1 2026-10-09 16:18 UTC

README

Contao-Bundle zur zentralen Verwaltung von Downloads mit hierarchischen Kategorien im Backend und vielfältiger Ausgabe im Frontend. Unterstützt Dateianhänge, Vorschaubilder, Tags (srhinow/contao-tags), Volltextsuche, Kategorie-Filter und einen konfigurierbaren Detailseitenlink.

Anforderungen

AbhängigkeitVersion
PHP≥ 8.3
Contao Core Bundle^5.3
srhinow/contao-tags^5.0.6
symfony/form^7.2
ext-json*

Installation

composer require srhinow/download-bundle

Nach der Installation die Datenbank-Migration ausführen:

php bin/console contao:migrate

Backend

Das Bundle fügt unter Inhalte → Downloads (do=downloads) ein Backend-Modul hinzu. Über die globale Operation „Download-Kategorien" gelangt man zur Kategorieverwaltung.

Download-Kategorien (tl_download_categories)

Hierarchische Kategorieverwaltung (Baumstruktur via pid, bis zu 3 Ebenen tief, Sortierung per Drag & Drop).

FeldBeschreibung
NameBezeichnung der Kategorie (Pflichtfeld, max. 255 Zeichen)
AliasURL-freundlicher Bezeichner (automatisch generiert)
Sortierung (sorting)Numerische Sortierreihenfolge

Downloads (tl_downloads)

Hauptverwaltung aller Download-Einträge.

FeldBeschreibung
NameBezeichnung des Downloads (Pflichtfeld, max. 255 Zeichen)
AliasURL-Alias (automatisch generiert, alphanumerisch + Underscore)
KategorieZugeordnete Kategorien (Mehrfachauswahl, Pflichtfeld)
DateiDatei aus der Contao-Dateiverwaltung (Pflichtfeld, Radio-Auswahl)
Bild hinzufügen (addImage)Checkbox: Klappt das Feld „Vorschaubild" auf
Vorschaubild (singleSRC)Optionales Vorschaubild (sichtbar im Backend-Listing als 100×100px-Thumbnail)
TagsTag-Auswahl via srhinow/contao-tags
TextBeschreibungstext (TinyMCE-Editor)
Direkt-Link (direct_link)Checkbox: Link führt direkt zur Datei statt zur Detailseite
Sortierung (sorting)Manuelle numerische Sortierung
Seiten-Titel (pageTitle)SEO-Seitentitel für die Detailansicht
Beschreibung (description)SEO-Meta-Beschreibung
Online sichtbar (published)Veröffentlichungs-Flag

Frontend-Module

Das Bundle registriert vier Frontend-Module in der Gruppe „Downloads":

download_list — Download-Liste

Zeigt veröffentlichte Downloads als gefilterte, durchsuchbare und paginierte Liste.

FeldBeschreibung
Sprungseite (jumpTo)Seite mit dem download_details-Modul für den Detailseitenlink
Dezimalstellen Dateigröße (download_size_decimal)Anzahl der Nachkommastellen bei der Dateigrößenangabe (Standard: 1)
Download-TemplateItem-Template für jeden Listeneintrag (alle Templates mit Präfix download_item_)

download_details — Download-Detailansicht

Zeigt alle Felder eines einzelnen Downloads. Liest den Download-Alias aus der URL.

FeldBeschreibung
Download-TemplateItem-Template für die Detailausgabe

download_search — Download-Suche

Ergebnisanzeige für das Filterformular — hat kein eigenes Formular. Liest category, tag und search aus der URL bzw. dem POST des download_filter-Moduls und zeigt die Treffer nach Kategorien gruppiert. Ohne Parameter erscheint nur ein Hinweistext.

Zum Unterschied zu download_list siehe Liste oder Suche?.

FeldBeschreibung
Download-TemplateItem-Template für die Suchergebnis-Ausgabe

download_filter — Download-Filter

Filterformular für die Download-Liste mit drei Feldern:

  • Kategorie — die Kategorien, die die Liste auf dieser Seite als Abschnitte zeigt (Seiteneinstellung „Download-Kategorien“, sonst alle)
  • Tag — nur sichtbar, wenn Downloads Tags haben (eingeschränkt über die Seiteneinstellung „Download-Tags“)
  • Suche — Volltext in Name und Beschreibung

Ohne Sprungseite filtert das Modul die Download-Listen auf derselben Seite per AJAX – sowohl das Modul als auch das Inhaltselement „Download-Liste“; jQuery wird dafür nicht benötigt. Mit Sprungseite wird das Formular dorthin abgeschickt. Die Liste liest die Parameter category, tag und search auch direkt aus der URL.

FeldBeschreibung
Sprungseite (jumpTo)Seite mit der gefilterten Download-Liste

Liste oder Suche?

download_list und download_search zeigen beide gefilterte Downloads, sind aber für unterschiedliche Seiten gedacht:

download_listdownload_search
Ohne Filterzeigt alle Downloadszeigt nichts, nur einen Hinweistext
Welche Downloadsnur die Kategorien aus der Seiteneinstellung „Download-Kategorien“ (sonst alle)alle veröffentlichten Downloads, unabhängig von der Seite
Gliederungnach den Kategorien der Seite, mit dritter Ebenenach den Kategorien jedes Treffers, als Pfad „Ober- / Unterkategorie“
SucheSuchtext muss als Ganzes vorkommenjedes Wort einzeln, ein Treffer genügt
Aktualisierungper AJAX beim Ändern des Filtersbeim Seitenaufruf (Formular abgeschickt oder Parameter in der URL)

Kurz: Die Liste ist eine durchstöberbare Übersicht, die sich eingrenzen lässt. Die Suche ist eine Trefferliste für eine eigene Ergebnisseite.

Typische Aufbauten:

  • Eine Downloadseite mit Filter: download_filter ohne Sprungseite und download_list auf derselben Seite. Der Filter aktualisiert die Liste per AJAX. Ein zusätzliches download_search-Modul auf dieser Seite würde die Treffer doppelt zeigen.
  • Eigene Ergebnisseite: download_filter mit Sprungseite (z. B. als Suchfeld im Seitenkopf) und auf der Zielseite download_search.

Insert-Tags

Insert-TagBeschreibung
{{download::search}}Aktueller Suchwert aus dem POST-Request (Suchformular)
{{download::tag}}Aktuell gesetzter Tag-Filter aus dem POST-Request

Suchindex

Der getSearchablePages-Hook (GetSearchablePagesListener) fügt alle veröffentlichten Downloads dem Contao-Suchindex hinzu, sofern ein download_details-Modul mit einer konfigurierten Sprungseite (jumpTo) vorhanden ist.

parseDownload-Hook

Nach dem Aufbereiten eines Download-Datensatzes feuert der parseDownload-Hook und erlaubt projektspezifische Nachbearbeitung:

$GLOBALS['TL_HOOKS']['parseDownload'][] = [MyClass::class, 'myMethod'];

Datenbankstruktur

tl_download_categories

SpalteTypBeschreibung
idint(10) unsigned PK AIPrimärschlüssel
pidint(10) unsignedElternkategorie (0 = Root)
sortingint(10) unsignedSortierung
tstampint(10) unsignedZeitstempel letzte Änderung
modifyint(10) unsignedReservierter Änderungstimestamp
namevarchar(255)Kategoriename
aliasvarchar(128)URL-Alias

tl_downloads

SpalteTypBeschreibung
idint(10) unsigned PK AIPrimärschlüssel
tstampint(10) unsignedZeitstempel letzte Änderung
modifyint(10) unsignedReservierter Änderungstimestamp
sortingint(10) unsignedSortierung
namevarchar(255)Download-Bezeichnung
aliasvarchar(128)URL-Alias
categoryblob NULLZugeordnete Kategorien (serialisiert)
filebinary(16) NULLDatei-UUID aus tl_files
dl_urlvarchar(255)Optionale externe Datei-URL
tagschar(1)Tag-Zuordnung (via contao-tags)
texttext NULLBeschreibungstext (HTML)
direct_linkchar(1)Direkt-Link zur Datei
addImagechar(1)Vorschaubild aktiv
singleSRCbinary(16) NULLVorschaubild-UUID aus tl_files
publishedbooleanVeröffentlicht
pageTitlevarchar(255)SEO-Seitentitel
descriptiontext NULLSEO-Meta-Beschreibung

Templates anpassen

Eigene Item-Templates müssen mit dem Präfix download_item_ beginnen, damit sie im Backend-Dropdown erscheinen. Beispiel: download_item_card.html.twig.

Tests ausführen

vendor/bin/phpunit -c vendor/srhinow/download-bundle/phpunit.xml.dist

Changelog

Siehe CHANGELOG.md für die vollständige Versionshistorie.

Lizenz

LGPL-3.0-or-later

Autor

Sven Rhinow — sr-tag.de
Support: kservice@sr-tag.de
Quellcode: gitlab.com/srhinow/download-bundle