Ergebnis 1 bis 16 von 16

Thema: fileTree - Unterscheidung Ist Auswahl Verzeichnis oder Datei

  1. #1
    Alter Contao-Hase Avatar von Franko
    Registriert seit
    22.06.2009.
    Beiträge
    1.243
    Partner-ID
    6122

    Standard fileTree - Unterscheidung Ist Auswahl Verzeichnis oder Datei

    Hallo,
    teste mit dieser Config:

    Code:
    <?php 
    // rsce_my_element_config.php 
    return array( 
        'label' => array('Custom: Bildergalerie', ''), 
        'types' => array('content'), 
        'contentCategory' => 'Inhalte: Custom', 
        'standardFields' => array('cssID'), 
        'wrapper' => array( 
            'type' => 'none', 
        ), 
        'fields' => array( 
            'multiSRC' => array 
            ( 
                'label'                   => array('Bildeauswahl', 'Beschreibung'), 
                'inputType'               => 'fileTree', 
                'eval'                    => array('multiple'=>true, 'fieldType'=>'checkbox', 'orderField'=>'orderSRC', 'files'=>true, 'mandatory'=>true), 
                'load_callback' => array 
                ( 
                    array('tl_content', 'setMultiSrcFlags') 
                ) 
            ), 
        ), 
    );
    Dabei hat man nun die Möglichkeit entweder nur ein Verzeichnis oder mehrere/einzelne (in diesem Fall Fotos) auszuwählen.
    Wähle ich nur ein Verzeichnis kriege ich die Ausgabe hin.

    Wählt man aber ein Verzeichnis und zusätzlich darin weitere einzelne Fotos aus - sollen ja nur die ausgewählten Fotos ausgegeben werden.

    Wie kann ich das im template unterscheiden? Über $this->multiSRC erhalte ich ja nur ein Array mit den ID's ...
    Carpe diem ...

  2. #2
    Alter Contao-Hase Avatar von Franko
    Registriert seit
    22.06.2009.
    Beiträge
    1.243
    Partner-ID
    6122

    Standard

    Hm,
    sehe gerade, das das Inhaltselement "Galerie" da auch nicht unterscheidet. Wenn ich hier zwei Fotos auswähle UND das Verzeichnis werden alle Fotos aus dem Verzeichnis herangezogen.
    War das nicht mal anders? Erwarten würde ich das dann NUR die beiden Fotos genutzt werden ...
    Carpe diem ...

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

    Standard

    Du musst dir ansehen was tl_content::setMultiSrcFlags genau macht. Das ändert das DCA, aber nur wenn der Typ des Elements der richtige ist. Du hast in deinem Fall ja kein Inhaltselement vom Typ gallery.

    Du solltest es so machen:
    PHP-Code:
    <?php 

    return array( 
        
    'label' => array('Custom: Bildergalerie'''), 
        
    'types' => array('content'), 
        
    'contentCategory' => 'Inhalte: Custom'
        
    'standardFields' => array('cssID'), 
        
    'wrapper' => array( 
            
    'type' => 'none'
        ), 
        
    'fields' => array( 
            
    'multiSRC' => array 
            ( 
                
    'inputType' => 'standardField'
                
    'eval'      => array(
                    
    'multiple'   => true
                    
    'fieldType'  => 'checkbox'
                    
    'orderField' => 'orderSRC'
                    
    'files'      => true
                    
    'mandatory'  => true,
                    
    'isGallery'  => true,
                    
    'extensions' => \Config::get('validImageTypes')
                )
            ), 
        ), 
    );

  4. #4
    Alter Contao-Hase Avatar von Franko
    Registriert seit
    22.06.2009.
    Beiträge
    1.243
    Partner-ID
    6122

    Standard

    Hi,
    ich habe es bei 'inputType' => 'fileTree' belassen.

    Das mit den Auswahlen funktioniert soweit. Ich erhalte im FE identische Angaben wie im BE/Gallery, egal ob ich einzelne Dateien und/oder deren Order auswähle.
    Allerdings spiegelt die FE Ausgabe nicht die BE Sortierung wieder - Wenn jemand hierzu Vorschläge hat o. für den unteren Code weitere Vereinfachungen kennt - bin offen ...

    Danke
    Frank


    rsce_my_testing_config.php:

    PHP-Code:
    <?php 
    // rsce_my_testing_config.php 
    return array( 
      
    'label' => array('bxSlider''Inhalte über den bxSlider darstellen.'), 
      
    'types' => array('content'), 
      
    //'contentCategory' => ' Eigene Elemente', 
      
    'standardFields' => array('cssID'), 
      
    'wrapper' => array ( 
        
    'type' => 'none'
      ), 
      
    'fields' => array ( 
      
        
    'NoteInfo' => array (
          
    'label' => array( 'Hinweis: '''),
          
    'inputType' => 'text',
          
    'default' => 'Das "j_bxslider" Template muss im Seitenlayout eingebunden sein.',      
           
    'eval' => array ( 
            
    'disabled' => true'readonly' => truestyle => 'margin-top: 0px; margin-bottom: 18px; color: #000; background: #e9f0f7; border: 0px; ',
          ),             
         ),      
      
        
    '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' => 'fileTree'
          
    'eval' => array ( 
            
    'isGallery' => true'multiple' => true'fieldType' => 'checkbox''orderField' => 'orderSRC''files' => true'mandatory' => true'extensions' => \Config::get('validImageTypes'), 
          ),             
        ),
        
        
    'size' => array ( 
          
    'label' => array('Bildgröße''Hier können Sie die Abmessungen des Bildes und den Skalierungsmodus festlegen.'), 
          
    'inputType' => 'imageSize'
          
    'options' => \System::getImageSizes(),
          
    'eval' => array ( 
            
    'rgxp' => 'digit''includeBlankOption' => true'tl_class' => 'w50 clr',
          ), 
        ),       

      ), 
    );
    rsce_my_testing.html5:

    PHP-Code:
    <?php  

    $tmpArray 
    = array();
    $data $this->multiSRC;

    foreach (
    $data as $dataIndex) {

        
    $tmpArray[] = $dataIndex;

        
    $dataType = \FilesModel::findByPk($dataIndex)->type;
        
    $dataPid = \StringUtil::binToUuid(\FilesModel:: findByPk($dataIndex)->pid);

        if ( 
    $dataType == 'file' ) {
      
            if (!
    in_array($dataPid$tmpArray)) {

                 if (
    $image $this->getImageObject($dataIndex$this->size)) {
                    
    $this->insert('picture_default'$image->picture);
                }  
            }    
        }
      
        if ( 
    $dataType == 'folder' ) {
          
              
    $files = \FilesModel::findByPid(\StringUtil::uuidToBin($dataIndex));
          
            foreach(
    $files as $file) {
        
                if (
    $image $this->getImageObject(\StringUtil::binToUuid($file->uuid), $this->size)) {
                    
    $this->insert('picture_default'$image->picture);
                }
            }      
        }

    }

    $tmpArray $tmpArray = array();

    ?>
    Geändert von Franko (16.06.2018 um 13:58 Uhr)
    Carpe diem ...

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

    Standard

    Ich würde an deiner Stelle 'inputType' => 'standardField' benutzen, da dann tatsächlich tl_content.multiSRC verwendet wird.

    Du berücksichtigst bei der Ausgabe die Sortierung schlicht und einfach gar nicht . Sieh dir den Code des eigentlichen Galerie Inhaltselementes an: https://github.com/contao/core-bundl....php#L183-L212

  6. #6
    Alter Contao-Hase Avatar von Franko
    Registriert seit
    22.06.2009.
    Beiträge
    1.243
    Partner-ID
    6122

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Ich würde an deiner Stelle 'inputType' => 'standardField' benutzen, da dann tatsächlich tl_content.multiSRC verwendet wird.

    Du berücksichtigst bei der Ausgabe die Sortierung schlicht und einfach gar nicht . Sieh dir den Code des eigentlichen Galerie Inhaltselementes an: https://github.com/contao/core-bundl....php#L183-L212
    Mann O Mann, da wühlt man sich durch Google/Forum und testet alles Mögliche anstatt gleich auf Dich zu hören:

    Auszug rsce_my_testing_config.php:

    PHP-Code:
        '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' => \Config::get('validImageTypes'), 
          ),    
        ), 
    rsce_my_testing.html5:
    PHP-Code:
    <?php  

    $dataSorted 
    array_map('\StringUtil::binToUuid'deserialize($this->orderSRCtrue)); 

    foreach ( 
    $dataSorted as $data ) {

        if (
    $image $this->getImageObject($data$this->size)) {
            
    $this->insert('picture_default'$image->picture);
        }  

    }
    ?>
    That's all - Funktioniert!!

    Dank
    Carpe diem ...

  7. #7
    Contao-Nutzer
    Registriert seit
    23.05.2012.
    Beiträge
    77

    Standard

    Zitat Zitat von Franko Beitrag anzeigen
    rsce_my_testing.html5:
    PHP-Code:
    <?php  

    $dataSorted 
    array_map('\StringUtil::binToUuid'deserialize($this->orderSRCtrue)); 

    foreach ( 
    $dataSorted as $data ) {

        if (
    $image $this->getImageObject($data$this->size)) {
            
    $this->insert('picture_default'$image->picture);
        }  

    }
    ?>
    Anschlussfrage zum Thema: Wie kann ich denn den ausgegeben Bildern im Template direkt eine Bildgröße mitgeben, in der das System die ausgeben soll? Da gab es doch einen Weg, aber so richtig funktionieren will das bei mir nicht. Irgendwie so etwas: ($imageId->image, array('200','100'))):

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

    Standard

    PHP-Code:
    [nullnull123
    Die Bildgröße ist die dritte Stelle im Array.

  9. #9
    Contao-Nutzer
    Registriert seit
    23.05.2012.
    Beiträge
    77

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    PHP-Code:
    [nullnull123
    Die Bildgröße ist die dritte Stelle im Array.
    Oh, da hast Du mich missverstanden.

    Ich versuche mir gerade zusammen-zu-frankensteinen, wie ich da eine fixe Größe reinkriege, z.B. 200x100 Pixel oder so.

    Beispiel meines aktuellen Standes, der nicht funktioniert (bin nicht wirklich firm in php, Original und einen Fehlversuch habe ich auskommentiert drin gelassen):

    PHP-Code:
    <?php   

    $dataSorted 
    array_map('\StringUtil::binToUuid'deserialize($this->orderSRCtrue));  

    foreach ( 
    $dataSorted as $data ) { 

    //     if ($image = $this->getImageObject($data, $this->size)) {
    //     if ($image = $this->arrData['getImageObject']($data->image, array('100','100'))    {
        
    if ($image $this->getImageObject($data, ($data->image, array('200','100')))) {
            
    $this->insert('picture_default'$image->picture); 
        }   


    ?>

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

    Standard

    Du musst an der dritten Stelle im Array entweder eine Bildgröße angeben, oder einen Modus zur Bearbeitung des Bildes. Folgende Modi stehen zur Verfügung:


  11. #11
    Contao-Nutzer
    Registriert seit
    23.05.2012.
    Beiträge
    77

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Du musst an der dritten Stelle im Array entweder eine Bildgröße angeben, oder einen Modus zur Bearbeitung des Bildes. Folgende Modi stehen zur Verfügung:

    Vielen Dank.

    Hat mich, mangels PHP-Kenntnisse, noch einiges an Rumprobiererei gekostet, aber jetzt klappt’s.
    Der Vollständigkeit halber, falls ich oder jemand anders in Zukunft mal danach sucht, bei mir sieht der Code jetzt so aus:
    PHP-Code:
    <?php
    $dataSorted 
    array_map('\StringUtil::binToUuid'deserialize($this->orderSRCtrue));  

    foreach ( 
    $dataSorted as $data ):

        if (
    $image $this->getImageObject($data, array('',''2))):
            
    $this->insert('picture_default'$image->picture);
        endif;
    endforeach 
    ?>

  12. #12
    Contao-Nutzer
    Registriert seit
    03.05.2020.
    Beiträge
    1

    Standard

    Habe ein ähnliches Problem und komme leider nicht weiter. Im Prinzip möchte ich nur das Downloads Content Element innerhalb eines Custom Elements nutzen.

    Code:
    Code:
    'multiSRC' => array(
    		            'inputType' => 'standardField',
    		           'eval' => array ( 'filesOnly' => true ),   
    		        ),
    Code:
    <?php
    $downloads = array_map('\StringUtil::binToUuid', deserialize($this->multiSRC, true));
    ?>
    
      <ul>
        <?php foreach ($downloads as $file): ?>
          <li class="download-element ext-<?= $file['extension'] ?>">
            <a href="<?= $file['href'] ?>" title="<?= $file['title'] ?>" type="<?= $file['mime'] ?>"><?= $file['link'] ?> <span class="size">(<?= $file['filesize'] ?>)</span></a>
          </li>
        <?php endforeach; ?>
      </ul>

    Und das kommt raus: …

    Code:
    <ul>
    <li class="download-element ext-4">
    <a href="4" title="4" type="4">4 <span class="size">(4)</span></a>
    </li>
    <li class="download-element ext-7">
    <a href="7" title="7" type="7">7 <span class="size">(7)</span></a>
    </li>
    <li class="download-element ext-8">
    <a href="8" title="8" type="8">8 <span class="size">(8)</span></a>
    </li>
    <li class="download-element ext-7">
    <a href="7" title="7" type="7">7 <span class="size">(7)</span></a>
    </li>
    <li class="download-element ext-4">
    <a href="4" title="4" type="4">4 <span class="size">(4)</span></a>
    </li>
    </ul>
    Könnte mir jemand einen Tip geben? Kann ich alternativ einfach das Downloads Element in meinem Custom Element verwenden? Danke!

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

    Standard

    Zitat Zitat von Franko Beitrag anzeigen
    Hm,
    sehe gerade, das das Inhaltselement "Galerie" da auch nicht unterscheidet. Wenn ich hier zwei Fotos auswähle UND das Verzeichnis werden alle Fotos aus dem Verzeichnis herangezogen.
    War das nicht mal anders? Erwarten würde ich das dann NUR die beiden Fotos genutzt werden ...
    ich würde meinen, wenn Verzeichnis angeklickt, werden alle Dateien aus dem Verzeichnis ausgegeben - egal ob angeklickt oder nicht - man kann aber aus einem anderen verzeichnis zusätzlich noch einzelne weitere Dateien anklicken...

  14. #14
    Contao-Fan Avatar von bibib
    Registriert seit
    19.06.2009.
    Ort
    Linz, Oberösterreich
    Beiträge
    637
    Partner-ID
    8517

    Standard

    Ich hätte auch noch eine Anschlussfrage an das Thema: ich würde gerne die Bildauswahl auf einen bestimmten Pfad beschränken, damit der Kunde nicht mit der gesamten Dateiverwaltung überfordert wird. Wenn ich das richtig verstehe, gilt aber 'path' nur für den 'inputType' 'fileTree'?
    Ich hab trotzdem testweise den Pfad ergänzt:

    Code:
    'multiSRC' => array( 
          'inputType' => 'standardField', 
          'eval'      => array(
            'multiple'   => true, 
            'fieldType'  => 'checkbox', 
            'orderField' => 'orderSRC', 
            'files'      => true,
            'path'       => 'files/testbilder/test_01',
            'mandatory'  => false,
            'isGallery'  => true,
            'extensions' => \Config::get('validImageTypes')
          ),
        ),
    Nun wird der Pfad in der Dateiauswahl schon beschränkt, aber ich kann nur mehr die einzelnen Dateien und nicht mehr den Ordner auswählen. Wähle ich den Ordner, kommt eine Fehlermeldung (Sie können nur Dateien oder Ordner innerhalb von "files/testbilder/test_01" auswählen! - Hab ich ja eh gemacht ...)

    Gibt es eine Möglichkeit, auch mit dem 'inputType' 'standardField' den Pfad zu beschränken?

    -----------------------------------------------------------------------------------------------------------
    Edit: Offenbar hab ich den Pfad falsch angegeben, wenn ich die Ebene darüber angebe, also 'path' => 'files/testbilder', verschwindet die Fehlermeldung. Funktioniert scheinbar doch, aber ist das eine korrekte Lösung?
    Geändert von bibib (15.12.2020 um 06:37 Uhr)

  15. #15
    Contao-Nutzer
    Registriert seit
    27.11.2009.
    Ort
    Bremen
    Beiträge
    219
    Partner-ID
    8258

    Standard

    Ich hänge mich mal dran ...

    Versuche gerade, die Frontendausgabe der Bildergalerie zu steuern und nehme dafür das Galerietemplate als Vorlage. Die sieht dann (leicht modifiziert) so aus:
    HTML-Code:
    		<ul class="cols_3 itemscope itemtype="http://schema.org/ImageGallery">
    		  <?php foreach ($this->body as $class => $row): ?>
    		    <?php foreach ($row as $col): ?>
    		      <?php if ($col->addImage): ?>
    		        <li class="<?= $class ?> <?= $col->class ?>">
    		          <figure class="image_container"<?php if ($col->margin): ?> style="<?= $col->margin ?>"<?php endif; ?>>
    		            <?php if ($col->href): ?>
    		              <a href="<?= $col->href ?>"<?= $col->attributes ?><?php if ($col->linkTitle): ?> title="<?= $col->linkTitle ?>"<?php endif; ?>><?php $this->insert('picture_default', $col->picture); ?></a>
    		            <?php else: ?>
    		              <?php $this->insert('picture_default', $col->picture); ?>
    		            <?php endif; ?>
    		            <?php if ($col->caption): ?>
    		              <figcaption class="caption"><?= $col->caption ?></figcaption>
    		            <?php endif; ?>
    		          </figure>
    		        </li>
    		      <?php endif; ?>
    		    <?php endforeach; ?>
    		  <?php endforeach; ?>
    		</ul>
    Und der Code, den ich darin integrieren möchte, so:
    Code:
    		<?php $dataSorted = array_map('\StringUtil::binToUuid', deserialize($this->orderSRC, true)); 
    		foreach ( $dataSorted as $data ) {
    		    if ($image = $this->getImageObject($data, array('','', 22))) { // Hier die ID der verwendeten Bildgröße
    		        $this->insert('picture_default', $image->picture);
    		    } 
    		} ?>
    Aber wie bringe ich beides zusammen???
    Geändert von Lufine (11.02.2021 um 11:52 Uhr)

  16. #16
    Contao-Nutzer
    Registriert seit
    27.11.2009.
    Ort
    Bremen
    Beiträge
    219
    Partner-ID
    8258

    Standard

    Und gleich noch eine Frage hinterher: Kann ich da irgendwie die Option 'Großansicht/Neues Fenster' mit einbauen?

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
  •