Ergebnis 1 bis 9 von 9

Thema: Update Images von MM 1 -> 2.x

  1. #1
    Contao-Nutzer
    Registriert seit
    20.01.2022.
    Beiträge
    205

    Standard Update Images von MM 1 -> 2.x

    Hallo,

    Mit Hilfe der Anleitung hier:
    https://metamodels.readthedocs.io/de...-v1-to-v2.html

    habe ich die einzelnen Bilder die einem MM-Eintrag zugeordnet sind, gut updaten können - ich musste lediglich bei mir noch den alten Pfad in der DB anpassen, von "tl_files" auf "files"

    Nun habe ich aber noch ein MM für Galerie-Bilder und in der Datenbank sehen die Einträge so aus:

    a:2:{i:0;s:66:"tl_files/imageforweb Produktfotos/Gitarrenverstaerker/framus 2.JPG";i:1;s:66:"tl_files/imageforweb Produktfotos/Gitarrenverstaerker/framus 3.JPG";}

    Gibt es eine relative einfache Möglichkeit, die Pfade hier ebenfalls auf files anzupassen und die Werte für "s:.." mitanzupassen?
    Ich würde es auch von Hand mit nem kleinen Script machen können, aber wenn es schon was gibt ....

    Danke für Hinweise

    Thomas

  2. #2
    Contao-Nutzer
    Registriert seit
    20.01.2022.
    Beiträge
    205

    Standard

    btw:

    https://github.com/MetaModels/file_updater

    ist bei mir nicht benutzbar, da kommt direkt ein Internal Error, es ist aber auch schon ziemlich alt

  3. #3
    Contao-Nutzer
    Registriert seit
    20.01.2022.
    Beiträge
    205

    Standard

    Kann jemand helfen und sagen, wie eine "Galerie" - also mehrere Bilder für ein MetaModel-Eintrag - in der Datenbank gespeichert werden?

    früher war es ein Textfeld mit z.B. zwei Bildern für einen MM-Eintrag:

    a:2:{i:0;s:66:"tl_files/imageforweb Produktfotos/Gitarrenverstaerker/framus 2.JPG";i:1;s:66:"tl_files/imageforweb Produktfotos/Gitarrenverstaerker/framus 3.JPG";}

    wie bekomme ich diesen Eintrag so als BLOB umgewandelt, dass diese beiden Bilder dann korrekt zugeordnet sind?
    für einzelne Bilder war das für mich nachvollziehbar:

    UPDATE mm_bilder SET image=(SELECT uuid FROM `tl_files` WHERE tl_files.path=mm_bilder.image_backup)

    aber bei der mm_bilder handelt es sich um serialisierte Objekte mit beliebig vielen Bildern - wie macht man das am besten?



    Danke für Hinweise


    Thomas
    Geändert von Thomas Pyrin (23.11.2022 um 18:51 Uhr)

  4. #4
    Contao-Nutzer
    Registriert seit
    20.01.2022.
    Beiträge
    205

    Standard

    Oder vielleicht ist die Frage richtiger:

    Wie kann man das hier:

    UPDATE mm_bilder SET image=(SELECT uuid FROM `tl_files` WHERE tl_files.path=mm_bilder.image_backup)

    für mehrere Bilder in einem BLOB verwenden?

  5. #5
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.714
    User beschenken
    Wunschliste

    Standard

    in phpMyAdmin gibt es eine Option (Checkbox) mit der man "in die Blobs gucken kann"

    es werden die UUIDs gespeichert

  6. #6
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.714
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von Thomas Pyrin Beitrag anzeigen
    btw:

    https://github.com/MetaModels/file_updater

    ist bei mir nicht benutzbar, da kommt direkt ein Internal Error, es ist aber auch schon ziemlich alt
    mit etwas Umbau sollte das wieder gehen - z. B. https://github.com/MetaModels/file_u...odels.php#L190

    siehe https://metamodels.readthedocs.io/de....html#beispiel

    https://github.com/MetaModels/file_updater/issues/3

    könntest gern einen PR machen, wenns wieder läuft

  7. #7
    Contao-Nutzer
    Registriert seit
    20.01.2022.
    Beiträge
    205

    Standard

    Hallo,

    hab das ganze jetzt von Hand gemacht .... ohne Contao Bordmittel.

    Als Erstes die Spalte images dupliziert zu images_backup.


    PHP-Code:

    $stmt 
    $dbConnect->prepare("SELECT * FROM mm_bilder WHERE images_backup != ''");
    $stmt->execute();

    $rows $stmt->fetchAll(PDO::FETCH_ASSOC);

    for(
    $i=0;$i<count($rows);$i++) {


        
    $oldImages unserialize($rows[$i]['images_backup']);

        
    $newImages = array();

        foreach(
    $oldImages AS $k => $v) {

                    
    /***** Falls noch das ganz alte Verzeichnis tl_files verwendet sein sollte *****/
            
    $v preg_replace('|tl_|'''$v);

            
    $stmt $dbConnect->prepare("SELECT uuid FROM tl_files WHERE tl_files.path = ?");
            
    $stmt->execute(array($v));

            
    $row $stmt->fetchAll(PDO::FETCH_ASSOC);

            if(isset(
    $row[0]['uuid'])) {
                
    $newImages[] = $row[0]['uuid'];
            }
            

        }

        if(
    count($newImages) > 0) {
            
    $newImages serialize($newImages);

            
    $sqlUpdate "UPDATE mm_bilder SET images = '".$newImages."' WHERE id = ".$rows[$i]['id'];
            
    $stmt $dbConnect->prepare($sqlUpdate);
            
    $stmt->execute();
        }



    vielleicht nicht das Eleganteste, aber es funktioniert.

    Thomas

  8. #8
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.714
    User beschenken
    Wunschliste

    Standard

    ... ob das nun schneller ging als die zwei Zeilen anzupassen?

  9. #9
    Contao-Nutzer
    Registriert seit
    20.01.2022.
    Beiträge
    205

    Standard

    Zitat Zitat von zonky Beitrag anzeigen
    ... ob das nun schneller ging als die zwei Zeilen anzupassen?
    ja, ich hatte halt schon so damit angefangen

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •