Ergebnis 1 bis 26 von 26

Thema: Metamodel Bildimport. Was und wie in das blob-Feld eintragen?

  1. #1
    Contao-Nutzer Avatar von pout
    Registriert seit
    23.06.2009.
    Ort
    Wien
    Beiträge
    124
    User beschenken
    Wunschliste

    Standard Metamodel Bildimport. Was und wie in das blob-Feld eintragen?

    Hallo,

    ich habe ein Metamodel mit einem Fileattribut.
    Die Bilder sind im Dateisystem und synchronisiert.
    Habe ein kleines Skript geschrieben, das mir mir aus einer bestehenden MySQL-Tabelle alles in die entsprechenden MM-Tabellen mapt.
    Was muss in das Blob-Feld des File-Attributes in der MySQL-Tabelle und wie bekomme ich es dort hinein?

    Danke Roman

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

    Standard

    Zitat Zitat von pout Beitrag anzeigen
    aus einer bestehenden MySQL-Tabelle alles in die entsprechenden MM-Tabellen mapt.
    ... was meisnt Du damit bzw. was ist das Ziel?

  3. #3
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.254
    Partner-ID
    10107

    Standard

    Zitat Zitat von pout Beitrag anzeigen
    Was muss in das Blob-Feld des File-Attributes in der MySQL-Tabelle und wie bekomme ich es dort hinein?
    Dort musst du die UUID der Datei aus dem Dbafs eintragen. Im einfachsten Fall bekommst du die UUID zB so:
    PHP-Code:
    $objFile = \Dbafs::addResource$pathtofile );
    echo 
    $objFile->uuid

  4. #4
    Contao-Nutzer Avatar von pout
    Registriert seit
    23.06.2009.
    Ort
    Wien
    Beiträge
    124
    User beschenken
    Wunschliste

    Standard

    Das Ziel ist es Bestandsdaten in das MM überzuführen. Bis auf die Bilder, die in der Ursprungstabelle ein Textfeld mit Pfadangabe sind, funktioniert es.
    Ich weiß eben nicht was in das Blobfeld des file-Attributs reingehört und wie ich reinbekomme.
    Bin auch daran gescheitert es aus einem, über das Backend angelegten, Testdatensatz auszulesen. unserialize hat mir nichts gezeigt.

  5. #5
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.254
    Partner-ID
    10107

    Standard

    Wie schon erwähnt steht dort die UUID drin, oder wenn es mehrere Bilder sind ein serialisiertes Array aus UUIDs.

  6. #6
    Contao-Nutzer Avatar von pout
    Registriert seit
    23.06.2009.
    Ort
    Wien
    Beiträge
    124
    User beschenken
    Wunschliste

    Standard

    @spooky: Danke. einfach mit serialize die uuid ins blob-Feld?

  7. #7
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.254
    Partner-ID
    10107

    Standard

    Zitat Zitat von pout Beitrag anzeigen
    @spooky: Danke. einfach mit serialize die uuid ins blob-Feld?
    Wenn es nur ein Bild ist, dann direkt die UUID, sonst ein serialisiertes Array aus UUIDs, ja.

  8. #8
    Contao-Nutzer Avatar von pout
    Registriert seit
    23.06.2009.
    Ort
    Wien
    Beiträge
    124
    User beschenken
    Wunschliste

    Standard

    @spooky: Du bist mir zu schnell mit dem Antworten ;-)

    Es ist ein Bild. Ich mache es mit einem externen Skript und würde mir die uuid per SQL-Select aus der tl_files raussuchen.
    Wie trage ich sie in das binäre Blob Feld ein?
    Falls mehrere Bilder: Was kommt in das array, das serialisiert wird?

  9. #9
    Contao-Nutzer Avatar von pout
    Registriert seit
    23.06.2009.
    Ort
    Wien
    Beiträge
    124
    User beschenken
    Wunschliste

    Standard

    ok schon wieder zu schnell. Danke ich probiers

  10. #10
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.254
    Partner-ID
    10107

    Standard

    Zitat Zitat von pout Beitrag anzeigen
    Es ist ein Bild. Ich mache es mit einem externen Skript und würde mir die uuid per SQL-Select aus der tl_files raussuchen.
    Wie trage ich sie in das binäre Blob Feld ein?
    Öh, einfach direkt so wie sie ist eintragen .

    Zitat Zitat von pout Beitrag anzeigen
    Falls mehrere Bilder: Was kommt in das array, das serialisiert wird?
    Die UUIDs der Bilder.

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

    Standard

    ansonsten: per "MM-Backend" ein Bild hinzufügen und gucken was passiert (ist)

  12. #12
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.254
    Partner-ID
    10107

    Standard

    Zitat Zitat von zonky Beitrag anzeigen
    ansonsten: per "MM-Backend" ein Bild hinzufügen und gucken was passiert (ist)
    Das hat er ja bereits getan:
    Zitat Zitat von pout Beitrag anzeigen
    Bin auch daran gescheitert es aus einem, über das Backend angelegten, Testdatensatz auszulesen. unserialize hat mir nichts gezeigt.

  13. #13
    Contao-Nutzer Avatar von pout
    Registriert seit
    23.06.2009.
    Ort
    Wien
    Beiträge
    124
    User beschenken
    Wunschliste

    Standard

    Danke Spooky! Hat mit deiner Hilfe funktioniert:

    uuid aus tl_files ausgelesen:
    Code:
    $stmtFilesUUID = $dbh->prepare("SELECT HEX(uuid) from `tl_files` WHERE name = '".$Dateiname-aus-alter-Tabelle."';");
    Ergebnis in $uuid gespeichert und in MM-Tabelle eingetragen:
    Code:
    $stmt = $dbh->prepare("INSERT INTO `mm_xxx` (id, pid, tstamp, image, whatever) VALUES ($id,0,$tstamp,UNHEX('$uuid'),'$whatever');");
    Geändert von pout (17.09.2015 um 12:33 Uhr)

  14. #14
    Contao-Nutzer Avatar von pout
    Registriert seit
    23.06.2009.
    Ort
    Wien
    Beiträge
    124
    User beschenken
    Wunschliste

    Standard

    Ich muss das Thema nochmals aufgreifen, da ich jetzt doch mehrere Bilder importieren muss und es nicht hinbekomme.

    Ich habe die UUIDs ausgelesen und serialisiert, aber wie bekomme ich sie in das BLOB-Datenbankfeld. SQL HEX() funktioniert hier nicht.

  15. #15
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.254
    Partner-ID
    10107

    Standard

    Ich glaube nicht dass du überhaupt mit HEX und UNHEX arbeiten musst hier.

  16. #16
    Contao-Nutzer Avatar von pout
    Registriert seit
    23.06.2009.
    Ort
    Wien
    Beiträge
    124
    User beschenken
    Wunschliste

    Standard

    Fürchte doch. Wenn ich ohne HEX auslese und serialisiere bekomme ich:

    Code:
    a:2:{i:0;s:16:"‡ÞqÛ`ù吟'bý§";i:1;s:16:"ˆÚØ`ù吟'bý§";}
    und wenn ich das per SQL einfach zuweise steht ein
    Code:
    a:0:{}
    im BLOB-Feld und zwar nicht binär.

    mit HEX:
    Code:
    a:2:{i:0;s:32:"87DE71DB60F911E5909F08002762FDA7";i:1;s:32:"8818DAD860F911E5909F08002762FDA7";}
    und das muss ich irgendwie in das binäre Format bekommen.

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

    Standard

    Nachfrage: warum Serialisieren? in #4 hast Du geschrieben

    Bilder, die in der Ursprungstabelle ein Textfeld mit Pfadangabe sind
    - ich verstehe daraus, dass in der Ursprungstabelle in Spalte "image" jeweils ein "mein/pfad/zur/datei.png" vorhanden ist => oder?

  18. #18
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.254
    Partner-ID
    10107

    Standard

    Zitat Zitat von zonky Beitrag anzeigen
    Nachfrage: warum Serialisieren? in #4 hast Du geschrieben



    - ich verstehe daraus, dass in der Ursprungstabelle in Spalte "image" jeweils ein "mein/pfad/zur/datei.png" vorhanden ist => oder?
    Weil er nun doch mehrere Bilder braucht, siehe #14


    Zitat Zitat von pout Beitrag anzeigen
    Fürchte doch. Wenn ich ohne HEX auslese und serialisiere bekomme ich:

    Code:
    a:2:{i:0;s:16:"‡ÞqÛ`ù吟'bý§";i:1;s:16:"ˆÚØ`ù吟'bý§";}
    und wenn ich das per SQL einfach zuweise steht ein
    Code:
    a:0:{}
    im BLOB-Feld und zwar nicht binär.
    Das klingt seltsam. Poste mal den Code.

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

    Standard

    #14:

    da ich jetzt doch mehrere Bilder importieren

    steht aber nicht da, dass die in EINE "Zelle" sollen... ich habe/hatte das eher als "sequentiell" verstanden...

  20. #20
    Contao-Nutzer Avatar von pout
    Registriert seit
    23.06.2009.
    Ort
    Wien
    Beiträge
    124
    User beschenken
    Wunschliste

    Standard

    @zonky: ja stimmt das war nicht ganz eindeutig formuliert. Ich habe die uuids aus der tl_file und will mehrere in mein MM-Datenbankfeld bekommen.

    Hier der (Quick and dirty-) Code:
    PHP-Code:
    try { 
        
    $dbh = new PDO($dsn$user$password);
        
    $dbh->exec("set names utf8");
        
         
    // Produkte auslesen
         
    $stmtProdukte $dbh->prepare("SELECT * FROM `mm_products` ORDER BY order_no");
         
    $stmtProdukte->execute();
         
    $arrProdukte $stmtProdukte->fetchAll(); 
    echo 
    'Anzahl Produkte: '.count($arrProdukte).'<br>';     
         foreach (
    $arrProdukte as $row) {
            
            
    // max 5 Bilder mit eindeutigem Namen zb.: 1+1_firma.jpg
            
    $arrDetailimages = array();
            for (
    $i=1$i<=5$i++) {
                
    $stmtDetailimagesUUID $dbh->prepare("SELECT HEX(uuid) from `tl_files` WHERE name = '".$row['order_no']."+".$i."_firma.jpg"."';");
                
    $stmtDetailimagesUUID -> execute();
                
    $arrDetailimagesUuid $stmtDetailimagesUUID->fetchAll();

                if (isset(
    $arrDetailimagesUuid[0][0])) 
                {
                    echo 
    $row['order_no'].": Zusatzbild(er) geholt<br>";
                    
    $arrDetailimages[] = $arrDetailimagesUuid[0][0];
                }
            }
            
    echo 
    var_dump($arrDetailimages);
            
    $strDetailimages'';
            
    $strDetailimages =serialize($arrDetailimages);
            unset(
    $arrDetailimages);
            
            
    $stmtProducts $dbh->prepare("UPDATE `mm_products` SET detailimages =".$strDetailimages." WHERE id =".$row['order_no'].";");
            
    $stmtProducts->execute();
            
         }
    } catch (
    PDOException $e) {
        print 
    "Error!: " $e->getMessage() . "<br/>";
        die();

    Das ist der Letztstand meiner Versuche. Ich muss den $strDetailimages irgendwie in bin Format bekommen. Ein hex2bin($strDetailimages) funktionierte nicht.
    Wenn ich die uuid nicht mit HEX konvertiere, bekomme ich Schwierigkeiten beim Serialisieren.

  21. #21
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.254
    Partner-ID
    10107

    Standard

    Warum benutzt du nicht die API von Contao?

  22. #22
    Contao-Nutzer Avatar von pout
    Registriert seit
    23.06.2009.
    Ort
    Wien
    Beiträge
    124
    User beschenken
    Wunschliste

    Standard

    Weil ich mich noch nicht so wirklich damit beschäftigt habe, und dachte das kurze Skript ginge schneller.

  23. #23
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.254
    Partner-ID
    10107

    Standard

    zB. so:
    PHP-Code:
    $db = \Datbase::getInstance();

    $arrProducts $db->prepare"SELECT * FROM `mm_products` ORDER BY order_no" )->execute()->fetchAllAssoc();

    foreach( 
    $arrProducts as $product )
    {
        
    $arrImages = array();
        for( 
    $i 1$i <= 5; ++$i )
        {
            
    $uuid $db->prepare"SELECT uuid from `tl_files` WHERE name = ?" )->execute$product['order_no']."+".$i."_firma.jpg" )->fetchRow();
            if( 
    $uuid )
                
    $arrImages[] = $uuid['uuid'];
        }

        if( 
    $arrImages )
            
    $db->prepare"UPDATE `mm_products` SET detailimages = ? WHERE id = ?" )->executeserialize$arrImages ), $product['order_no'] );

    Geändert von Spooky (15.10.2015 um 10:14 Uhr)

  24. #24
    Contao-Nutzer Avatar von pout
    Registriert seit
    23.06.2009.
    Ort
    Wien
    Beiträge
    124
    User beschenken
    Wunschliste

    Standard

    Vielen Dank. Brauch noch Starthilfe: Wo tu ich den Code hin, dass ich die API nutzen kann? Muss ich ein Modul erstellen, oder kann ich das API irgenwie includen?

  25. #25
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    34.254
    Partner-ID
    10107

    Standard

    Best practice wäre folgendes:
    PHP-Code:
    <?php

    // inizialize the contao framework
    define('TL_MODE''FE');
    require(
    'system/initialize.php');

    class 
    MyScript extends Controller
    {
        public function 
    __construct()
        {
            
    parent::__construct();
        }

        public function 
    run()
        {
            
    // do stuff
        
    }
    }

    $objMyScript = new MyScript();
    $objMyScript->run();
    Dieses PHP Script befände sich dann in einer PHP Datei im Root der Contao Installation. Kann man auch woanders hingeben, es muss dann nur der relative Pfad zur initialize.php angepasst werden.

    Benötigst du keine Klassenabhängigkeiten, dann reicht auch
    PHP-Code:
    <?php

    // inizialize the contao framework
    define('TL_MODE''FE');
    require(
    'system/initialize.php');

    // get the database interface
    $db = \Database::getInstance();

    // do stuff
    // …

  26. #26
    Contao-Nutzer Avatar von pout
    Registriert seit
    23.06.2009.
    Ort
    Wien
    Beiträge
    124
    User beschenken
    Wunschliste

    Standard

    Vielen Dank! So hat es funktioniert:

    PHP-Code:
    <?php

    // inizialize the contao framework
    define('TL_MODE''FE');
    require(
    '../system/initialize.php');

    // get the database interface
    $db = \Database::getInstance();

    $arrProducts $db->prepare"SELECT * FROM `mm_products` ORDER BY order_no" )->execute()->fetchAllAssoc();
    //echo count($arrProducts);
    foreach( $arrProducts as $product )
    {
        
    $arrImages = array();
        for( 
    $i 1$i <= 5; ++$i )
        {   
            
    $name $product['order_no']."+".$i."_firma.jpg";
            
    $uuid $db->prepare"SELECT uuid from `tl_files` WHERE name = ?" )->execute$name )->fetchAllAssoc();
            if( 
    $uuid 
                
    $arrImages[] = $uuid[0]['uuid'];
        }

        if( 
    $arrImages ) {
            
    $db->prepare"UPDATE `mm_products` SET detailimages = ? WHERE id = ?" )->executeserialize$arrImages ), $product['order_no'] );
        }
    }  
    ?>

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
  •