Eine Hilfsklasse für REDAXO, um Media Manager Typen und Effekte einfach in AddOns zu verwalten.
- Einfaches Anlegen und Verwalten von Media Manager Typen
- Automatisches Update bestehender Typen
- Validierung von Effekten und Parametern
- Debug-Möglichkeiten für verfügbare Effekte
- Import/Export von Medientypen als JSON
- Automatische Bereinigung bei AddOn-Deinstallation
// Media Typ anlegen
$sql = rex_sql::factory();
$sql->setTable(rex::getTable('media_manager_type'));
$sql->setValue('name', 'mein_typ');
$sql->setValue('description', 'Mein Typ');
$sql->addGlobalCreateFields();
$sql->insert();
$typeId = $sql->getLastId();
// Effekt hinzufügen
$sql->setTable(rex::getTable('media_manager_type_effect'));
$sql->setValue('type_id', $typeId);
$sql->setValue('effect', 'resize');
$sql->setValue('parameters', json_encode([
'rex_effect_resize' => [
'width' => 500,
'height' => 500
]
]));
$sql->setValue('priority', 1);
$sql->addGlobalCreateFields();
$sql->insert();
$mm = MediaManagerHelper::factory();
$mm->addType('mein_typ', 'Mein Typ')
->addEffect('mein_typ', 'resize', [
'width' => 500,
'height' => 500
])
->install();
- Parameter für Effekte anzeigen:
$mm->showEffectParams('resize')
- Typen exportieren/importieren:
$mm->exportToJson(['mein_typ'])
- Automatische Validierung aller Parameter
- Automatisches Update bestehender Typen
- Mehrern Typen oder allen einen Effekt hinzufügen am Anfang oder am Ende
Der Helper macht's einfach, sicher und wartbar. 🚀
$mm = MediaManagerHelper::factory();
// Einfachen Thumbnail erstellen
$mm->addType('mein_thumb', 'Thumbnail für mein AddOn')
->addEffect('mein_thumb', 'resize', [
'width' => 500,
'height' => 500
])
->install();
$mm = MediaManagerHelper::factory();
$mm->addType('mein_thumb')->uninstall();
$mm = MediaManagerHelper::factory();
$mm->addType('quadrat_fokus', 'Quadratisches Bild mit Fokuspunkt')
// Zuerst auf max 2000px bringen
->addEffect('quadrat_fokus', 'resize', [
'width' => 2000,
'height' => 2000,
'style' => 'maximum',
'allow_enlarge' => 'not_enlarge'
], 1)
// Dann quadratisch zuschneiden mit Fokuspunkt
->addEffect('quadrat_fokus', 'focuspoint_fit', [
'width' => '1fr',
'height' => '1fr',
'zoom' => '0',
'meta' => 'med_focuspoint',
'focus' => '50.0,50.0' // Fallback Fokuspunkt in der Mitte (x,y)
], 2)
->install();
$mm = MediaManagerHelper::factory();
// Alle Custom-Typen exportieren (ohne System-Typen)
$json = $mm->exportToJson();
// Nur bestimmte Typen exportieren
$json = $mm->exportToJson(['mein_typ', 'mein_anderer_typ']);
// Direkt in Datei speichern
$mm->exportToJson(
['mein_typ'], // typen
'media_types.json', // datei
true, // pretty print
false // keine system typen
);
// Alternative Methode für Datei-Export
$success = $mm->exportToFile(
'media_types.json',
['mein_typ']
);
// In der install.php:
$mm = MediaManagerHelper::factory();
// Typen aus JSON-Datei importieren und installieren
$mm->importFromJson($this->getPath('media_types.json'))
->install();
Beispiel JSON-Datei (media_types.json
):
[
{
"name": "mein_typ",
"description": "Mein Media Manager Typ",
"effects": {
"1": {
"effect": "resize",
"params": {
"rex_effect_resize": {
"width": 800,
"height": 600,
"style": "maximum",
"allow_enlarge": "not_enlarge"
}
}
}
}
}
]
// Parameter eines Effekts anzeigen
$mm = MediaManagerHelper::factory();
$mm->showEffectParams('focuspoint_fit');
/* Ausgabe:
array:3 [
"name" => "focuspoint_fit"
"class" => "rex_effect_focuspoint_fit"
"params" => array:5 [
"meta" => array:4 [
"type" => "select"
"default" => "med_focuspoint"
"options" => array:2 [
12 => "med_focuspoint"
13 => "default => Koordinate / Ersatzwert"
]
"notice" => null
]
"focus" => array:4 [
"type" => "string"
"default" => null
"options" => null
"notice" => "x,y: 0.0,0.0 ... 100.0,100.0"
]
"width" => array:4 [
"type" => "int"
"default" => null
"options" => null
"notice" => "absolut: n [px] | relativ: n % | Aspect-Ratio: n fr"
]
"height" => array:4 [
"type" => "int"
"default" => null
"options" => null
"notice" => "absolut: n [px] | relativ: n % | Aspect-Ratio: n fr"
]
"zoom" => array:4 [
"type" => "select"
"default" => null
"options" => array:5 []
"notice" => "0% = Zielgröße (kein Zoom) ... 100% = Ausschnitt größtmöglich wählen"
]
]
]
*/
// Aus dieser Debug-Ausgabe können wir dann den entsprechenden Effekt mit den richtigen Parametern bauen:
$mm->addType('quadrat_fokus', 'Quadratisches Bild mit Fokuspunkt')
->addEffect('quadrat_fokus', 'focuspoint_fit', [
'width' => '1fr', // Aus notice: "Aspect-Ratio: n fr"
'height' => '1fr', // Gleiches Seitenverhältnis für Quadrat
'zoom' => '0', // Aus notice: "0% = Zielgröße"
'meta' => 'med_focuspoint', // Aus options
'focus' => '50.0,50.0' // Aus notice: "x,y: 0.0,0.0 ... 100.0,100.0"
])
->install();
$mm = MediaManagerHelper::factory();
$mm->listAvailableEffects();
/* Ausgabe z.B.:
array:15 [
0 => "convert2img"
1 => "crop"
2 => "filter_blur"
3 => "filter_brightness"
4 => "filter_contrast"
5 => "filter_sharpen"
6 => "flip"
7 => "focuspoint_fit"
8 => "header"
9 => "image_format"
10 => "image_properties"
11 => "insert_image"
12 => "mediapath"
13 => "klxm_mediaproxy"
14 => "resize"
15 => "workspace"
]
*/
$mm->addType('max_thumb', 'Thumbnail mit maximaler Größe')
->addEffect('max_thumb', 'resize', [
'width' => 800,
'height' => 600,
'style' => 'maximum',
'allow_enlarge' => 'not_enlarge'
]);
$mm->addType('square_thumb', 'Quadratischer Thumbnail')
->addEffect('square_thumb', 'resize', [
'width' => 400,
'height' => 400,
'style' => 'minimum'
])
->addEffect('square_thumb', 'crop', [
'width' => 400,
'height' => 400,
'hpos' => 'center',
'vpos' => 'middle'
], 2);
$mm->addType('watermark', 'Bild mit Wasserzeichen')
->addEffect('watermark', 'resize', [
'width' => 1200,
'height' => 1200,
'style' => 'maximum'
])
->addEffect('watermark', 'insert_image', [
'brandimage' => 'wasserzeichen.png',
'hpos' => 'center',
'vpos' => 'middle',
'padding_x' => -20,
'padding_y' => -20
], 2);
/**
* Fügt mehreren Typen einen Effekt hinzu
* @param string|array $types Pattern (z.B. "team_*") oder Array von Typnamen
* @param string $effect Name des Effekts
* @param array $params Effekt-Parameter
* @param string $position 'append' oder 'prepend'
*/
$mm = MediaManagerHelper::factory();
// Allen Team-Typen einen Wasserzeichen-Effekt hinzufügen
$mm->addEffectToTypes('team_*', 'insert_image', [
'brandimage' => 'logo.png',
'hpos' => 'center'
], 'append');
// Mehreren Typen einen Resize voranstellen
$mm->addEffectToTypes(
['type1', 'type2'],
'resize',
['width' => 2000],
'prepend'
);
// Allen vorhandenen Typen einen Effekt anfügen
$mm->addEffectToTypes('*', 'resize', [
'width' => 2000,
'height' => 2000,
'style' => 'maximum'
]);
Die Klasse prüft automatisch:
- Ob ein Effekt verfügbar ist
- Ob die angegebenen Parameter gültig sind
- Ob der Media Manager verfügbar ist
Bei Fehlern wird eine rex_exception
geworfen.
public static function factory(): self
Erstellt eine neue Instanz der Helper-Klasse.
$mm = MediaManagerHelper::factory();
public function addType(string $name, string $description = ''): self
Fügt einen neuen Media Manager Typ hinzu.
$mm->addType('mein_typ', 'Meine Bildbearbeitung');
public function addEffect(
string $type,
string $effect,
array $params = [],
int $priority = 1
): self
Fügt einem Typ einen Effekt hinzu. Die Priorität bestimmt die Ausführungsreihenfolge.
$mm->addEffect('mein_typ', 'resize', [
'width' => 500,
'height' => 500
]);
Fügt mehreren Typen einen Effekt hinzu. position
bestimmt, ob der Effekt am Anfang (prepend) oder Ende (append) der Effektkette eingefügt wird.
public function addEffectToTypes(
$types, // Pattern (z.B. "team_*") oder Array von Typnamen
string $effect, // Name des Effekts
array $params = [], // Effekt-Parameter
string $position = 'append' // 'append' oder 'prepend'
): self
public function install(): void
Installiert oder aktualisiert alle konfigurierten Typen.
$mm->install();
public function uninstall(): void
Deinstalliert die angegebenen Typen.
$mm->addType('mein_typ')->uninstall();
public function exportToJson(
?array $typeNames = null,
?string $file = null,
bool $prettyPrint = true,
bool $includeSystemTypes = false
): string
Exportiert Media Manager Typen als JSON.
// Alle Custom-Typen exportieren
$json = $mm->exportToJson();
// Bestimmte Typen in Datei exportieren
$mm->exportToJson(['mein_typ'], 'media_types.json');
public function importFromJson(string $jsonFile): self
Importiert Media Manager Typen aus einer JSON-Datei.
$mm->importFromJson($this->getPath('media_types.json'))->install();
public function showEffectParams(string $effect, bool $dump = true): ?array
Zeigt die verfügbaren Parameter eines Effekts an.
// Parameter eines beliebigen Effekts anzeigen
$mm->showEffectParams('resize');
public function listAvailableEffects(bool $dump = true): ?array
Listet alle verfügbaren Effekte auf.
// Alle Effekte anzeigen
$mm->listAvailableEffects();
// Als Array zurückgeben
$effects = $mm->listAvailableEffects(false);
Format für Import/Export:
[
{
"name": "mein_typ",
"description": "Beschreibung",
"effects": {
"1": {
"effect": "resize",
"params": {
"rex_effect_resize": {
"width": 800,
"height": 600
}
}
}
}
}
]
MIT