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

Ce plugin fournit une API pour simplifier l’autocomplétion de champs de saisie (input).

Descriptif

Ce plugin permet d’avoir une autocomplétion sur certains champs de formulaires.

Une fois activé, le plugin propose une autocomplétion sur certaines parties de l’espace privé de SPIP (sur l’ajout de mots clés nombreux par exemple).

Il propose également une méthode pour décrire avec des attributs HTML data- d’où viendra l’autocomplétion (un squelette SPIP ou une fonction PHP) sur ce champ particulier.

Sélecteur générique sur l’ajout de mots clés en SPIP 4.2

Installation

Important Le .htaccess (ou équivalent) du site doit être activé, car l’appel des données se fait via une 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 :
    { 
    "results": [
        { "id":"valeur1", "text":"Titre 1" },
        { "id":"valeur2", "long_text": "Titre 2 détaillé", "text":"Titre 2"}
    ]
    }
    
    • text ou long_text (si présent) est ce qui sera affiché dans la liste déroulante
    • text est ce qui sera affiché une fois la sélection effectuée
    • id est la valeur qui sera réellement utilisé pour remplir (poster) le champ.
  • 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" />
    

Il existe différents attributs data- pour modifier certains comportements ou transmettre des paramètres au sélecteur.

Sélecteur Générique (php)

Quelques sélecteurs sont fournis par le plugin, dont un sélecteur dit « générique » en PHP qui permet d’obtenir une autocompletion pour des objets éditoriaux de SPIP, dont la valeur retournée (id) est de type {objet}{id_objet} tel que article123 ou rubrique4.

Quelques usages : 

<input type="text" value="" 
    data-selecteur="generique" 
    data-select-php="oui" />

Recherche multiple (sépare par virgules)

<input type="text" value="" 
    data-selecteur="generique" 
    data-select-php="oui" 
    multiple />

Limiter la recherche à certains objets

<input type="text" value="" 
    data-selecteur="generique" 
    data-select-php="oui" 
    data-select-params='{"objets": ["articles", "rubriques"]}' />

Exclure de la recherche certains objets

<input type="text" value="" 
    data-selecteur="generique" 
    data-select-php="oui" 
    data-select-params='{"objets_exclus": ["paquets", "plugins", "sites"]}' />

Autorisation

Le retour de l’api json se fait sur l’autorisation autocomplete, qui est par défaut
sur l’autorisation d’accès à l’espace privé.

L’autorisation est surchargeable notamment par sélecteur, tel que, pour un selecteurs/demo.html
ou selecteurs/demo.php, l’autorisation autoriser('autocomplete', 'demo') sera appelée,
et donc la fonction autoriser_demo_autocomplete_dist si elle existe.

Dedans, $opt['args'] contient les paramètres d’appel de l’api.

Page de test

Une page de test dans l’espace privé ecrire/?exec=tester_selecteur_generique permet d’afficher quelques exemples. Le code source des exemples sont dans les fichiers formulaires/tester_selecteur_generique_*

Capture de la page de test du Sélecteur Générique sous SPIP 4.2

Historique

Version 2

  • Nécessite SPIP 4.2 minimum
  • Nécessite Select2 v2
  • Réécriture Javascript
  • Changement du format de retour de l’API Json
    • Ancien format :
      [
          {"label":"Titre 1", "value":"valeur1"},
          {"label":"Titre 2", "value":"valeur2"}
      ]
      
    • Nouveau format :
      {
      "results":
      [
          { "id":"valeur1", "text":"Titre 1" },
          { "id":"valeur2", "long_text": "Titre 2 détaillé", "text":"Titre 2"}
      ]
      }
      

Discussion

2 discussions

  • 1

    Bonjour,

    Je tente d’utiliser l’autocompletion pour selectionner une ville à partir de la table geo_communes.
    Ca doit etre un besoin plutot courant, mais je n’ai pas trouvé d’exemples similaires.

    Pour tester j’ai pris un spip vierge en version 4.2.8 avec les plugins select2 et selecteur generique en v2.0.0. J’ai crée quelques mots clés pour verifier que le selecteur de mots fonctionne bien dans la partie privée sur l’url ecrire/ ?exec=tester_selecteur_generique. Apres l’ajout du .htaccess ca fonctionne bien.

    J’ai ensuite dupliqué le test selecteur generique dans un squelette de la partie publique, mais l’autocompletion ne fonctionne pas . (Les entrées dans le champ input mots ne generent pas de requetes ajax). J’ai tenté les manips suivantes sans succes :
    Ajout define(’_SELECTEUR_GENERIQUE_ACTIVER_PUBLIC’,true) ; dans mes _options.php, return true dans autoriser_autocomplete_dist(), #INSERT_HEAD dans le squelette ...
    Je ne vois pas ce qui manque.
    Merci d’avance pour l’aide.

    Répondre à ce message

  • 6
    Benoît Labourdette

    Petite question : je l’ai mis sur un site avec base de données MySQL, cela fonctionne parfaitement. Par contre, sur un site avec base de données SQLite, ça ne fonctionne pas. Peut-être est-ce une limitation liée à SQLite ?

    • Je ne suis pas au courant… as-tu plus de précision sur « ça ne fonctionne pas » ?
      As-tu des erreurs SQL dans tmp/log peut être ?

    • Benoît Labourdette

      Quand on écrit dans le champ « mot clés » par exemple, ça affiche : « Les résultats ne peuvent pas être chargés ».

      Dans le log sqlite.log, j’ai ceci :

      2023-09-09 07:46:28 47.128.25.197 (pid 16687) :Pub:ERREUR: SQLSTATE[HY000]: General error: 5 database is locked in /home8/quidampr/public_autres_sites/ateliersnumeriques-culturesducoeur.org/2023/ecrire/src/Sql/Sqlite/Requeteur.php line 88 - 
      UPDATE spip_meta
      SET maj='2023-09-09 07:46:28',nom='popularite_max',valeur='0.99843950278455'
      WHERE nom='popularite_max'
      2023-09-09 07:46:28 47.128.25.197 (pid 16687) :Pub:ERREUR: Erreur sqlite HY000 / 5
    • Est-ce que tu vois le retour ajax dans ton navigateur ? il n’y aurait pas une notice PHP dedans ou quelque chose de bizarre ?

      Je n’ai semble t’il pas de problème avec en sqlite en tout cas.

    • Benoît Labourdette

      J’ai fait les deux tests avec le même navigateur. Par contre, j’ai essayé sur un autre site, qui est en sqlite aussi, et là ça fonctionne. La différence, c’est que ça ne marche pas sur les sites sur lesquels je n’ai pas activé le .htaccess (car ce sont des mini-sites éditoriaux placés dans des sous-dossiers, avec un SPIP entier dans un sous-dossier). Par contre, pour les « vrais » sites avec .htaccess et réécriture d’url, là ça marche (MySQL ou SQLite). J’avance. Penses-tu que j’analyse bien la chose ?

    • En relisant le paragraphe d’installation qui dit :

      Important Le .htaccess (ou équivalent) du site doit être activé, car l’appel des données se fait via une URL réécrite selecteur.api.

      Je pense que oui :)

    • Benoît Labourdette

      Ok, tu me confirmes donc !
      Le souci que j’ai, quand je mets des SPIP dans des sous-dossiers d’un même domaine, et qu’il y a plusieurs fichiers .htaccess dans plusieurs sous-dossiers, c’est parfois des temps d’affichage ultra longs des pages, comme s’ils se « polluaient » les uns les autres. Ça te semble cohérent ?
      Il faudrait que j’apprenne à gérer un SPIP multisites...

    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