Composants

Référence des 27 composants App\DataTable\

Convention API : Tous les setters retournent 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éthodeDescription
add_class_name(string $class): staticAjoute une classe CSS
hx_post(string $url): staticDéfinit hx-post
hx_target(string $selector): staticDéfinit hx-target
extra_vals(array $vals): staticRemplace 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éthodeDescription
from(string $table): staticDéfinit la table (requis pour CRUD)
query(string $sql, array $binds): staticRequête SQL custom (sans from())
fetch(): staticExécute la requête et charge les résultats
rows(): arrayRetourne les lignes de la page courante
find(int $id): object|nullTrouve un enregistrement par ID
refresh(): staticRelit page/per_page/search/… depuis la Request
CRUD
MéthodeDescription
put_to_trash(int $id): intSoft delete (status = -1)
restore(int $id): intRestaure (status = 0)
del(int $id): intSuppression définitive
Les méthodes CRUD lancent une \LogicException si appelées sans from().
Factory methods — composants UI
MéthodeRetourneDescription
tab(string $tab, string $label, int $count): TabTabOnglet (actif/inactif auto)
sortable_th(string $col, string $label): Sortable_thSortable_thEn-tête de colonne triable
previous_btn(): Previous_btnPrevious_btnBouton page précédente
next_btn(): Next_btnNext_btnBouton page suivante
page_btn(int $n): Page_btnPage_btnNuméro de page
search_input(string $name): Search_inputSearch_inputInput de recherche avec debounce
create_btn(string $label): Create_btnCreate_btnBouton "Créer" (ouvre la modale)
edit_btn(string $label, int $id): Edit_btnEdit_btnBouton "Modifier" (page dédiée)
modal_edit_btn(string $label, int $id): Modal_edit_btnModal_edit_btnBouton "Modifier" (modale)
back_btn(string $label): Back_btnBack_btnRetour à la liste
modal_form(string $action): FormFormBalise <form> pour modale (cible #modal-container)
form(string $action): FormFormBalise <form> pour page dédiée
action_ptt(string $label, int $id): Put_to_trash_btnPut_to_trash_btnBouton "Corbeille" dans la ligne
action_restore(string $label, int $id): Restore_btnRestore_btnBouton "Restaurer" dans la ligne
action_del(string $label, int $id): Delete_btnDelete_btnBouton "Supprimer définitivement"
inline_save_btn(string $label, int $id): Inline_save_btnInline_save_btnBouton save de l'édition inline
row_edit(int $id): Row_trRow_tr<tr> de la ligne en mode édition
bulk_bar(): Bulk_barBulk_barBarre d'actions bulk
gen_row_checkbox(string $id): stringstringCheckbox de sélection bulk (HTML)

Row_tr et Form — Balises ouvrantes

Convention importante : 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.