Champs personnalisés
Objectifs pédagogiques
- Ajouter des champs supplémentaires dans un tableau associatif.
- Manipuler et afficher dynamiquement des informations enrichies.
- Adapter le formulaire d’ajout et l’affichage des données.
Contexte
Jusqu’à présent, chaque tâche contenait :
- un
label, - une
category, - un
done, - une
created_at.
Nous allons désormais introduire d’autres champs comme :
priority(ex:basse,moyenne,haute),description(texte libre),due_date(date limite).
Exercice pratique
- Modifier la structure des tâches pour ajouter les champs suivants :
priority(valeurs possibles :basse,moyenne,haute)description(facultative)due_date(facultative)
- Afficher ces nouvelles informations dans le tableau HTML.
- Styliser la priorité avec un badge coloré :
basse: gris clairmoyenne: orangehaute: rouge
Correction
Visualiser la correction
Exemple de tableau enrichi
php
<?php
$tasks = [
[
'label' => 'Acheter du pain',
'category' => 'Courses',
'done' => false,
'created_at' => '2024-07-20',
'priority' => 'haute',
'description' => 'Ne pas oublier les œufs',
'due_date' => '2024-07-21'
],
[
'label' => 'Envoyer le rapport',
'category' => 'Travail',
'done' => true,
'created_at' => '2024-07-15',
'priority' => 'moyenne',
'description' => 'Récupérer les chiffres sur le drive',
'due_date' => null
]
];
?>Affichage des champs supplémentaires
php
<tbody>
<?php foreach ($tasks as $task): ?>
<tr>
<td class="p-4 border-b border-slate-200"><?= htmlspecialchars($task['label']) ?></td>
<td class="p-4 border-b border-slate-200"><?= htmlspecialchars($task['category']) ?></td>
<td class="p-4 border-b border-slate-200">
<div class="w-max">
<div class="relative grid items-center px-2 py-1 text-xs font-bold uppercase rounded-md select-none whitespace-nowrap
<?= $task['done'] ? 'bg-green-500/20 text-green-900' : 'bg-slate-100 text-slate-500' ?>">
<?= $task['done'] ? 'Terminée' : 'À faire' ?>
</div>
</div>
</td>
<td class="p-4 border-b border-slate-200">
<?= htmlspecialchars($task['created_at']) ?>
<?php if (!empty($task['due_date'])): ?>
<br><small>Limite: <?= htmlspecialchars($task['due_date']) ?></small>
<?php endif; ?>
</td>
<td class="p-4 border-b border-slate-200">
<div class="w-max">
<span class="px-2 py-1 text-xs font-bold uppercase rounded-md select-none whitespace-nowrap
<?php
echo match($task['priority']) {
'haute' => 'bg-red-100 text-red-700',
'moyenne' => 'bg-orange-100 text-orange-700',
default => 'bg-slate-100 text-slate-500'
};
?>">
<?= htmlspecialchars($task['priority']) ?>
</span>
</div>
</td>
</tr>
<?php endforeach; ?>
</tbody>Explications
- Le champ
priorityest stylisé avec unmatch()(PHP 8+) pour adapter l’apparence. - La date d’échéance est affichée sous la date de création si elle est définie.
- La description pourrait être intégrée à un affichage étendu ou à une page dédiée.
- Tous les champs restent optionnels, ce qui permet de manipuler des structures partielles.