Aller au contenu

MAutoComplete

Présentation

MAutoComplete est un composant d'interface utilisateur qui fournit des suggestions de saisie automatique (autocomplétion) pour les champs de texte. Il est particulièrement utile pour les champs de recherche ou de sélection où les utilisateurs doivent choisir parmi une grande liste d'options.

Exemples :

Fonctionnalités

  • Saisie semi-automatique avec suggestions en temps réel
  • Personnalisation de l'apparence et du comportement
  • Support pour un bouton de validation optionnel
  • Gestion des événements JavaScript personnalisables
  • Interface utilisateur réactive et moderne

Utilisation de base

// Fonctions JavaScript requises
<script>
    var 'select' = function(selectedItem){
        console.log("Élément sélectionné :", selectedItem['id']);
        // Mettez à jour votre interface ici
    };
</script>
<?php
use mlib\ui\autocomplete\MAutoComplete;

// Définir le chemin relatif vers le répertoire contenant les assets
MAutoComplete::registerAssetsPath('/chemin/vers/assets/mautocomplete');

// Afficher le champ de saisie avec autocomplétion
MAutoComplete::display(
    'mon_champ_autocomplete',               // ID du champ
    '/chemin/vers/votre/recherche.php',     // URL du script de recherche
    array(                                  // Fonctions JavaScript
        'onSelect' => 'select'
    )
);
?>

Script de recherche côté serveur

Votre script de recherche devrait renvoyer un tableau JSON des résultats correspondants. Exemple en PHP :

// Exemple de script de recherche (recherche.php)
$noms = array('Dupont', 'Durand', 'Martin', 'Lefevre', 'Dupond', 'Doe', 'Charles', 'Henry', 'Louis', 'Philippe');
$prenoms = array('Jean', 'Michel', 'Luc', 'Matthieu', 'Paul', 'Judas', 'Jacques', 'Pierre', 'Thomas', 'Philippe');

$search = isset($_GET['name']) && preg_match('/^[A-Za-z]+$/', $_GET['name']) ? $_GET['name'] : null;

$result = array();
if($search){
    for($i = 0; $i < count($noms); $i++){
        if(str_starts_with(strtolower($noms[$i]), strtolower($search))){
            $result[] = array('id' => $i, 'displayname' => $prenoms[$i].' '.$noms[$i]);
        }
    }
}
header('Content-Type: application/json');
echo json_encode($result);

Options avancées

Ajouter un bouton de validation

$options = [
    'button' => true,                              // Afficher un bouton
    'button_label' => 'Rechercher',                // Libellé du bouton
    'button_icon' => '/chemin/vers/icone.png',     // Optionnel
    'button_color' => '#4285f4',                 // Couleur de fond du bouton
    'button_text_color' => '#ffffff',            // Couleur du texte du bouton
    'placeholder' => 'Rechercher un produit...',   // Placeholder du champ
    'min_chars' => 2,                              // Nombre minimum de caractères  avant déclenchement de la recherche
    'empty_message' => 'Aucun résultat trouvé',
    'width' => '500px'                            // Largeur totale du composant
];

$functions = [
    'onSelect' => 'function(selectedItem) { /* ... */ }',
    'renderResult' => 'function(item) { return "<div>" + item.label + "</div>"; }',
    'onValidate' => 'function() { 
        // Action à effectuer lors du clic sur le bouton
        var input = document.getElementById("mon_champ_autocomplete");
        console.log("Recherche validée :", input.value);
    }'
];

MAutoComplete::display('mon_champ_autocomplete', '/recherche.php', $functions, $options);

Personnalisation de l'affichage des résultats

Vous pouvez personnaliser l'affichage des suggestions en utilisant la fonction renderResult :

function(item) {
    return `
        <div class="suggestion-item">
            <strong>${item.label}</strong>
            <span class="category">${item.categorie}</span>
        </div>
    `;
}

Gestion des événements

Événement onSelect

Déclenché lorsqu'un élément est sélectionné dans la liste des suggestions.

function(selectedItem) {
    // selectedItem contient l'objet complet de l'élément sélectionné
    console.log('ID:', selectedItem.id);
    console.log('Label:', selectedItem.label);

    // Mettre à jour un champ caché avec l'ID sélectionné
    document.getElementById('produit_id').value = selectedItem.id;

    // Afficher des détails supplémentaires
    document.getElementById('details_produit').innerHTML = 
        `<h3>${selectedItem.label}</h3>
         <p>Catégorie: ${selectedItem.categorie}</p>`;
}

Évènement onValidate

Déclenché lorsqu'un utilisateur valide la recherche. L'évènement est rattaché au bouton de validation situé à droite du champ de saisie, s'il est présent.

function() {
    // Action à effectuer lors de la validation de la recherche
    var input = document.getElementById("mon_champ_autocomplete");
    console.log("Recherche validée :", input.value);

    // Peut être utilisé pour soumettre un formulaire ou effectuer une action supplémentaire
}