Skip to content

KLXM/media_manager_helper

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MediaManagerHelper

Eine Hilfsklasse für REDAXO, um Media Manager Typen und Effekte einfach in AddOns zu verwalten.

Features

  • 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

Warum ein MediaManagerHelper?

Ohne Helper (Raw SQL)

// 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();

Mit Helper

$mm = MediaManagerHelper::factory();
$mm->addType('mein_typ', 'Mein Typ')
   ->addEffect('mein_typ', 'resize', [
       'width' => 500, 
       'height' => 500
   ])
   ->install();

Und das ist noch nicht alles

  • 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. 🚀

Einfache Verwendung

In der install.php des eigenen AddOns

$mm = MediaManagerHelper::factory();

// Einfachen Thumbnail erstellen
$mm->addType('mein_thumb', 'Thumbnail für mein AddOn')
   ->addEffect('mein_thumb', 'resize', [
       'width' => 500,
       'height' => 500
   ])
   ->install();

In der uninstall.php

$mm = MediaManagerHelper::factory();
$mm->addType('mein_thumb')->uninstall();

Erweiterte Beispiele

Focuspoint_fit mit Resize

$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();

Import und Export

Media Types als JSON exportieren

$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']
);

Media Types aus JSON importieren

// 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"
                    }
                }
            }
        }
    }
]

Debug-Funktionen

Parameter eines Effekts anzeigen

// 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();

Alle verfügbaren Effekte anzeigen

$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"
]
*/

Häufige Anwendungsfälle

Thumbnail mit maximaler Größe

$mm->addType('max_thumb', 'Thumbnail mit maximaler Größe')
   ->addEffect('max_thumb', 'resize', [
       'width' => 800,
       'height' => 600,
       'style' => 'maximum',
       'allow_enlarge' => 'not_enlarge'
   ]);

Quadratischer Thumbnail

$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);

Bild mit Wasserzeichen

$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);

Effekte mehreren Typen zuweisen

/**
 * 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'
]);

Fehlerbehandlung

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.

MediaManagerHelper - API Dokumentation

Factory Methode

public static function factory(): self

Erstellt eine neue Instanz der Helper-Klasse.

$mm = MediaManagerHelper::factory();

Media Type Methoden

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();

Import/Export Methoden

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();

Debug Methoden

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);

JSON Format

Format für Import/Export:

[
    {
        "name": "mein_typ",
        "description": "Beschreibung",
        "effects": {
            "1": {
                "effect": "resize",
                "params": {
                    "rex_effect_resize": {
                        "width": 800,
                        "height": 600
                    }
                }
            }
        }
    }
]

Lizenz

MIT

About

Easy in install and uninstall media types in REDAXO cms

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages