Composants
Référence des 27 composants App\DataTable\
static — ils sont chainables sans exception.
__toString() génère le HTML ; utiliser directement en echo dans les vues.
Dt_element — Classe de base
Toutes les classes du DataTable héritent de Dt_element. Elle fournit les attributs htmx communs.
| Méthode | Description |
|---|---|
add_class_name(string $class): static | Ajoute une classe CSS |
hx_post(string $url): static | Définit hx-post |
hx_target(string $selector): static | Définit hx-target |
extra_vals(array $vals): static | Remplace l'intégralité de hx-vals |
Data_table — Orchestrateur
Point d'entrée central. Injecté dans les vues via 'dt' => $this->dt.
Requêtes
| Méthode | Description |
|---|---|
from(string $table): static | Définit la table (requis pour CRUD) |
query(string $sql, array $binds): static | Requête SQL custom (sans from()) |
fetch(): static | Exécute la requête et charge les résultats |
rows(): array | Retourne les lignes de la page courante |
find(int $id): object|null | Trouve un enregistrement par ID |
refresh(): static | Relit page/per_page/search/… depuis la Request |
CRUD
| Méthode | Description |
|---|---|
put_to_trash(int $id): int | Soft delete (status = -1) |
restore(int $id): int | Restaure (status = 0) |
del(int $id): int | Suppression définitive |
\LogicException si appelées sans from().
Factory methods — composants UI
| Méthode | Retourne | Description |
|---|---|---|
tab(string $tab, string $label, int $count): Tab | Tab | Onglet (actif/inactif auto) |
sortable_th(string $col, string $label): Sortable_th | Sortable_th | En-tête de colonne triable |
previous_btn(): Previous_btn | Previous_btn | Bouton page précédente |
next_btn(): Next_btn | Next_btn | Bouton page suivante |
page_btn(int $n): Page_btn | Page_btn | Numéro de page |
search_input(string $name): Search_input | Search_input | Input de recherche avec debounce |
create_btn(string $label): Create_btn | Create_btn | Bouton "Créer" (ouvre la modale) |
edit_btn(string $label, int $id): Edit_btn | Edit_btn | Bouton "Modifier" (page dédiée) |
modal_edit_btn(string $label, int $id): Modal_edit_btn | Modal_edit_btn | Bouton "Modifier" (modale) |
back_btn(string $label): Back_btn | Back_btn | Retour à la liste |
modal_form(string $action): Form | Form | Balise <form> pour modale (cible #modal-container) |
form(string $action): Form | Form | Balise <form> pour page dédiée |
action_ptt(string $label, int $id): Put_to_trash_btn | Put_to_trash_btn | Bouton "Corbeille" dans la ligne |
action_restore(string $label, int $id): Restore_btn | Restore_btn | Bouton "Restaurer" dans la ligne |
action_del(string $label, int $id): Delete_btn | Delete_btn | Bouton "Supprimer définitivement" |
inline_save_btn(string $label, int $id): Inline_save_btn | Inline_save_btn | Bouton save de l'édition inline |
row_edit(int $id): Row_tr | Row_tr | <tr> de la ligne en mode édition |
bulk_bar(): Bulk_bar | Bulk_bar | Barre d'actions bulk |
gen_row_checkbox(string $id): string | string | Checkbox de sélection bulk (HTML) |
Row_tr et Form — Balises ouvrantes
Row_tr.__toString() et Form.__toString()
retournent des balises ouvrantes sans fermeture.
La vue est responsable de fermer </tr> et </form>.
<?=$dt->row_edit($user->id)?> <!-- génère <tr id="row-42" hx-...> -->
<td>...champs...</td>
</tr> <!-- fermé par la vue -->
Search_input
$dt->search_input('search')
->placeholder('Rechercher...')
->clear_title('Effacer')
->value($current_search)
->search_columns(['name', 'email'])
->debounce(300)
Inclut un bouton "clear" qui dispatch un event custom search-reset pour vider le champ et relancer la recherche.
Composants inline
Utilisés dans _row_edit.php pour l'édition inline. Instantiation directe (pas via Data_table) :
use App\DataTable\Inline_input as Input;
use App\DataTable\Inline_select as Select;
use App\DataTable\Inline_cancel_btn;
// Input texte
Input::make($focus, $error_fields)
->type('text')
->name('name')
->value($entity->name)
->placeholder('Nom')
// Select
Select::make($focus, $error_fields)
->name('role')
->options(['admin' => 'Admin', 'user' => 'User'])
->selected($entity->role)
// Bouton annuler (sans requête serveur — restaure via JS)
Inline_cancel_btn::make()->title('Annuler')
$focus — nom du champ qui doit recevoir l'autofocus (passé depuis le controller via hx-vals).
$error_fields — tableau de champs en erreur ($v->error_fields()). Un champ en erreur passe en rouge.
Tab
$dt->tab('index', 'Actifs', $count_active)
$dt->tab('trash', 'Corbeille', $count_trash)
Le tab actif est détecté automatiquement. Active state CSS géré par la classe active.
Sortable_th
$dt->sortable_th('name', 'Nom')
$dt->sortable_th('email', 'Email')
$dt->sortable_th('created_at', 'Date de création')
Gère automatiquement la flèche ASC/DESC et la colonne active courante.