Contao-Camp 2024
Ergebnis 1 bis 9 von 9

Thema: Frontend-Filter Option "Nur verfügbare Tags" soll nicht verfügbare nicht ausblenden

  1. #1
    Contao-Nutzer
    Registriert seit
    07.07.2016.
    Beiträge
    65

    Standard Frontend-Filter Option "Nur verfügbare Tags" soll nicht verfügbare nicht ausblenden

    Hallo Community

    Beim Frontend-Filter besteht ja bei der Mehrfachauswahl die Option, nur verfügbare Tags anzuzeigen. Das führt dazu, dass nicht mehr mögliche Tags komplett ausgeblendet werden. Das ist technisch gesehen natürlich korrekt, von der Usability her macht es den Filter allerdings ziemlich "nervös", da sich die Grösse - vor allem bei grossen Filterformularen - ständig ändert.

    Deshalb würde ich gerne erreichen, dass immer alle Auswahlmöglichkeiten angezeigt werden - Wo aber eine Auswahl nicht mehr möglich ist, diese per Disabled und mit CSS-Klasse ausgegraut wird.

    So vom ersten Blick her würde ich jetzt das Template mm_filteritem_checkbox.html5 anpassen.

    Aber vielleicht hat schon jemand umgesetzt? Denke, diese Anpassung macht generell Sinn.

    LG

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

    Standard

    uff...

    Idee: mach die Filterregel doppelt - einmal mit und einmal ohne "nur mögliche Tags" ... im Filter-Template musst Du in der Schleife, in der alle Filter ausgegeben werden, die beiden raus fischen und "mergen"

    sofern dadurch die Filterung bzw. die URL-Generierung durcheinander kommt, könntest Du im Filter-Template oder ggf. in dem Template des Filterwidgets eine API-Abfrage machen, um alle Checkboxwerte zu ermitteln

  3. #3
    Contao-Nutzer
    Registriert seit
    07.07.2016.
    Beiträge
    65

    Standard

    Ja, Uff...

    Dein Ansatz ist interessant! Das werde ich mal probieren und gebe Rückmeldung.

    Danke dir!

  4. #4
    Contao-Nutzer
    Registriert seit
    07.07.2016.
    Beiträge
    65

    Standard

    Hallo zonky

    Habe es leider nicht so hingekriegt, wie du es vorgeschlagen hast. Ich bekam im Template keine unterschiedliche Arrays für die selbe Auswahlfelder hin, dementsprechend gab es nichts zu mergen. Vielleicht habe ich dich da aber auch falsch verstanden.

    Ich habe aber mal meinen ursprünglichen Plan weiterverfolgt. Und es scheint zu gehen, wenn auch mit Unschönheiten:

    1. DB-Abfrage in Template, aber nach meinem Empfinden spricht hier nichts dagegen (oder?). Die Optionen sind in einer eigenen MM-Tabelle.
    2. Ein bisschen viele Schleifen... Mal schauen, ob ich das noch reduzieren kann. Aber ich wollte so wenig wie möglich das Original-Template massakrieren.


    Würde mich wunder nehmen, was du dazu meinst.

    Danke dir vielmals und Gruss

    Template 'mm_filteritem_checkbox.html5'
    PHP-Code:
    <?php $this->extend('mm_filteritem_default'); ?>

    <?php $this->block('formfield'); ?>
    <?php 
    if(is_array($this->options) && count($this->options)>0): ?>
    <fieldset id="ctrl_<?= $this->urlparam ?>" class="checkbox_container">
    <?php
    $count 
    0;


    //Einlesen aller Optionen
    $this->import('Database'); 
    $result $this->Database->prepare("SELECT id, name FROM mm_companydataoption WHERE pid = ? AND published = 1")->execute(1);

    $all = array();

    while(
    $result->next())
    {
      
    $href  "";
      
    $class "disabled";
      
    $active 0;
      
      
    //Abgleich mit den ausgewählten Optionen. Wenn vorhanden, werden die Array-Schlüssel mit den Werten der ausgewählten Optionen überschrieben.
      
    foreach($this->options as $selected)
      {
        if(
    $result->id == $selected['key'])
        {
          
    $href $selected['href'];
          
    $class $selected['class'];
          
    $active $selected['active'];
        }
      }
      
    $all[] = array
      (
        
    'key'   => $result->id,
        
    'value' => $result->name,
        
    'href'  => $href,
        
    'class' => $class,
        
    'active' => $active
      
    );
    }

    foreach (
    $all as $option):
        
    $class = ($count == 0) ? 'first ' '';
        
    $class .= ($count == count($this->options) - 1) ? 'last ' '';
        
    $class .= ($count == 1) ? 'even' 'odd';
        
    $class .= (strlen($option['class'])) ? ' ' $option['class'] : '';
    ?>

    <?php
        $field 
    sprintf(

           
    //Ergänzung für weiteren Wert
            
    '<input type="checkbox" name="%s[]" id="opt_%s_%s" class="checkbox%s" value="%s"%s%s />',
            
    $this->urlparam,
            
    $this->urlparam,
            
    $count,
            
    $this->submit ' submitonchange' '',
            empty(
    $option['key']) ? '--none--' $option['key'],
            (
    $option['active'] ? ' checked="checked"' ''),

            
    //Wenn in Class 'disabled' vorkommt, dann wird das Feld deaktiviert.
            
    (preg_match("/disabled/",$option['class']) ? ' DISABLED' '')
        );
        
    $label sprintf(
            
    '<label id="lbl_%s_%s" for="opt_%s_%s">%s%s</label>',
            
    $this->urlparam,
            
    $count,
            
    $this->urlparam,
            
    $count,
            
    $option['value'],
            ((
    $this->showCount) ? ' <span class="count">(' $this->count[$option['key']] . ')</span>' '')
        );
        
    $count++;
    ?>
    <span class="<?= $class ?>"><?= $field ?> <?= $label ?></span>
    <?php endforeach; ?>
    </fieldset>
    <?php endif; ?>
    <?php $this
    ->endblock(); ?>
    Geändert von DanEi (09.05.2019 um 21:28 Uhr)

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

    Standard

    ich meinte...

    in deinem Filter hatst du ja die Filterregel "Mehrfachauswahl auf Tags" - das Ding duplizieren damit die Ausgaben 2x im Filtertemplate ankommen - im Normalfall müssten die Checkboxen 2x erscheinen - der URL-Parameter muss natürlich 1x geändert werden, damit der nicht gleich ist! Anschließend im Template die Ausgaben abfangen und anpassen.


    Zum Code: uff! für MM gibt es eine API, mit der man die Tabellen abfragen kann - bitte Handbuch mal lesen! ich will die 260h nicht umsonst investiert haben!!
    https://metamodels.readthedocs.io/de....html#beispiel

  6. #6
    Contao-Nutzer
    Registriert seit
    07.07.2016.
    Beiträge
    65

    Standard

    Ah, ja, das mit der API habe ich jetzt tatsächlich völlig ausgelassen... Mea culpa! Werde es somit noch anpassen.

    Danke dir und Gruss

  7. #7

  8. #8
    Contao-Nutzer
    Registriert seit
    07.07.2016.
    Beiträge
    65

    Standard

    Aber sicher! Ein (noch) bescheidener Beitrag für grosse Arbeit!

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

    Standard

    kannst Du mir deine E-Mail per PN zusenden - ich muss auch eine Rechnung erstellen und zusenden...

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
  •