DataTable Alluvia

Système CRUD générique pour les back-offices River

v1.0
DataTable fait partie du projet Alluvia — admin toolkit pour River. Il n'est pas dans le core River, mais est conçu pour s'intégrer parfaitement avec lui.

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 :

Couche UI — 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
Couche Controller — Dt_controller

Classe 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 :

ChampDescriptionDéfaut
pagePage courante1
per_pageLignes par page10
tabOnglet actif'index'
searchTerme de recherche''
search_columnsColonnes recherchées (CSV)''
order_byColonne de tri''
order_dirDirection du tri (ASC/DESC)'ASC'

Quand utiliser le générateur vs. manuel ?

Générateur

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.

Manuel

Pour les besoins complexes : relations, logique métier spécifique, UI personnalisée.

Utilisez Users_ctrl comme référence d'implémentation.