Ein AddOn zum Importieren von Medien aus verschiedenen Quellen (Pixabay, Pexels etc.) direkt in den REDAXO Medienpool.
- Bildsuche über verschiedene Provider
- Direkte Suche in Wikimedia Commons (Wikipedia Medien)
- Vorschau der Assets mit Metadaten
- Direkter Import in den Medienpool
- Copyright-Informationen automatisch übernehmen
- Kategoriezuweisung
- 24h API-Cache für bessere Performance
- Erweiterbar durch weitere Provider
- Kostenlose Stock-Fotos und -Videos
- API-Key erforderlich
- Kommerzielle Nutzung möglich
- Hochqualitative Stock-Fotos
- API-Key erforderlich
- Alle Bilder kostenlos nutzbar
- Freie Medien der Wikipedia-Projekte
- Keine API-Key erforderlich
- Millionen von freien Bildern, SVGs und Dokumenten
- Automatische Copyright- und Lizenz-Übernahme
- Unterstützt JPG, PNG, SVG, WebP und PDF
- Im REDAXO Installer das AddOn
asset_import
herunterladen - Installation durchführen
- Provider konfigurieren unter "Asset Import > Einstellungen"
Wikimedia Commons ist sofort einsatzbereit - kein API-Key erforderlich!
- Gehe zu: Asset Import > Einstellungen > Wikimedia Commons
- Konfiguriere:
- User-Agent:
DeineWebsite.de Import/1.0 ([email protected])
- Copyright-Felder: Wähle das gewünschte Format:
Author + Wikimedia Commons
→ "Max Mustermann / Wikimedia Commons"Only Author
→ "Max Mustermann"License Info
→ "CC BY-SA 4.0"
- Copyright-Info setzen:
Ja
(für automatische Copyright-Übernahme) - Dateitypen:
Images only
oderAll file types
- User-Agent:
- Speichere die Einstellungen
- Fertig! Du kannst sofort loslegen
- Gehe zu: AddOns > Asset Import
- Wähle: Wikimedia Commons
- Suche nach:
cat
oderBerlin
- Klicke auf: "Importieren" bei einem Bild deiner Wahl
- Prüfe: Medienpool - dein Bild ist da mit Copyright-Info! 🎉
Das wars! Kein API-Key, keine komplizierte Einrichtung.
- Erstelle API-Key (siehe Links oben)
- Gehe zu: Asset Import > Einstellungen > Pixabay/Pexels
- Trage API-Key ein und speichere
- Gehe zu: Asset Import und wähle den Provider
- Suche und importiere wie bei Wikimedia
- ✅ Kostenlos: Keine API-Limits oder Kosten
- ✅ Rechtssicher: Alle Medien sind frei nutzbar
- ✅ Vielfältig: Millionen professioneller Bilder und Grafiken
- ✅ Qualität: Oft bessere Qualität als Stock-Foto-Seiten
- ✅ Einzigartig: Historische und wissenschaftliche Inhalte
- Author + Wikimedia Commons:
"Max Mustermann / Wikimedia Commons"
- Only Author:
"Max Mustermann"
- Only Wikimedia Commons:
"Wikimedia Commons"
- License Info:
"CC BY-SA 4.0"
Wikimedia Commons:
- Bilder: JPG, PNG, SVG, WebP
- Dokumente: PDF
Pixabay/Pexels:
- Bilder: JPG, PNG, WebP
- Videos: MP4, WebM (je nach Provider)
Nach dem Import findest du die Copyright-Informationen im Medienpool:
- Gehe zu: Medienpool
- Klicke auf dein importiertes Bild
- Schaue ins Feld "Copyright" (nicht Beschreibung!)
- Wikimedia Commons: Nein, nur Bilder und PDFs
- Pixabay/Pexels: Ja, Videos werden unterstützt
Für Pixabay und Pexels benötigst du einen kostenlosen API-Key:
Das AddOn bringt eine eigene Berechtigung mit:
asset_import[]
- Berechtigt zum Zugriff auf das gesamte Asset Import AddOn
Diese Berechtigung kann in der Benutzerverwaltung (System > Benutzer) einzelnen Benutzern oder Rollen zugewiesen werden. Ohne diese Berechtigung ist das AddOn für den Benutzer nicht sichtbar.
Die Einstellungsseite erfordert zusätzlich Administratorrechte (admin[]
).
Provider können in der boot.php eines anderen AddOns registriert werden:
// Provider-Klasse implementieren
namespace MyAddon\Provider;
class MyProvider extends \FriendsOfRedaxo\AssetImport\Asset\AbstractProvider
{
// Provider Implementation
}
// Provider im Asset Import registrieren
if (\rex_addon::get('asset_import')->isAvailable()) {
\FriendsOfRedaxo\AssetImport\AssetImporter::registerProvider(MyProvider::class);
}
Ein Provider muss das ProviderInterface implementieren:
public function getName(): string; // Eindeutiger Name
public function getTitle(): string; // Anzeigename
public function getIcon(): string; // FontAwesome Icon
public function isConfigured(): bool; // Prüft Konfiguration
public function getConfigFields(): array; // Konfigurationsfelder
public function search(): array; // Suchmethode
public function import(): bool; // Import Methode
public function getDefaultOptions(): array; // Standard-Optionen
Die abstrakte Klasse AbstractProvider
bietet bereits:
- API Caching (24h)
- Medienpool Import
- Konfigurationsverwaltung
Der Wikimedia Commons Provider ermöglicht den direkten Import von freien Medien aus der größten Sammlung freier Inhalte der Welt. Wikimedia Commons ist die zentrale Mediendatenbank aller Wikipedia-Projekte und enthält Millionen von Bildern, SVGs, Audio- und Videodateien unter freien Lizenzen.
- ✅ Kein API-Key erforderlich - sofort einsatzbereit
- ✅ Millionen freie Medien - Fotos, Grafiken, historische Bilder
- ✅ Automatische Copyright-Übernahme - Autor und Lizenzinfo werden automatisch gesetzt
- ✅ Verschiedene Formate - JPG, PNG, SVG, WebP, PDF
- ✅ Direkte URL-Eingabe - Wikimedia-Links direkt importieren
- ✅ Erweiterte Suche - mit Dateityp-Filtern
- Textsuche: Gib Suchbegriffe ein (z.B. "Berlin", "cat", "nature")
- URL-Import: Kopiere Wikimedia-URLs direkt in das Suchfeld
- Dateityp-Filter: Wähle zwischen "Alle Dateien" oder "Nur Bilder"
- Copyright-Übernahme: Aktiviere die automatische Übernahme von Autoren- und Lizenzinformationen
Alle Dateien auf Wikimedia Commons stehen unter freien Lizenzen:
- Creative Commons (CC BY, CC BY-SA, CC0)
- Public Domain (gemeinfrei)
- GNU Free Documentation License
Das AddOn übernimmt automatisch die korrekte Quellenangabe und Lizenzinformation, um rechtliche Anforderungen zu erfüllen.
- Fotos: Natur, Städte, Architektur, Personen, Tiere
- Historische Bilder: Gemälde, historische Fotos, Karten
- SVG-Grafiken: Logos, Icons, Diagramme, Flaggen
- Dokumente: Bücher, Karten, wissenschaftliche Arbeiten
Wikimedia empfiehlt die Angabe eines User-Agent für bessere API-Performance:
Format: [Website/Projekt] [Tool]/[Version] ([Kontakt-Email])
Beispiele:
MeineWebsite.de AssetImport/1.0 ([email protected])
Firma-XY REDAXO-Import/1.0 ([email protected])
MyProject.com MediaBot/1.0 ([email protected])
Der FTP Upload Provider ermöglicht es, Dateien aus einem definierten Upload-Verzeichnis in den REDAXO Medienpool zu importieren. Er ist ein gutes Beispiel dafür, wie ein eigener Provider für das Asset Import AddOn implementiert werden kann.
- Durchsucht das
ftpupload
-Verzeichnis im REDAXO-Root rekursiv - Unterstützt Bilder (jpg, jpeg, png, gif, webp) und Videos (mp4, webm)
- Sortiert Dateien nach Änderungsdatum (neueste zuerst)
- Bietet Suche nach Dateinamen
- Paginierte Ergebnisse (20 pro Seite)
- Erstelle Provider-Klasse in deinem AddOn:
// in /redaxo/src/addons/project/lib/Provider/FtpUploadProvider.php
<?php
namespace Project\Provider;
use FriendsOfRedaxo\AssetImport\Asset\AbstractProvider;
use rex_path;
use rex_url;
class FtpUploadProvider extends AbstractProvider
{
public function getName(): string
{
return 'ftpupload';
}
public function getTitle(): string
{
return 'FTP Upload';
}
public function getIcon(): string
{
return 'fa-upload';
}
public function isConfigured(): bool
{
return true;
}
public function getConfigFields(): array
{
return [];
}
public function getDefaultOptions(): array
{
return [
'type' => 'image'
];
}
protected function searchApi(string $query, int $page = 1, array $options = []): array
{
$items = [];
$type = $options['type'] ?? 'image';
$uploadPath = rex_path::base('ftpupload');
if (is_dir($uploadPath)) {
$files = new \RecursiveIteratorIterator(
new \RecursiveDirectoryIterator($uploadPath, \RecursiveDirectoryIterator::SKIP_DOTS),
\RecursiveIteratorIterator::SELF_FIRST
);
foreach ($files as $file) {
if ($file->isFile()) {
$fileType = $this->getFileType($file->getFilename());
// Nur Bilder und Videos berücksichtigen
if ($fileType && ($type === 'all' || $type === $fileType)) {
if (empty($query) || stripos($file->getFilename(), $query) !== false) {
$relativePath = str_replace($uploadPath, '', $file->getPathname());
$relativePath = ltrim($relativePath, '/\\');
$filename = $file->getFilename();
$items[] = [
'id' => md5($relativePath),
'preview_url' => rex_url::base('ftpupload/' . $relativePath),
'title' => $filename,
'author' => 'FTP Upload',
'type' => $fileType,
'size' => [
'original' => ['url' => rex_url::base('ftpupload/' . $relativePath)]
]
];
}
}
}
}
// Sortiere nach Datum absteigend
usort($items, function($a, $b) use ($uploadPath) {
$timeA = filemtime($uploadPath . '/' . $a['title']);
$timeB = filemtime($uploadPath . '/' . $b['title']);
return $timeB - $timeA;
});
// Paginierung
$itemsPerPage = 20;
$offset = ($page - 1) * $itemsPerPage;
$items = array_slice($items, $offset, $itemsPerPage);
}
$total = count($items);
return [
'items' => $items,
'total' => $total,
'page' => $page,
'total_pages' => ceil($total / 20)
];
}
private function getFileType(string $filename): ?string
{
$ext = strtolower(pathinfo($filename, PATHINFO_EXTENSION));
$types = [
'image' => ['jpg', 'jpeg', 'png', 'gif', 'webp'],
'video' => ['mp4', 'webm']
];
foreach ($types as $type => $extensions) {
if (in_array($ext, $extensions)) {
return $type;
}
}
return null;
}
}
- Provider in deinem AddOn registrieren:
// in /redaxo/src/addons/project/boot.php
if (\rex_addon::get('asset_import')->isAvailable()) {
\FriendsOfRedaxo\AssetImport\AssetImporter::registerProvider(\Project\Provider\FtpUploadProvider::class);
}
ftpupload
-Verzeichnis im REDAXO-Root erstellen und Schreibrechte setzen
redaxo/
├── src/
│ └── addons/
│ └── project/
│ ├── lib/
│ │ └── Provider/
│ │ └── FtpUploadProvider.php
│ └── boot.php
└── ftpupload/
├── bilder/
└── videos/
-
Verzeichnis-Scan:
- Durchsucht das
ftpupload
-Verzeichnis rekursiv - Filtert nach unterstützten Dateitypen
- Berücksichtigt nur Bilder und Videos
- Durchsucht das
-
Suche:
- Filtert Dateien nach Suchbegriff im Dateinamen
- Typ-Filter für Bilder oder Videos
-
Sortierung & Paginierung:
- Sortiert nach Änderungsdatum (neueste zuerst)
- 20 Einträge pro Seite
- Unterstützt Blättern durch die Ergebnisse
-
Import:
- Nutzt den Standard-Import des AbstractProvider
- Importiert direkt in den Medienpool
Die Basisklasse, von der alle Provider erben müssen. Stellt grundlegende Funktionalitäten und Schnittstellen bereit.
public function getName(): string
Gibt einen eindeutigen Bezeichner für den Provider zurück.
public function getTitle(): string
Gibt den Anzeigenamen zurück, der in der Benutzeroberfläche angezeigt wird.
public function getIcon(): string
Gibt einen FontAwesome-Icon-Bezeichner zurück (z.B. 'fa-cloud').
public function isConfigured(): bool
Prüft, ob der Provider alle erforderlichen Konfigurationseinstellungen hat.
public function getConfigFields(): array
Gibt Konfigurationsfelder für die Provider-Einstellungsseite zurück. Jedes Feld sollte ein Array mit folgenden Elementen sein:
name
: Feldbezeichnertype
: Eingabetyp ('text', 'password', 'select')label
: Übersetzungsschlüssel für das Labelnotice
: Optionaler Übersetzungsschlüssel für Hilfetextoptions
: Array von Optionen für Select-Felder
public function search(string $query, int $page = 1, array $options = []): array
Führt die Suche durch und gibt Ergebnisse in folgendem Format zurück:
[
'items' => [
[
'id' => string, // Eindeutige ID
'preview_url' => string, // Vorschaubild-URL
'title' => string, // Asset-Titel
'author' => string, // Ersteller/Autor
'type' => string, // 'image' oder 'video'
'size' => [ // Verfügbare Größen
'tiny' => ['url' => string],
'small' => ['url' => string],
'medium' => ['url' => string],
'large' => ['url' => string],
'original' => ['url' => string]
]
]
],
'total' => int, // Gesamtanzahl der Ergebnisse
'page' => int, // Aktuelle Seitennummer
'total_pages' => int // Gesamtanzahl der Seiten
]
public function import(string $url, string $filename): bool
Importiert ein Asset in den REDAXO-Medienpool. Gibt bei Erfolg true zurück.
protected function searchApi(string $query, int $page = 1, array $options = []): array
Implementierung der eigentlichen API-Suche. Muss von Provider-Klassen implementiert werden.
protected function getCacheLifetime(): int
Gibt die Cache-Lebensdauer in Sekunden zurück. Standard: 86400 (24 Stunden)
protected function getDefaultOptions(): array
Gibt Standard-Suchoptionen zurück. Standard: ['type' => 'all']
Statische Klasse zur Verwaltung von Providern.
public static function registerProvider(string $providerClass): void
Registriert eine neue Provider-Klasse.
public static function getProviders(): array
Gibt alle registrierten Provider-Klassen zurück.
public static function getProvider(string $name): ?AbstractProvider
Gibt Provider-Instanz anhand des Namens zurück oder null, wenn nicht gefunden.
Das AddOn verwendet das eingebaute Caching-System von REDAXO, um API-Antworten zu speichern. Cache-Einträge werden in der Tabelle rex_asset_import_cache
gespeichert mit:
provider
: Provider-Bezeichnercache_key
: MD5-Hash der Abfrageparameterresponse
: JSON-kodierte API-Antwortcreated
: Erstellungszeitpunktvalid_until
: Ablaufzeitpunkt
Die Standard-Cache-Lebensdauer beträgt 24 Stunden und kann pro Provider durch Überschreiben von getCacheLifetime()
angepasst werden.
MIT
MIT Lizenz, siehe LICENSE
Friends Of REDAXO
Project Lead