DataTable Alluvia
Système CRUD générique pour les back-offices River
Qu'est-ce que DataTable ?
DataTable est un système de composants PHP qui génère des interfaces CRUD complètes pilotées par htmx. Il gère automatiquement la pagination, le tri, la recherche, les onglets (actif/corbeille), les actions bulk, l'édition modale, et l'édition inline — sans écrire de JavaScript spécifique.
Chaque interaction (tri, pagination, recherche, action CRUD) transporte le contexte
complet de la vue (page courante, tri actif, filtre, onglet) via hx-vals.
Cela garantit que l'état de la table est préservé après chaque opération.
Fonctionnalités
Navigation
- Pagination (previous / numéros / next)
- Tri par colonne (ASC/DESC)
- Recherche plein-texte avec debounce
- Onglets (ex : actif / corbeille)
- Sélection du nombre de lignes par page
CRUD
- Création via modale
- Édition via modale ou page dédiée
- Édition inline (double-clic sur la ligne)
- Mise à la corbeille / restauration
- Suppression définitive
- Actions bulk (corbeille/restore/delete en lot)
Architecture
Le système est structuré en deux couches :
App\DataTable\27 composants PHP qui génèrent le HTML htmx. Tous héritent de Dt_element.
- Data_table — orchestrateur central, factory methods, requêtes DB
- Dt_element — classe abstraite de base (hx-post, hx-target, hx-vals, classes CSS)
- Boutons CRUD :
Create_btn,Edit_btn,Put_to_trash_btn,Restore_btn,Delete_btn… - Navigation :
Tab,Sortable_th,Previous_btn,Next_btn,Page_btn… - Formulaires :
Form,Row_tr,Inline_input,Inline_select… - Utilitaires :
Search_input,Bulk_bar,Order_btn…
Dt_controllerClasse abstraite qui fournit les actions htmx (search, ptt, restore, del, bulk…). Chaque table a son propre controller concret qui étend Dt_controller.
Dt_controller (abstrait)
├── dt_search() → retourne _dt.php (table + pagination)
├── dt_ptt() → met à la corbeille
├── dt_restore() → restaure
├── dt_del() → suppression définitive
├── dt_bulk() → actions en lot
└── dt_page() → abstract, à implémenter
Le contexte DataTable
Chaque composant transporte automatiquement 7 champs de contexte dans hx-vals :
| Champ | Description | Défaut |
|---|---|---|
page | Page courante | 1 |
per_page | Lignes par page | 10 |
tab | Onglet actif | 'index' |
search | Terme de recherche | '' |
search_columns | Colonnes recherchées (CSV) | '' |
order_by | Colonne de tri | '' |
order_dir | Direction du tri (ASC/DESC) | 'ASC' |
Quand utiliser le générateur vs. manuel ?
Pour les cas standard : table avec quelques champs texte/select.
Génère le controller + 8 vues + migration en une commande. Parfait pour démarrer.
Pour les besoins complexes : relations, logique métier spécifique, UI personnalisée.
Utilisez Users_ctrl comme référence d'implémentation.