Ankündigung

Einklappen
Keine Ankündigung bisher.

Select-Filter Ausgabe sortieren

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Select-Filter Ausgabe sortieren

    Hallo,
    wie kann die Ausgabe des Filters "Auswahl einfach (Select/Radio)" alphabetisch sortiert ausgegeben werden?
    Die Angabe „XXX auswählen“ soll bei einem nicht ausgewählten Filter im Select-Menü sichtbar sein. Derzeit wird die Ausgabe unsortiert bzw. nach der Reihenfolge der Eingabe aufgelistet.

  • #2
    Das macht man im Filter-Template z.B. an Hand des Labels

    Code:
     <?php
      $arrOptions = array();
      foreach($this->options as $option)
      {
      $k = standardize($option['label']);
       
      $arrOptions[$k] = $option;
      }
       
      ksort($arrOptions);
      ?>
       
      <div <?php echo $this->cssID; ?> class="widget <?php echo $this->class; ?> block">
      <fieldset class="select_container">
      <?php if($this->label): ?><legend><?php echo $this->label; ?></legend><?php endif; ?>
      <select name="<?php echo $this->name; ?>">
      <?php foreach($arrOptions as $option): ?>
      <option value="<?php echo $option['value']; ?>"<?php if($option['selected']):?>selected<?php endif;?>><?php echo $option['label']; ?> <?php if($option['id']): ?>(<?php echo $this->countValue($option['value']); ?>)<?php endif; ?></option>
      <?php endforeach; ?>
      </select>
      </fieldset>
      <?php if($this->description): ?><div class="description"><?php echo $this->description; ?></div><?php endif; ?> 
      </div>
    http://www.premium-contao-themes.com

    Kommentar


    • #3
      Hallo,

      ich habe den Filter customcatalog_filter_select.html5 kopiert und unter customcatalog_filter_select_sort.html5 wie nachfolgend gezeigt angepasst und gespeichert. Aber die Sortierung der Listenelemente funktioniert nicht. Die Ausgabe ist wie im Screenshot in #1 gezeigt nach wie vor unsortiert. Der Filter und die Abhängigkeiten funktionieren, nur werden die einzelnen Inhalte im Selectmenü unsortiert aufgelistet.


      Datei: customcatalog_filter_select_sort.html5
      PHP-Code:
      <?php
      /**
       * Select/Radio-Button filter template
       */
      ?>

      <?php
          $arrOptions 
      = array();
          foreach(
      $this->options as $option)
          {
              
      $k standardize($option['label']);
              
      $arrOptions[$k] = $option;
          }
          
      ksort($arrOptions);
      ?>

      <?php if($this->radio): ?>
      <div <?php echo $this->cssID?> class="widget <?php echo $this->class?> block">
      <fieldset class="radio_container">
          <?php if($this->label): ?><legend><?php echo $this->label?></legend><?php endif; ?>
          <?php foreach($this->options as $option): ?>
          <div>
              <input type="radio" class="radio" name="<?php echo $this->name?>" value="<?php echo $option['value']; ?><?php if($option['selected']):?>checked<?php endif;?> ><?php echo $option['label']; ?> <?php if($option['id']): ?>(<?php echo $this->countValue($option['value']); ?>)<?php endif; ?>
              <label id="lbl_<?php echo $option['id']; ?>" for="opt_<?php echo $option['id']; ?>"><?php echo $option['label']; ?></label>
          </div>
          <?php endforeach; ?>
          <?php if($this->description): ?><div class="description"><?php echo $this->description?></div><?php endif; ?>
      </fieldset>
      <?php if($this->description): ?><div class="description"><?php echo $this->description?></div><?php endif; ?>    
      </div>
      <?php else: ?>
      <div <?php echo $this->cssID?> class="widget <?php echo $this->class?> block">
      <fieldset class="select_container">
          <?php if($this->label): ?><legend><?php echo $this->label?></legend><?php endif; ?>
          <select name="<?php echo $this->name?>">
          <?php foreach($this->options as $option): ?>
          <option value="<?php echo $option['value']; ?>"<?php if($option['selected']):?>selected<?php endif;?>><?php echo $option['label']; ?> <?php if($option['id']): ?>(<?php echo $this->countValue($option['value']); ?>)<?php endif; ?></option>
          <?php endforeach; ?>
          </select>
      </fieldset>
      <?php if($this->description): ?><div class="description"><?php echo $this->description?></div><?php endif; ?>    
      </div>
      <?php endif; ?>




      Hier noch die Konfiguration des Filters:

      Klicke auf die Grafik für eine vergrößerte Ansicht

Name: select-filter-config.png
Ansichten: 143
Größe: 49,2 KB
ID: 7957




      Kommentar


      • #4
        Ist auch falsch abgeschrieben. Du gibst in der foreach für die Ausgabe weiterhin $this->options aus. Der sortierte Array ist aber in der Variable $arrOptions. Bitte genau meine Vorlage beachten.
        http://www.premium-contao-themes.com

        Kommentar


        • #5
          Hallo,
          der Filter gibt jetzt die Werte sortiert aus.
          Allerdings wird die Ausgabe, die durch die Aktivierung von "Filter zurücksetzen hinzufügen" mit einsortiert, diese sollte aber an oberster Stelle angezeigt werden, ansonsten ist ja bereits die erste Option ausgewählt.

          Klicke auf die Grafik für eine vergrößerte Ansicht

Name: select-filter-sortiert-leere-filteroption.png
Ansichten: 131
Größe: 15,8 KB
ID: 7998

          Ist es möglich, diese Option an oberster Stelle einzufügen?
          Wenn ja, wie?

          Ich bin kein PHP-Programmierer und benötige eine detaillierte Anleitung, Danke.

          Kommentar


          • #6
            Geht nur durch manuelles platzieren z.B. via array_insert.

            PHP-Code:
            <?php

            // leere option abgreifen
            $arrBlankOption $this->options[0];
            // leere option entfernen
            unset($this->options[0]);

            $arrOptions = array();
            foreach(
            $this->options as $option)
            {
            $k standardize($option['label']);
            $arrOptions[$k] = $option;
            }
            ksort($arrOptions);

             
            // leere Option wieder einsetzen
            array_insert($arrOptions,0,array($arrBlankOption));

            ?>

            Ich bin kein PHP-Programmierer und benötige eine detaillierte Anleitung, Danke.
            Das sollte aber ein PHP-Programmierer machen, da sonst die ganze Seite lahmgelegt werden kann, wenn man Fehler einbaut.
            Zuletzt geändert von Tim; 01.08.2017, 11:07.
            http://www.premium-contao-themes.com

            Kommentar


            • #7
              Hätte hierzu nochmal eine Nachfrage....habe die Sortierung des Filters umgesetzt wie oben beschrieben. Filter funktioniert auch, aber die Leere Option bleibt weiterhin einsortiert

              Das ist mein Code:
              Code:
               <?php
              /**
               * Select/Radio-Button filter template
               */
              ?>
              
               <?php
              
                  // leere option abgreifen
                  $arrBlankOption = $this->options[0];
                  // leere option entfernen
                  unset($this->options[0]);
              
                  $arrOptions = array();
                  foreach($this->options as $option)
                  {
                  $k = standardize($option['label']);
                  $arrOptions[$k] = $option;
                  }
                  ksort($arrOptions);
              
                   // leere Option wieder einsetzen
                  array_insert($arrOptions,0,array($arrBlankOption));
              
              ?>
              
              <?php if($this->radio): ?>
              <div <?php echo $this->cssID; ?> class="widget <?php echo $this->class; ?> block">
              <fieldset class="radio_container">
                  <?php if($this->label): ?><legend><?php echo $this->label; ?></legend><?php endif; ?>
                  <?php foreach($arrOptions as $option): ?>
                  <div>
                      <input type="radio" class="radio" name="<?php echo $this->name; ?>" value="<?php echo $option['value']; ?>" <?php if($option['selected']):?>checked<?php endif;?> ><?php echo $option['label']; ?> <?php if($option['id']): ?>(<?php echo $this->countValue($option['value']); ?>)<?php endif; ?>
                      <label id="lbl_<?php echo $option['id']; ?>" for="opt_<?php echo $option['id']; ?>"><?php echo $option['label']; ?></label>
                  </div>
                  <?php endforeach; ?>
                  <?php if($this->description): ?><div class="description"><?php echo $this->description; ?></div><?php endif; ?>
              </fieldset>
              <?php if($this->description): ?><div class="description"><?php echo $this->description; ?></div><?php endif; ?>    
              </div>
              <?php else: ?>
              <div <?php echo $this->cssID; ?> class="widget <?php echo $this->class; ?> block">
              <fieldset class="select_container">
                  <?php if($this->label): ?><legend><?php echo $this->label; ?></legend><?php endif; ?>
                  <select name="<?php echo $this->name; ?>">
                  <?php foreach($arrOptions as $option): ?>
                  <option value="<?php echo $option['value']; ?>"<?php if($option['selected']):?>selected<?php endif;?>><?php echo $option['label']; ?> <?php if($option['id']): ?>(<?php echo $this->countValue($option['value']); ?>)<?php endif; ?></option>
                  <?php endforeach; ?>
                  </select>
              </fieldset>
              <?php if($this->description): ?><div class="description"><?php echo $this->description; ?></div><?php endif; ?>    
              </div>
              <?php endif; ?>
              "Produktaketegorie filtern" ist aber immer noch mit einsortiert...was habe ich falsch gemacht?
              Klicke auf die Grafik für eine vergrößerte Ansicht

Name: filter.JPG
Ansichten: 138
Größe: 67,5 KB
ID: 8622

              Kommentar


              • #8
                Mhh... genauso wird es gemacht.
                Hast du standardmäßig die Leere Option nicht an erster Stelle?
                http://www.premium-contao-themes.com

                Kommentar


                • #9
                  Doch, die leere Option ist standardmäßig an erster Stelle...ich habe in der Hinsicht jedenfalls nichts geändert.

                  Kommentar


                  • #10
                    Zitat von Christina Beitrag anzeigen
                    Doch, die leere Option ist standardmäßig an erster Stelle...ich habe in der Hinsicht jedenfalls nichts geändert.
                    Und wenn du die leere Option nicht einsetzen lässt im Code, ist auch keine da?
                    http://www.premium-contao-themes.com

                    Kommentar


                    • #11
                      Hm, wenn ich sie im Code nicht einsetzen lasse, ist sie nur noch einsortiert da, aber nicht mehr an erster Stelle

                      Kommentar


                      • #12
                        Zitat von Christina Beitrag anzeigen
                        Hm, wenn ich sie im Code nicht einsetzen lasse, ist sie nur noch einsortiert da, aber nicht mehr an erster Stelle
                        Das darf nicht der Fall sein. Bitte prüfe exakt gegenüber den Standard-Templates. Die leere Option muss immer an Position 0 (erste Position) stehen und auch nie doppelt erscheinen.
                        http://www.premium-contao-themes.com

                        Kommentar


                        • #13
                          Ich wollte hier die Vorlage für Tag-Sortierung verwenden, allerdings nach ID. Problem ist, dass hier die führende Null nicht berücksichtigt wird. Also die 11 vor der 2 einsortiert wird.
                          Wie kann ich hier die $k Variable anpassen?

                          Kommentar


                          • #14
                            natsort() geht leider nur für Werte. Ein direktes knatsort hat php nicht. Man würde mit array_flips arbeiten, aber das ist aufwendiger als den Schlüssel zu "padden"

                            PHP-Code:
                            $k sprintf("%04d"$k); // 4 nullen vor Wert 
                            funzt das, oder habe ich einen Denkfehler?
                            ---
                            Mhh... ksort funzt doch eigentlich absolut richtig, wenn es reine numerische Werte sind. Wo kommt denn deine führende Null her? Die ID speichert ohne führende Null.
                            Zuletzt geändert von Tim; 21.12.2017, 08:34.
                            http://www.premium-contao-themes.com

                            Kommentar


                            • #15
                              Also dass funktioniert nicht. Hier wird nur noch ein einzelner Wert ausgegeben.
                              Das mit der führenden Null ist ja nicht tatsächlich in der ID, Das führt aber genau dazu, dass hier die 11 vor der 2 erscheint.

                              Kommentar

                              Lädt...
                              X