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.
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
oulong_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_*
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"} ] }
- Ancien format :
Discussions par date d’activité
2 discussions
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ésolu par https://git.spip.net/spip-contrib-extensions/selecteur_generique/-/commit/bee5eb6fde8865afb8de09eedd4aa2dea0f95af0
Répondre à ce message
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 ?
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 :
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.
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 :
Je pense que oui :)
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 :
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.
Suivre les commentaires : |