Righe Raggruppate, Totali e Report
Raggruppamento di righe multilivello e comprimibile con subtotali, più un piè di pagina sum() con il totale complessivo sull'intero risultato filtrato.
group_by_columns(): livelli di annidamento
public function group_by_columns(string $columns): self
Un elenco di colonne separato da virgole raggruppa le righe della vista elenco sotto righe di intestazione comprimibili - l'N-esima colonna diventa l'N-esimo livello di annidamento:
$xcrud->group_by_columns('customerNumber,paymentDate');
Questo raggruppa le righe prima per customerNumber (livello 1), poi per paymentDate all'interno di ogni cliente (livello 2). Ogni colonna deve essere una delle colonne in whitelist della tabella. La griglia viene automaticamente riordinata in modo che le righe dello stesso gruppo restino contigue - le colonne di raggruppamento vengono ordinate per prime, con qualunque colonna cliccata per l'ordinamento che si applica come criterio secondario di spareggio all'interno del gruppo più interno.
Una colonna data/datetime usata come livello di raggruppamento non raggruppa per il suo valore esatto (il che renderebbe quasi ogni riga un gruppo a sé) - la suddivide invece in etichette relative: "Today", "Yesterday", "N Days Ago", "Last Week", "This Month", "Last Month", poi "{Mese}" per l'anno corrente e "{Mese} {Anno}" per il passato più remoto.
group_sum_columns(): subtotali per gruppo
public function group_sum_columns(string $columns): self
Aggiunge un subtotale per la colonna o le colonne numeriche indicate alla riga di intestazione di ogni gruppo, a ogni livello, calcolato solo sulle righe di quel gruppo nella pagina corrente:
$xcrud->group_by_columns('customerNumber');
$xcrud->group_sum_columns('amount');
L'intestazione di gruppo di ogni cliente mostra il totale di quel cliente sulle sue righe nella pagina corrente - non sull'intero insieme filtrato. A differenza del piè di pagina con totale complessivo di sum() più sotto, questo è limitato al singolo gruppo, e un gruppo può essere suddiviso su più pagine esattamente come può esserlo group_by_columns() stesso.
group_table_collapsed(): stato aperto/chiuso predefinito
public function group_table_collapsed(bool $collapsed, ?int $level = null): self
| Parametro | Tipo | Predefinito | Descrizione |
|---|---|---|---|
$collapsed | bool | - | Se i gruppi iniziano compressi (nascondendo le proprie righe finché non vengono aperti con un click). |
$level | int|null | null | Livello indicizzato da 1 da sovrascrivere, secondo lo stesso ordine degli argomenti di group_by_columns(). Da omettere per impostare il predefinito su ogni livello privo di override. |
$xcrud->group_table_collapsed(true); // ogni livello inizia compresso...
$xcrud->group_table_collapsed(false, 1); // ...tranne il livello 1
Ogni gruppo può comunque essere aperto/chiuso cliccandoci sopra, indipendentemente dal suo stato iniziale.
Personalizzare le etichette dei subtotali
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) rimuove il prefisso "Label:" dal subtotale di ogni colonna sommata, mostrando solo il valore (es. "23.000" invece di "Amount: 23.000"). group_sum_label() sovrascrive l'etichetta di una colonna specifica, al posto del proprio label()/nome auto-generato in forma leggibile:
$xcrud->group_sum_columns('amount');
$xcrud->group_sum_label('amount', 'Total Paid');
Questo mostra "Total Paid: 23.000" su ogni intestazione di gruppo. Non ha effetto se è impostato anche group_sum_show_label(false), dato che in tal caso non viene mostrata alcuna etichetta.
sum(): un piè di pagina con totale complessivo
public function sum(string $field): self
Aggiunge un totale SUM() nel piè di pagina per una colonna numerica, calcolato lato server sull'intero insieme di risultati filtrato/cercato nel suo complesso - non solo sulla pagina corrente, e indipendentemente da qualsiasi raggruppamento:
$xcrud->sum('amount');
Mettendo tutto insieme
$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');
Qui il livello 1 (raggruppamenti per data, di solito una manciata) inizia espanso mentre il livello 2 (numero cliente, spesso decine per raggruppamento) inizia compresso, l'intestazione di ogni gruppo mostra un subtotale "Total Paid: ...", e il piè di pagina della griglia mostra il totale complessivo sull'intero insieme filtrato.