Contao-Camp 2024
Ergebnis 1 bis 13 von 13

Thema: DCA metaFields mit filetree

  1. #1
    Contao-Nutzer
    Registriert seit
    03.01.2010.
    Beiträge
    152

    Standard DCA metaFields mit filetree

    ich benötige in der Dateiverwaltung die Möglichkeit Bilder mit Audio Dateien zu verlinken.
    Bin dieser Anleitung gefolgt und das Feld wird auch angelegt, allerdings nur als einfaches Eingabefeld
    https://docs.contao.org/dev/referenc...-wizard-fields

    Danach habe ich das DCA folgendermaßen angepasst
    "contao/dca/tl_files.php"
    PHP-Code:
    <?php
    $GLOBALS
    ['TL_DCA']['tl_files']['fields']['meta']['eval']['metaFields']['audiolink'] = [
        
    'inputType' => 'fileTree',
        
    'eval' => ['filesOnly' => true'fieldType' => 'radio''mandatory' => false],
        
    'sql' => ['type' => 'string''length' => 255'default' => ''],
    ];
    Doch es erscheint immer nur das einfache Eingabefeld (Cache wurde geleert)
    Finde leider auch keine weiteren Infos diesbezüglich.

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

    Standard

    Das geht leider nicht, der metaWizard unterstützt nur einfache Textfelder (und seit Contao 4.9.10 auch textarea).

    Du könntest stattdessen ein Feld zu tl_files selbst hinzufügen:
    PHP-Code:
    // contao/dca/tl_files.php
    use Contao\CoreBundle\DataContainer\PaletteManipulator;

    $GLOBALS['TL_DCA']['tl_files']['fields']['foobar'] = [
        
    'inputType' => 'fileTree',
        
    'eval' => ['filesOnly' => true'fieldType' => 'radio''mandatory' => false],
        
    'sql' => "binary(16) NULL"
    ];

    PaletteManipulator::create()
        ->
    addField('foobar'null)
        ->
    applyToPalette('default''tl_files')

    Allerdings kannst du dann diese Datei natürlich nur pro Datei auswählen - und nicht pro Datei und Sprache.

  3. #3
    Contao-Nutzer
    Registriert seit
    03.01.2010.
    Beiträge
    152

    Standard

    Hallo Spooky,
    vielen Dank. Diese Lösung würde mir reichen da es eh nur eine Sprache gibt.

    Ich hab das mal eingebaut und das Feld zum auswählen der Datein funktioniert.

    Wenn ich aber eine Audio Datei auswähle und auf "Speichern" klicke dann wird die Verknüpfung nicht gespeichert, denn im FillTree sehe ich die Zuordnung nicht mehr
    Was könnte da schief laufen?

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

    Standard

    Poste deinen Code.

  5. #5
    Contao-Nutzer
    Registriert seit
    03.01.2010.
    Beiträge
    152

    Standard

    PHP-Code:
    use Contao\CoreBundle\DataContainer\PaletteManipulator;

    $GLOBALS['TL_DCA']['tl_files']['fields']['audiolink'] = [
        
    'inputType' => 'fileTree',
        
    'eval' => ['filesOnly' => true'fieldType' => 'radio''mandatory' => false],
        
    'sql' => "binary(16) NULL"
    ];

    PaletteManipulator::create()
        ->
    addField('audiolink'null)
        ->
    applyToPalette('default''tl_files')


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

    Standard

    Also ich kann kein Problem feststellen und habe den von dir geposteten Code auch erfolgreich bei mir lokal getestet.

  7. #7
    Contao-Nutzer
    Registriert seit
    03.01.2010.
    Beiträge
    152

    Standard

    bei mir sieht es so aus:

    Datei wurde im FillTree ausgewählt:
    Bildschirmfoto vom 2020-12-14 12-00-26.png

    Nach dem speichern:
    Bildschirmfoto vom 2020-12-14 12-00-46.png

    Wenn ich mir die Template Variablen ausgebe, dann ist die verknüpfte Datei nicht dabei
    Woran könnte das liegen?

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

    Standard

    Hast du nach der DCA Änderung ein composer install und vendor/bin/contao-console contao:migrate --no-interaction ausgeführt?

  9. #9
    Contao-Nutzer
    Registriert seit
    03.01.2010.
    Beiträge
    152

    Standard

    Ah ja, das hatte ich nicht.
    Ist jetzt ausgeführt und Datei wird nach dem speichern im Backend angezeigt.

    Aber wenn ich mir die Template Variablen in "gallery_default" ausgebe ist die Verknüpfung nicht drin

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

    Standard

    Du musst dir das entsprechende FilesModel Objekt holen, damit du drauf zugreifen kannst.

  11. #11
    Contao-Nutzer
    Registriert seit
    03.01.2010.
    Beiträge
    152

    Standard

    hab es hiermit probiert, aber kein Erfolg

    PHP-Code:
    <?php foreach ($this->body as $class => $row): ?>
        <?php foreach ($row as $col): ?>
            <?php if ($col->addImage): ?>
                <div class="masonry--item" itemscope itemtype="http://schema.org/ImageGallery">
                    <div class="content">
                        <?php
                        $objFile 
    = \FilesModel::findByUuid($col->audiolink);
                        
    $strPath $objFile->path;

                        echo 
    $strPath;
                        
    ?>
                    </div>
                </div>
            <?php endif; ?>
        <?php endforeach; ?>
    <?php 
    endforeach; ?>
    oder wie kann ich das Element holen?

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

    Standard

    Es müsste wenn dann so sein:
    PHP-Code:
    $image FilesModel::findByPath($col->singleSRC);
    $audio FilesModel::findByUuid($image->audiolink); 

  13. #13
    Contao-Nutzer
    Registriert seit
    03.01.2010.
    Beiträge
    152

    Standard

    Danke dir vielmals, jetzt geht es.
    Es fehlte einzig nur noch "->path"

    PHP-Code:
    $imageModel = \FilesModel::findByPath($col->singleSRC);
    $audioPath = \FilesModel::findByUuid($imageModel->audiolink)->path

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
  •