Ergebnis 1 bis 26 von 26

Thema: [gelöst] Image Blob als Array auslesen

  1. #1
    Contao-Fan Avatar von MrLumbergh
    Registriert seit
    11.01.2012.
    Ort
    Hamburg
    Beiträge
    380

    Frage [gelöst] Image Blob als Array auslesen

    Hallo Leute,

    ich kann mit diesem Befehl ein Bild aus der Datenbank auslesen (bzw. den Bildpfad nutzen):

    PHP-Code:
    $this->opt_video['singleSRC'
    Jetzt ziehen wir uns allerdings per SQL Script einen Datensatz und dann funktioniert das ganze so leider nicht.
    Wir haben eine Variable $sp, die alle Informationen aus einer Datenbanktabellenzeile beinhaltet (alias, title, id, etc.).
    Dort ist auch die Zelle opt_image (aus dem Catalog Manager) dabei. Diese beinhaltet einen Blop, der als Array auslesbar ist.

    Mit dieser Anweisung kann ich darauf zugreifen:
    PHP-Code:
    $sp['opt_image'
    Heraus kommt lediglich der Blop. Wie (mit welchem Befehl) kann ich dort die notwendigen Infos rausziehen (SingleSRC)?

    P.S.: Wir haben "deserialize" probiert, das hat jedoch nicht funktioniert.

    Vielen Dank!
    Geändert von MrLumbergh (18.01.2023 um 09:26 Uhr)

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

    Standard

    Falls damit tl_content.singleSRC gemeint ist: das ist kein Array, sondern einfach die (binär gespeicherte) UUID.
    » sponsor me via GitHub or PayPal or Revolut

  3. #3
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.300

    Standard

    Ich zerlege einen Blob, allerdings kein Bild, mit unserialize und habe dann ein Array.

    PHP-Code:
    <?php $sichtbarkeit unserialize($faq['sichtbarkeit']) ?>

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

    Standard

    unserialize ist nicht sicher. Du solltest \Contao\StringUtil::deserialize nehmen. Außerdem kannst du nur serialisierte Arrays deserialisieren.
    Geändert von Spooky (18.01.2023 um 09:53 Uhr)
    » sponsor me via GitHub or PayPal or Revolut

  5. #5
    Contao-Urgestein Avatar von Kahmoon
    Registriert seit
    22.06.2009.
    Ort
    München
    Beiträge
    5.300

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    unserialize ist nicht sicher. Du solltest StringUtil::deserialize nehmen. Außerdem kannst du nur serialisierte Arrays deserialisieren.
    Merci. Will eigentlich nicht den Thread hier spammen. Was ein eigenes Thema. Wie verwende ich das im Template?

    So?
    PHP-Code:
    <?php $sichtbarkeit = \StringUtil::deserialize($faq['sichtbarkeit']) ?>

  6. #6
    Contao-Fan Avatar von MrLumbergh
    Registriert seit
    11.01.2012.
    Ort
    Hamburg
    Beiträge
    380

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Falls damit tl_content.singleSRC gemeint ist: das ist kein Array, sondern einfach die (binär gespeicherte) UUID.
    Hey,

    es ist nicht die tl_content, sondern ein mit CatalogManager erstelltes Feld. Auf das ich im normalen Contao Context allerdings mit $this->opt_video['singleSRC'] zugreifen kann.
    Nur via Datenbankabfrage misslingt es mir...

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

    Standard

    Zitat Zitat von Kahmoon Beitrag anzeigen
    Will eigentlich nicht den Thread hier spammen.
    Dann tu das auch nicht


    Zitat Zitat von MrLumbergh Beitrag anzeigen
    Nur via Datenbankabfrage misslingt es mir...
    Was genau meinst du damit?
    » sponsor me via GitHub or PayPal or Revolut

  8. #8
    Contao-Fan Avatar von MrLumbergh
    Registriert seit
    11.01.2012.
    Ort
    Hamburg
    Beiträge
    380

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Was genau meinst du damit?
    Wir bauen auf der einen Seite das Bild eines Produktes (A) so ein:

    PHP-Code:
    <img src="<?php echo $this->opt_image['singleSRC']; ?>" alt="" />
    Auf der Produkt (A) Seite, wollen wir aber noch andere Produkte (B) anzeigen, diese Datensätze holen wir mit nem SQL Script.
    Dann landen wir in einer Schleife:
    PHP-Code:
    foreach ($similarProducts as $sp) { 
    Und wollen das Bild des Produktes ausgeben:
    PHP-Code:
    <img src="<?php echo $sp['opt_image']['singleSRC']; ?>" alt="" />
    - SO funktioniert das allerdings natürlich nicht.
    Der dazugehörige Link wäre z.B.:
    PHP-Code:
    <a href="/produkte/$sp['alias']"
    ...verstehst du?

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

    Standard

    singleSRC ist wie gesagt vermutlich eine UUID. Du musst dir aus tl_files dazu die dazugehörigen Informationen holen.
    » sponsor me via GitHub or PayPal or Revolut

  10. #10
    Contao-Fan Avatar von MrLumbergh
    Registriert seit
    11.01.2012.
    Ort
    Hamburg
    Beiträge
    380

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    singleSRC ist wie gesagt vermutlich eine UUID. Du musst dir aus tl_files dazu die dazugehörigen Informationen holen.
    Moin und danke für's beantworten.

    Ich sehe tatsächlich in den tl_files einen Eintrag für mein Bild.
    Id, Path, Hash, Name...ok.
    Aber wie finde ich da ne Verknüpfung zum Blob? Also wie komme ich an Infos aus dem Blob bzw. wie hängt mein Blob mit dem Eintrag zusammen?
    Hilfe...

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

    Standard

    Die UUID steht in tl_files.uuid
    » sponsor me via GitHub or PayPal or Revolut

  12. #12
    Contao-Fan Avatar von MrLumbergh
    Registriert seit
    11.01.2012.
    Ort
    Hamburg
    Beiträge
    380

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Die UUID steht in tl_files.uuid
    Ja, das tut sie. Aber was bringt mir die UUID?

    Hier in unserer ctlg_products Tabelle sieht es so aus:

    Bildschirmfoto 2023-01-17 um 20.41.54.png

    Und in tl_files so:

    Bildschirmfoto 2023-01-17 um 20.41.21.png

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

    Standard

    Zitat Zitat von MrLumbergh Beitrag anzeigen
    Ja, das tut sie. Aber was bringt mir die UUID?
    Naja wie schon mehrmals erwähnt steht ja in deinem singleSRC Feld vermutlich die UUID.
    » sponsor me via GitHub or PayPal or Revolut

  14. #14
    Contao-Fan Avatar von MrLumbergh
    Registriert seit
    11.01.2012.
    Ort
    Hamburg
    Beiträge
    380

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Naja wie schon mehrmals erwähnt steht ja in deinem singleSRC Feld vermutlich die UUID.
    Ja, und meine einzige Frage ist, wie ich Daten aus dem Blob ziehen kann...

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

    Standard

    Ich verstehe nicht was du meinst. In singleSRC steht vermutlich die UUID - die kannst du direkt heranziehen.
    » sponsor me via GitHub or PayPal or Revolut

  16. #16
    Contao-Urgestein Avatar von cliffparnitzky
    Registriert seit
    08.10.2010.
    Ort
    Lüneburg
    Beiträge
    2.460
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    @Spooky: Die Frage bezieht sich womöglich auf #12.

    @MrLumbergh: mit "deserialize"

  17. #17
    Contao-Fan Avatar von MrLumbergh
    Registriert seit
    11.01.2012.
    Ort
    Hamburg
    Beiträge
    380

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Ich verstehe nicht was du meinst. In singleSRC steht vermutlich die UUID - die kannst du direkt heranziehen.
    Genau dieses singleSRC möchte ich ja haben - aber mit deserialise hatte ich es probiert und keinen Erfolg.

    PHP-Code:
    $optImage = \Contao\StringUtil::deserialize($sp['opt_image'],true); 

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

    Standard

    Zitat Zitat von cliffparnitzky Beitrag anzeigen
    @Spooky: Die Frage bezieht sich womöglich auf #12.
    Was im speziellen?


    Zitat Zitat von cliffparnitzky Beitrag anzeigen
    @MrLumbergh: mit "deserialize"
    In singleSRC stehen vermutlich keine deserialisierten Daten drin.


    Zitat Zitat von MrLumbergh Beitrag anzeigen
    Genau dieses singleSRC möchte ich ja haben - aber mit deserialise hatte ich es probiert und keinen Erfolg.

    PHP-Code:
    $optImage = \Contao\StringUtil::deserialize($sp['opt_image'],true); 
    In singleSRC stehen vermutlich keine deserialisierten Daten drin. Du musst mit der UUID, die vermutlich in singleSRC steht, die Daten aus tl_files holen (Datenbank Verbindung direkt oder FilesModel).
    » sponsor me via GitHub or PayPal or Revolut

  19. #19
    Contao-Urgestein Avatar von cliffparnitzky
    Registriert seit
    08.10.2010.
    Ort
    Lüneburg
    Beiträge
    2.460
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Was im speziellen?
    Ich hatte in das erste Bild geschaut. Da ist die Spalte "opt_image" ein BLOB.

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

    Standard

    Ja, das ist die Darstellung im phpMyAdmin wenn das Feld vom Typ BLOB ist.
    » sponsor me via GitHub or PayPal or Revolut

  21. #21
    Contao-Fan Avatar von MrLumbergh
    Registriert seit
    11.01.2012.
    Ort
    Hamburg
    Beiträge
    380

    Fehler

    Moin,
    ich möchte Euch nicht verschweigen, dass ich gestern Nacht noch die Lösung erarbeitet habe.
    Mit Blick auf diesen Post (Danke, spooky) konnte ich folgenden Code entwickeln:


    PHP-Code:
    $contaoImageUuid array_map('\StringUtil::binToUuid'deserialize($sp['opt_image'], true));
                        
    $contaoImage = \FilesModel::findByUuid($contaoImageUuid[0]);
                        
    $contaoImagePath $contaoImage->path
    Damit ist das Thema für mich gelöst.

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

    Standard

    Also war es doch ein serialisiertes Array (dann ist die Bezeichnung singleSRC aber irreführend). StringUtil::binToUuid brauchst du in diesem Fall nicht.
    » sponsor me via GitHub or PayPal or Revolut

  23. #23
    Contao-Fan Avatar von MrLumbergh
    Registriert seit
    11.01.2012.
    Ort
    Hamburg
    Beiträge
    380

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Also war es doch ein serialisiertes Array (dann ist die Bezeichnung singleSRC aber irreführend). StringUtil::binToUuid brauchst du in diesem Fall nicht.
    Ah, ok. Dann schreib ich:
    PHP-Code:
    $contaoImageUuid array_map(nulldeserialize($sp['opt_image'], true)); 
    Allerdings sagt mir PHPStorm, dass deserialize seit 5.6.0 deprecated ist...wird das ein Problem? Also, es geht ja. Wir nutzen allerdings PHP8...

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

    Standard

    Zitat Zitat von MrLumbergh Beitrag anzeigen
    Ah, ok. Dann schreib ich:
    PHP-Code:
    $contaoImageUuid array_map(nulldeserialize($sp['opt_image'], true)); 
    Du brauchst gar kein array_map.


    Zitat Zitat von MrLumbergh Beitrag anzeigen
    Allerdings sagt mir PHPStorm, dass deserialize seit 5.6.0 deprecated ist...wird das ein Problem?
    https://community.contao.org/de/show...l=1#post567623
    » sponsor me via GitHub or PayPal or Revolut

  25. #25
    Contao-Nutzer Avatar von Baddy
    Registriert seit
    29.08.2019.
    Beiträge
    26

    Standard

    Tag.
    Ich habe mich durch ein paar Threads durchgehauen und geschaut wie ich eine basic Gallerie mit RSCE in Contao 5 hinbekomme.
    Heißt, dies funktioniert eventuell nicht für Contao 4, das kann ich nicht garantieren. Wäre cool, wenn das Jemand testen möchte und mit Ergebnissen sich zurück meldet.
    Anyway, hier sind die angepassten Dateien:

    Config Datei 'rsce_gallery_config.php':
    PHP-Code:
    <?php
    //rsce_gallery_config.php

    return array(
        
    'label' => array('Custom: Bildergalerie'''),
        
    'types' => array('content'),
        
    'contentCategory' => 'Inhalte: Custom',
        
    'standardFields' => array('cssID'),
        
    'wrapper' => array(
            
    'type' => 'none',
        ),
        
    'beTemplate' => 'rsce_gallery_be',
        
    'fields' => array(
            
    'multiSRC' => array
            (
                
    'label' => array('Bilder und Ordner''Bitte wählen Sie ein oder mehrere Bilder oder einen Ordner aus. Wenn Sie einen Ordner auswählen, werden alle darin enthaltenen Bilder eingefügt.'), 
                
    'inputType' => 'standardField'
                
    'eval' => array(        
                    
    'isGallery' => true
                    
    'multiple'=>true
                    
    'fieldType'=>'checkbox'
                    
    'orderField'=>'orderSRC'
                    
    'files'=>true
                    
    // 'mandatory'=>true,         
                    
    'extensions' => Contao\Config::get('validImageTypes')
                    ),
                
    'sql' => "blob NULL",
                
    'load_callback' => array
                (
                    array(
    'tl_content''setMultiSrcFlags')
                )
            ),
        ),
    );
    ?>

    Template Datei 'rsce_gallery.html5':
    PHP-Code:
    <div class="rsce_gallery">
        <?php foreach ($this->multiSRC as $index => $galerie): ?>
                <figure class="image_container">
                    <?php if ($image $this->arrData['getImageObject']($galerie)){ ?>
                        <a href="<?php echo $image->src ?>" class="rsce_gallery_link">
                            <img src="<?php echo $image->src ?>" alt="<?php echo $image->alt ?>" class="acc_gallery_image">
                        </a>
                    <?php ?>
                </figure>
        <?php endforeach ?>
    </div>
    Ist simpel gehalten, sollte also einfach zu nutzen und erweitern sein.
    Hoffe, das hilft!

  26. #26
    Contao-Fan Avatar von ph!L
    Registriert seit
    04.11.2009.
    Ort
    Internet
    Beiträge
    439

    Standard

    Vielen Dank für diesen Thread (und ChatGPT ).

    Hier noch ein Weg um im BLOB gespeicherte Videodaten zu deserialisieren und als responsives <video> auszugeben:

    PHP-Code:
    <video class="lazy" autoplay="" loop="" playsinline="" muted="">
                <?php
                  
    // Deserialisieren des BLOBs, um ein Array von Binär-UUIDs zu erhalten
                  
    $videoArray = \Contao\StringUtil::deserialize($this->hero_video);
                  
    // Konvertieren der Binär-UUIDs in String-UUIDs
                  
    $contaoVideoUuids array_map('\Contao\StringUtil::binToUuid'$videoArray);
                  
    // Iterieren über die konvertierten UUIDs und holen der Pfade
                  
    foreach ($contaoVideoUuids as $contaoVideoUuid) {
                    
    $contaoVideo = \FilesModel::findByUuid($contaoVideoUuid);
                
    ?>
                  <source media="all and (min-width: 431px)" type="video/<?= $contaoVideo->extension ?>" data-src="<?= $contaoVideo->path ?>">
                <?php }
                
                  
    // Do the same for mobile videos
                  // Deserialisieren des BLOBs, um ein Array von Binär-UUIDs zu erhalten
                  
    $videoArrayMobile = \Contao\StringUtil::deserialize($this->hero_video_mobile);
                  
    // Konvertieren der Binär-UUIDs in String-UUIDs
                  
    $contaoVideoMobileUuids array_map('\Contao\StringUtil::binToUuid'$videoArrayMobile);
                  
    // Iterieren über die konvertierten UUIDs und holen der Pfade
                  
    foreach ($contaoVideoMobileUuids as $contaoVideoMobileUuid) {
                    
    $contaoVideoMobile = \FilesModel::findByUuid($contaoVideoMobileUuid);
                
    ?>
                  <source type="video/<?= $contaoVideoMobile->extension ?>" data-src="<?= $contaoVideoMobile->path ?>">
                <?php ?>
                </video>

Aktive Benutzer

Aktive Benutzer

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

Berechtigungen

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