/

Lignes groupées, sommes et rapports

Regroupement de lignes sur plusieurs niveaux, repliable, avec sous-totaux, plus un pied de page sum() de total général sur l'ensemble du résultat filtré.

group_by_columns() : niveaux d'imbrication

public function group_by_columns(string $columns): self

Une liste de colonnes séparées par des virgules regroupe les lignes de la vue liste sous des lignes d'en-tête repliables - la Nième colonne devient le Nième niveau d'imbrication :

$xcrud->group_by_columns('customerNumber,paymentDate');

Ceci regroupe les lignes d'abord par customerNumber (niveau 1), puis par paymentDate au sein de chaque client (niveau 2). Chaque colonne doit faire partie des colonnes autorisées de la table. La grille est automatiquement retriée pour que les lignes d'un même groupe restent contiguës - les colonnes de groupe sont triées en premier, la colonne sur laquelle on clique pour trier s'appliquant ensuite comme critère de départage secondaire à l'intérieur du groupe le plus imbriqué.

Une colonne date/datetime utilisée comme niveau de groupe ne regroupe pas sur sa valeur exacte (ce qui ferait de presque chaque ligne son propre groupe) - elle répartit plutôt en libellés relatifs : "Aujourd'hui", "Hier", "Il y a N jours", "La semaine dernière", "Ce mois-ci", "Le mois dernier", puis "{Mois}" pour l'année en cours et "{Mois} {Année}" au-delà.

group_sum_columns() : sous-totaux par groupe

public function group_sum_columns(string $columns): self

Ajoute un sous-total pour la ou les colonnes numériques nommées sur la ligne d'en-tête de chaque groupe, à chaque niveau, calculé uniquement sur les lignes de ce groupe présentes sur la page courante :

$xcrud->group_by_columns('customerNumber');
$xcrud->group_sum_columns('amount');

L'en-tête de groupe de chaque client affiche le total de ce client sur ses lignes de la page courante - pas sur l'ensemble filtré complet. Contrairement au pied de page de total général de sum() ci-dessous, ce sous-total est limité au groupe, et un groupe peut être réparti sur plusieurs pages tout comme group_by_columns() lui-même peut l'être.

group_table_collapsed() : état ouvert/fermé par défaut

public function group_table_collapsed(bool $collapsed, ?int $level = null): self
ParamètreTypeDéfautDescription
$collapsedbool-Si les groupes démarrent repliés (masquant leurs lignes jusqu'à un clic pour les ouvrir).
$levelint|nullnullNiveau à surcharger, indexé à partir de 1, dans le même ordre que les arguments de group_by_columns(). Omettez pour définir le comportement par défaut de chaque niveau sans surcharge.
$xcrud->group_table_collapsed(true);      // tous les niveaux démarrent repliés...
$xcrud->group_table_collapsed(false, 1);  // ...sauf le niveau 1

Chaque groupe peut toujours être basculé ouvert/fermé en cliquant dessus, quel que soit son état de départ.

Personnaliser les libellés de sous-total

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) retire le préfixe "Libellé :" du sous-total de chaque colonne sommée, n'affichant que la valeur (ex. "23 000" au lieu de "Montant : 23 000"). group_sum_label() surcharge le libellé d'une colonne en particulier, à la place de son propre label()/nom auto-humanisé :

$xcrud->group_sum_columns('amount');
$xcrud->group_sum_label('amount', 'Total Paid');

Ceci affiche "Total Paid : 23 000" sur chaque en-tête de groupe. Cela n'a aucun effet si group_sum_show_label(false) est également défini, puisqu'aucun libellé ne s'affiche du tout dans ce cas.

sum() : un pied de page de total général

public function sum(string $field): self

Ajoute un total SUM() en pied de page pour une colonne numérique, calculé côté serveur sur l'ensemble du résultat filtré/recherché courant - pas seulement la page courante, et indépendamment de tout regroupement :

$xcrud->sum('amount');

Assembler le tout

$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');

Ici, le niveau 1 (les tranches de dates, généralement peu nombreuses) démarre déplié tandis que le niveau 2 (le numéro client, souvent des dizaines par tranche) démarre replié, chaque en-tête de groupe affiche un sous-total "Total Paid : ...", et le pied de page de la grille affiche le total général sur l'ensemble filtré.