Sélecteur générique avec autocomplétion

Ce plugin fournit une API pour simplifier l’utilisation d’une aide d’autocomplétion lors du remplissage d’un champ texte (input ou textarea). Il propose donc une méthode pour décrire d’où viendra l’autocomplétion (un squelette SPIP ou une fonction PHP), à appliquer dans les attributs HTML du champ voulu (data-).

Installation

Important Le .htaccess du site doit être activé (car l’appel des données se fait via le url réécrite /selecteur.api)

Utilisation

Pour ajouter un nouveau sélecteur, suivre les étapes suivantes :

  • Créer un squelette dans le répertoire selecteurs/monselecteur.html
  • Ce fichier doit retourner une liste de résultats au format JSON :
    [
        {"label":"Titre 1", "value":"valeur1"},
        {"label":"Titre 2", "value":"valeur2"}
    ]

    Le label est ce qui sera affiché dans la liste déroulante, tandis que la valeur est ce qui sera réellement utilisé pour remplir le champ. Quand les deux sont pareil, l’élément peut être directement une chaine plutôt qu’un objet.

  • le champ connecté au selecteur doit posséder l’attribut data-selecteur, la valeur associée est le nom du sélecteur :
     <input type="text" value="" data-selecteur="monselecteur" /> 

Pour plus d’information voyez le commentaire de commit

Discussion

23 discussions

  • Bonjour à vous,

    J’ai eu quelques soucis avec une 2.0.8 sur laquelle j’avais simplement mis en place le patch de sécu, mais pas la maj à la 2.0.9 entière. Apparement le #ENVgroupes|explode, ne trouvait jamais rien sur le sélecteur de mots, du coup, aucun résultat...

    Sur une 2.0.10 pas de soucis.

    Et comme rester sur la 2.0.8 c’est mal, de toute façon, pas de soucis...

    Tant qu’à faire la maj,autant passer à la 2.0.10, en plus.

    Répondre à ce message

  • 2

    Bel ouvrage ! En effet, fonctionne bien avec un ou plusieurs groupes mots-clés.

    Pour info, en gros, de ce que j’ai compris (lecture en diagonale), SPIP modifie la structure du sélecteur des mots à partir de 50 éléments (le sélecteur est transformé en input classique, qui a pour nom « cherche_mot »). Le plugin fait ensuite son travail en s’incrustant dans cet élement.

    Si vous souhaitez activer la fonctionnalité proposée ici dès le premier mot (à vrai dire, à partir de deux mots), voici un exemple de code à placer dans le script insert_javascript.php, à partir de la ligne 77 :

    <?php    
    // si <= 50 items, SPIP donne un select
    // si > 50, un input
    // Remplace le select par un input pour activer le plugin 
    // pour toutes les recherches
    if(jQuery('select[name=nouv_mot]').val()) {
        jQuery('select[name=nouv_mot]').each(function () {
            var inp_id = $(this).attr('id');
            var inp_value = inp_id.replace(/nouv_mot/, "");
            var inp_label = $(this).children('[value=x]').text();
            $(this).replaceWith("<input name='cherche_mot' "
                + " id='chercher_mot" + inp_value + "'"
                + " class='fondl ac_input' style='width: 180px'"
                + " value='" + inp_label + "'"
                + " title='" + inp_label + "'"
                + " size='20' "
                + " type='text'"
                + " />"
                + "&nbsp;"
                + "<input name='select_groupe' value='" + inp_value + "' type='hidden'>");
        });
    }
    
    // Supprimer event sur les boutons chercher
    jQuery('input[name=cherche_mot]').each(function (i) {
        $(this).removeAttr('onfocus');
    });
    
    jQuery('input[name=cherche_mot]').focus(function () {
        $(this).val("");
    });
    
    jQuery('input[name=cherche_mot]').blur(function () {
        $(this).val(jQuery(this).attr('title'));
    });
    ?>

    Testé/validé en SPIP 2.0.8 [13982]

    Devrait pouvoir être adapté pour SPIP 192. Quelqu’un est déjà dessus ?

    En tout cas, merci.

    • Il me semblerait plus logique de modifier le 50 en 2.

    • Paladin

      modifier le 50 en 2.

      Transformer en champ de recherche si >= 2 ?

      Oui en effet. Et d’ajouter un bouton « Ajouter » s’il n’y a qu’un mot dans le groupe de mots (SPIP 2.08 place un select, même s’il n’y a qu’un mot disponible).

    Répondre à ce message

  • Petit plugin très sympa. Le seul souci que je rencontre c’est qu’il semble que ça marche que la première fois. Si je sélectionne un mot clé la première fois, il me trouve bien le mot. Si je le fais les fois suivantes ( d’autres mots clés d’autres groupes par exemples ), je suis obligé de « le faire à l’ancienne. »

    Répondre à ce message

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom