Ankündigung

Einklappen
Keine Ankündigung bisher.

Sortierung der Gruppenausgabe

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

  • Sortierung der Gruppenausgabe

    Moin in die Runde,

    ich habe ein CE erstellt, welches duplizierbare Gruppen enthält. Die Gruppen beinhalten jeweils einige Adressfelder. Wenn ich die Werte im Template nun mit foreach... ausgebe, dann erfolgt die Ausgabe in der Reihenfolge, wie die Gruppen im Inhaltselement angelegt/sortiert sind. Logo.

    Nun möchte ich, dass die Ausgabe der einzelnen Gruppen, alphabetisch nach einen bestimmten Feld in der Gruppe, z.B. der Stadt, erfolgt.

    Gibt es hierfür bereits ein Codebeispiel, wie man die Ausgabe auf diese Weise kontrollieren kann? </ganzDollDaumendrück>

    Viele Grüße!

  • #2
    Ist quasi das hier: https://forum.premium-contao-themes....=7900#post7900

    Allle Werte sammeln und Array sortieren.

    Code:
    $arrSorted = array();
    foreach($this->group('meineGruppe') as $i => $fields)
    {
    ​$arrSorted[] = $this->field('meinFeld#'.$i);
    }
    
    natcasesort($arrSorted);
    
    var_dump($arrSorted);

    http://www.premium-contao-themes.com

    Kommentar


    • #3
      Danke für die schnelle Antwort, Tim. Wird in diesem Beispiel nicht nur 1 Feld herausgegriffen und dieses Array dann sortiert? Das ist nicht das Problem. Entschuldigen wenn ich mich unklar ausgedrückt habe. Da ich die Werte der jeweiligen Gruppe zusammen ausgeben möchte, brauche ich auch noch alle anderen Werte. Ich habe evtl. einen Knoten im Kopf. Ich hatte gehofft irgendwie die Reihenfolge der Elemente in
      Code:
      group('meineGruppe')
      bestimmen zu können, abhängig(sortiert) nach einem bestimmten Feld (z.B. Ort). Dann könnte ich sie wieder wunderbar der Reihe nach in der foreach Schleife ausgeben lassen.

      Aber Du scheinst zu empfehlen, dass ich mir die relevanten Werte der Gruppe, die ich später ausgeben möchte, zunächst in einem mehrdimensionalen Array zu sammeln und dann, vielleicht mit array_multisort, in die richtige Reihenfolge zu bringen, ja?

      Kommentar


      • #4
        $this->field() beinhaltet ALLE Felder, ohne Gruppen zu Ordnung. Ich nutze die foreach auf der Gruppe nur als Zählvariable.

        Dann mach einen assoziativen Array draus und sortiere diesen mit ksort und innerhalb mit sort. Je nach Tiefe mit multisort

        foreach...
        $stadt[] = $this->field('stadt#'.$i)->value();
        sort($stadt);

        $arrSorted[ $this->field('land#'.$i)->value() ][] = $stadt;
        ...endforeach

        ksort($arrSorted) -> sortiert am Ende nach Ländernamen, die Städte darin sind im sort bereits sortiert wurden



        Zuletzt geändert von Tim; 26.09.2019, 13:44.
        http://www.premium-contao-themes.com

        Kommentar


        • #5
          Foreach auf der Gruppe als Zähler ist klar. Ich dachte, man könnte vielleicht die grundsätzliche Ausgabe "vorher" schon drehen ...
          Aber auf jeden Fall vielen Dank für den Hinweis auf ksort. Den hatte ich gar nicht auf dem Schirm. So habe ich mir jetzt das Array mit den benötigten Feldern zusammengebaut und damit das Array nach dem ersten Index sortiert. Es kann so einfach sein.
          Hier noch mal die Zusammenfassung der finalen Lösung:
          PHP-Code:
          foreach($this->group('distributor') as $i => $fields) {
              
          $arrSorted[$this->field('ort#'.$i)->value()]['firma'] = $this->field('firma#'.$i)->value();
              
          $arrSorted[$this->field('ort#'.$i)->value()]['adressfeld_1'] = $this->field('adressfeld_1#'.$i)->value();
              
          $arrSorted[$this->field('ort#'.$i)->value()]['adressfeld_2'] = $this->field('adressfeld_2#'.$i)->value();
              
          $arrSorted[$this->field('ort#'.$i)->value()]['ort'] = $this->field('ort#'.$i)->value();
              
          $arrSorted[$this->field('ort#'.$i)->value()]['telefon'] = $this->field('telefon#'.$i)->value();
              
          $arrSorted[$this->field('ort#'.$i)->value()]['e_mail_adresse'] = $this->field('e_mail_adresse#'.$i)->value();
              
          $arrSorted[$this->field('ort#'.$i)->value()]['url'] = $this->field('url#'.$i)->value();
              }
          ksort($arrSorted);
          echo 
          "<pre>";
          print_r($arrSorted); 
          Vielen Dank nochmal für Deine Hilfe, Tim.

          Kommentar


          • #6
            "vorher" wäre per Hook. Das wäre aber "overkill", denke ich.
            So siehts doch sauber aus.
            http://www.premium-contao-themes.com

            Kommentar

            Lädt...
            X