Ergebnis 1 bis 6 von 6

Thema: DCA: Ausgabe von Bildern im Frontend

  1. #1
    Contao-Fan
    Registriert seit
    26.06.2009.
    Beiträge
    266

    Fehler DCA: Ausgabe von Bildern im Frontend

    Hallo zusammen,

    ich bin derzeit dabei das vorhandene Event-Modul nach meinen eigenen Bedürfnissen anzupassen und beschäftige ich mich das erste Mal mit Data Container Arrays (DCA).

    Hierzu habe ich folgende Ordner-/Datei-Struktur erstellt:

    Code:
    /system/modules/calendar_veranstaltungen/config/
    /system/modules/calendar_veranstaltungen/config/autoload.php
    /system/modules/calendar_veranstaltungen/dca/
    /system/modules/calendar_veranstaltungen/dca/tl_calendar_events.php
    /system/modules/calendar_veranstaltungen/languages/
    /system/modules/calendar_veranstaltungen/languages/de/
    /system/modules/calendar_veranstaltungen/languages/de/tl_calendar_events.php
    /system/modules/calendar_veranstaltungen/languages/en/
    /system/modules/calendar_veranstaltungen/languages/en/tl_calendar_events.php
    /system/modules/calendar_veranstaltungen/templates/events/
    /system/modules/calendar_veranstaltungen/templates/events/event_list_veranstaltungen.html5
    /system/modules/calendar_veranstaltungen/templates/events/event_teaser_veranstaltungen.html5
    [...]
    In der Datei "/system/modules/calendar_veranstaltungen/dca/tl_calendar_events.php" habe ich u. a. folgenden Code zur Implementierung einer Bildergaleriefunktion via das Contao-Backend innerhalb des Teasers eines Events:

    PHP-Code:
    // Anzeige im Backend --------------------------------------------------
    $GLOBALS['TL_DCA']['tl_calendar_events']['palettes']['default'] = str_replace('title,','title,freeEntry_gallery,'$GLOBALS['TL_DCA']['tl_calendar_events']['palettes']['default']);

    // Beschreibung des Feldes --------------------------------------------
    $GLOBALS['TL_DCA']['tl_calendar_events']['fields']['freeEntry_gallery'] = array
    (
                
    'label'                   => &$GLOBALS['TL_LANG']['tl_calendar_events']['freeEntry_gallery'],
                
    'exclude'                 => true
                
    'inputType'               => 'fileTree'
                
    'eval'                    => array('multiple'=>true'fieldType'=>'checkbox''orderField'=>'freeEntry_gallery_order''files'=>true'mandatory'=>true'isGallery'=>true), 
                
    'sql'                     => "blob NULL" 

    ); 
    Die Ausgabe im Frontend der Website erfolgt via "/templates/event_teaser.html5" über folgenden Befehl:

    PHP-Code:
    <?php echo $this->freeEntry_gallery?>
    Als Ausgabewert erhalte ich folgendes:

    Code:
     a:2:{i:0;s:16:"�y|f��3BQ�";i:1;s:16:"�.|f��3BQ�";}
    Allerdings hätte ich hier gerne die Bilddateinamen inkl. Pfad ausgegeben. Irgendwas stimmt hier nicht und ich hoffe ihr könnte mir weiterhelfen!

  2. #2
    Contao-Nutzer Avatar von aaronl
    Registriert seit
    20.06.2009.
    Beiträge
    111

    Standard

    Zitat Zitat von minstyle Beitrag anzeigen
    Code:
     a:2:{i:0;s:16:"�y|f��3BQ�";i:1;s:16:"�.|f��3BQ�";}
    Das sieht nach einem serialisiertem Array aus.

    Nachdem du das wieder in einen Array umgewandelt hast brauchst du folgendes um aus den binären Daten den Pfad zu bekommen:

    PHP-Code:
    $objFile = \FilesModel::findByPk(String::binToUuid(<element des Arrays>));
    $pfad_zur_datei TL_ROOT.$objFile->path
    So habe ich das bei einer Erweiterung die unter 3.2 läuft umgesetzt.

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

    Standard

    Bei einem fileTree field mit multiple => true werden die einzelnen UUIDs der Dateien serialisiert abgespeichert. Du musst das Feld also vorher deserializen und damit dann die einzelnen Bilder aus der Datenbank holen:
    PHP-Code:
    $objFiles = \FilesModel::findMultipleByIdsdeserialize$this->freeEntry_gallery ) ); 
    String::binToUuid() ist nicht notwendig, afaik.

  4. #4
    Contao-Fan
    Registriert seit
    26.06.2009.
    Beiträge
    266

    Standard

    Vielen Dank für eure Antworten!

    Wie gebe ich denn dann die Bilder aus?

    Dies funktioniert leider nicht:

    PHP-Code:
    <?php 
    $objFiles 
    = \FilesModel::findMultipleByIdsdeserialize$this->freeEntry_gallery ) );
    echo 
    $objFiles;
    ?>

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

    Standard

    Zitat Zitat von minstyle Beitrag anzeigen
    Vielen Dank für eure Antworten!

    Wie gebe ich denn dann die Bilder aus?

    Dies funktioniert leider nicht:

    PHP-Code:
    <?php 
    $objFiles 
    = \FilesModel::findMultipleByIdsdeserialize$this->freeEntry_gallery ) );
    echo 
    $objFiles;
    ?>
    $objFiles ist, wie der Name schon sagt, ein File Objekt, genau genommen eine Linked List an File Objekten. Durch diese Liste iterierst du zB so:
    PHP-Code:
    while( $objFiles->next() ) { ... } 
    Innerhalb der Schleife greifst du dann mit $objFiles->path auf den Pfad zur Datei zu, welchen du dann ggf. an $this->getImage(...) direkt übergeben kannst (falls du die Bilder nicht in Original Größe haben willst).

  6. #6
    Contao-Fan
    Registriert seit
    26.06.2009.
    Beiträge
    266

    Standard

    Danke für deine Antwort, aber das geht mir schon zu sehr in die Tiefe. Ich bin nicht der klassische Programmierer!

    Ich weiß hier leider nicht, wie ich diese Schleife erstellen muss, um eine Ausgabe der Bilder zu erhalten.
    Geändert von minstyle (12.12.2014 um 11:35 Uhr)

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
  •