Gruppierte Zeilen, Summen & Berichte
Ein- und ausklappbare mehrstufige Zeilengruppierung mit Zwischensummen, plus eine sum()-Gesamtsumme in der Fußzeile über die komplette gefilterte Ergebnismenge.
group_by_columns(): Verschachtelungsebenen
public function group_by_columns(string $columns): self
Eine kommagetrennte Spaltenliste gruppiert die Zeilen der Listenansicht unter ein-/ausklappbaren Kopfzeilen - die N-te Spalte wird zur N-ten Verschachtelungsebene:
$xcrud->group_by_columns('customerNumber,paymentDate');
Dies gruppiert Zeilen zunächst nach customerNumber (Ebene 1), dann innerhalb jedes Kunden nach paymentDate (Ebene 2). Jede Spalte muss zu den freigegebenen Spalten der Tabelle gehören. Das Grid wird automatisch neu sortiert, damit Zeilen derselben Gruppe zusammenbleiben - die Gruppierungsspalten sortieren zuerst, wobei die zum Sortieren angeklickte Spalte innerhalb der innersten Gruppe als sekundäres Tiebreaker-Kriterium greift.
Eine als Gruppierungsebene verwendete Datums-/Datetime-Spalte gruppiert nicht nach ihrem exakten Wert (wodurch fast jede Zeile ihre eigene Gruppe würde) - stattdessen wird in relative Bezeichnungen einsortiert: "Heute", "Gestern", "Vor N Tagen", "Letzte Woche", "Diesen Monat", "Letzten Monat", dann "{Monat}" für das laufende Jahr und "{Monat} {Jahr}" für weiter zurückliegende Zeiträume.
group_sum_columns(): Zwischensummen pro Gruppe
public function group_sum_columns(string $columns): self
Fügt jeder Gruppenkopfzeile auf jeder Ebene eine Zwischensumme für die genannte(n) numerische(n) Spalte(n) hinzu, berechnet nur über die Zeilen dieser Gruppe auf der aktuellen Seite:
$xcrud->group_by_columns('customerNumber');
$xcrud->group_sum_columns('amount');
Die Kopfzeile jedes Kunden zeigt dessen Summe über seine Zeilen auf der aktuellen Seite - nicht über die gesamte gefilterte Menge. Anders als die weiter unten beschriebene Gesamtsumme von sum() ist dies pro Gruppe begrenzt, und eine Gruppe kann sich genau wie group_by_columns() selbst über mehrere Seiten verteilen.
group_table_collapsed(): Standard-Zustand auf-/zugeklappt
public function group_table_collapsed(bool $collapsed, ?int $level = null): self
| Parameter | Typ | Standard | Beschreibung |
|---|---|---|---|
$collapsed | bool | - | Ob Gruppen anfangs zugeklappt starten (ihre Zeilen verbergen, bis sie aufgeklappt werden). |
$level | int|null | null | 1-indizierte Ebene, die überschrieben werden soll, passend zur Argumentreihenfolge von group_by_columns(). Weglassen, um den Standard für jede Ebene ohne eigene Überschreibung zu setzen. |
$xcrud->group_table_collapsed(true); // every level starts collapsed...
$xcrud->group_table_collapsed(false, 1); // ...except level 1
Jede Gruppe lässt sich unabhängig von ihrem Startzustand weiterhin per Klick auf-/zuklappen.
Zwischensummen-Beschriftungen anpassen
public function group_sum_show_label(bool $show = true): self
public function group_sum_label(string $field, string $label): self
group_sum_show_label(false) entfernt das Präfix "Label:" aus der Zwischensumme jeder summierten Spalte und zeigt nur noch den Wert (z. B. "23.000" statt "Amount: 23.000"). group_sum_label() überschreibt die Beschriftung einer bestimmten Spalte gezielt, statt deren eigenen label()-Werts bzw. des automatisch lesbar gemachten Namens:
$xcrud->group_sum_columns('amount');
$xcrud->group_sum_label('amount', 'Total Paid');
Dies zeigt "Total Paid: 23.000" auf jeder Gruppenkopfzeile. Es hat keine Wirkung, wenn auch group_sum_show_label(false) gesetzt ist, da in diesem Fall überhaupt keine Beschriftung angezeigt wird.
sum(): eine Gesamtsumme in der Fußzeile
public function sum(string $field): self
Fügt für eine numerische Spalte eine SUM()-Gesamtsumme in der Fußzeile hinzu, serverseitig berechnet über die gesamte aktuell gefilterte/durchsuchte Ergebnismenge - nicht nur die aktuelle Seite, und unabhängig von jeder Gruppierung:
$xcrud->sum('amount');
Alles zusammen
$xcrud->group_by_columns('paymentDate,customerNumber');
$xcrud->group_sum_columns('amount');
$xcrud->group_sum_label('amount', 'Total Paid');
$xcrud->group_table_collapsed(true);
$xcrud->group_table_collapsed(false, 1);
$xcrud->sum('amount');
Hier startet Ebene 1 (Datums-Buckets, meist eine Handvoll) aufgeklappt, während Ebene 2 (Kundennummer, oft Dutzende pro Bucket) zugeklappt startet. Jede Gruppenkopfzeile zeigt eine Zwischensumme "Total Paid: …", und die Fußzeile des Grids zeigt die Gesamtsumme über die gesamte gefilterte Menge.