Réaliser un champ de formulaire avec autocomplétion avec jQuery UI - commentairesRéaliser un champ de formulaire avec autocomplétion avec jQuery UI2017-01-31T17:02:23Zhttps://contrib.spip.net/Realiser-un-champ-de-formulaire-avec-autocompletion#comment4908482017-01-31T17:02:23Z<p>Et même une version amélioré qui permet de prendre en compte les lettres accentués.<br class="autobr">
Le filtre textebrut suffit, le json encode n'est pas nécessaire tant que tout est en utf8 mais il faut veiller à bien renvoyer les valeurs entre guillemets.</p>
<div class="precode"><pre class="spip_code spip_code_block language-spip" dir="ltr" style="text-align:left;" data-language="spip"><code>#HTTP_HEADER{Content-Type: text/plain; charset=#CHARSET}
#SET{collect,#ARRAY}
<BOUCLE_collect_ag(EVENEMENTS){fusion lieu}>
#SET{collect,#GET{collect}|push{#ARRAY{id,#ID_EVENEMENT,titre,#LIEU|textebrut}}}
</BOUCLE_collect_ag>
<BOUCLE_collect_rub(RUBRIQUES){fusion titre}>
#SET{collect,#GET{collect}|push{#ARRAY{id,#ID_RUBRIQUE,titre,#TITRE|textebrut}}}
</BOUCLE_collect_rub>
<BOUCLE_collect_art(ARTICLES){fusion titre}>
#SET{collect,#GET{collect}|push{#ARRAY{id,#ID_ARTICLE,titre,#TITRE|textebrut}}}
</BOUCLE_collect_art>
[<BOUCLE_res_collect(DATA){source tableau, #GET{collect}}{titre LIKE %#ENV{term}%}{par titre}{0,10}{","}>{"id":#VALEUR{id},"label":"#VALEUR{titre}","value":"#VALEUR{titre}"}</BOUCLE_res_collect>]
#FILTRE{trim}</code></pre></div>Réaliser un champ de formulaire avec autocomplétion avec jQuery UI2017-01-31T16:31:12Zhttps://contrib.spip.net/Realiser-un-champ-de-formulaire-avec-autocompletion#comment4908472017-01-31T16:31:12Z<p>J'ai pu trouver une solution grâce à l'aide du forum.<br class="autobr">
Pour ceux à qui cela pourrait être utile voici donc ma version du fichier <strong>autocomplete.html</strong> qui propose pour l'autocomplétion les titres d'articles, de rubriques et lieux d'événements.</p>
<div class="precode"><pre class="spip_code spip_code_block language-spip" dir="ltr" style="text-align:left;" data-language="spip"><code>#HTTP_HEADER{Content-Type: text/plain; charset=#CHARSET}
#SET{collect,#ARRAY}
<BOUCLE_collect_ag(EVENEMENTS){fusion lieu}>
#SET{collect,#GET{collect}|push{#ARRAY{id,#ID_EVENEMENT,titre,#LIEU|textebrut|json_encode}}}
</BOUCLE_collect_ag>
<BOUCLE_collect_rub(RUBRIQUES){fusion titre}>
#SET{collect,#GET{collect}|push{#ARRAY{id,#ID_RUBRIQUE,titre,#TITRE|textebrut|json_encode}}}
</BOUCLE_collect_rub>
<BOUCLE_collect_art(ARTICLES){fusion titre}>
#SET{collect,#GET{collect}|push{#ARRAY{id,#ID_ARTICLE,titre,#TITRE|textebrut|json_encode}}}
</BOUCLE_collect_art>
[<BOUCLE_res_collect(DATA){source tableau, #GET{collect}}{titre LIKE %#ENV{term}%}{par titre}{0,10}{","}>{"id":#VALEUR{id},"label":#VALEUR{titre},"value":#VALEUR{titre}}</BOUCLE_res_collect>]
#FILTRE{trim}</code></pre></div>
<p>Voir <a href="http://forum.spip.net/fr_266383.html#forum266420" class="spip_url spip_out auto" rel="nofollow external">http://forum.spip.net/fr_266383.html#forum266420</a></p>Réaliser un champ de formulaire avec autocomplétion avec jQuery UI2017-01-29T01:41:41Zhttps://contrib.spip.net/Realiser-un-champ-de-formulaire-avec-autocompletion#comment4908062017-01-29T01:41:41Z<p>Merci pour cette contrib.<br class="autobr">
Je souhaite pour ma part que l'autocomplétion propose les titres des articles, des rubriques ou les lieux des évènements de l'agenda.</p>
<p>Pour ce faire, j'ai donc modifier l'autocomplete de cette manière en plaçant les séparateurs « , » virgule dans les parties conditionnelles des boucles.</p>
<div class="precode"><pre class="spip_code spip_code_block language-php" dir="ltr" style="text-align:left;" data-language="php"><code>]#HTTP_HEADER{Content-Type: text/plain; charset=#CHARSET}
[<BOUCLE_artr(ARTICLES){titre LIKE %#ENV{term}%}{par titre}{","}{0,10}>{"id":#ID_ARTICLE,"label":[(#TITRE|textebrut|json_encode)],"value":[(#TITRE|textebrut|json_encode)]}</BOUCLE_artr>,</B_artr><B_rubr><BOUCLE_rubr(RUBRIQUES){titre LIKE %#ENV{term}%}{par titre}{0,10}{","}>{"id":#ID_RUBRIQUE,"label":[(#TITRE|textebrut|json_encode)],"value":[(#TITRE|textebrut|json_encode)]}</BOUCLE_rubr>,</B_rubr><B_lieuxr><BOUCLE_lieuxr(EVENEMENTS){lieu LIKE %#ENV{term}%}{fusion lieu}{","}>{"id":#ID_EVENEMENT,"label":[(#LIEU|textebrut|json_encode)],"value":[(#LIEU|textebrut|json_encode)]}</BOUCLE_lieuxr></code></pre></div>
<p>Mais cela ne fonctionne pas et je comprends que ce qu'il me faudrait c'est que cela soit conditionné par le fait qu'il il y ai eu un résultat pour la boucle précédente. Il faudrait donc une sorte de condition 'si précédé de' pour ajouter alors seulement la virgule.</p>
<p>Une idée pour gérer ça correctement<small class="fine d-inline"> </small>? Ça me parait simple mais je cherche sans trouver.</p>Réaliser un champ de formulaire avec autocomplétion avec jQuery UI2015-06-01T12:33:43Zhttps://contrib.spip.net/Realiser-un-champ-de-formulaire-avec-autocompletion#comment4822712015-06-01T12:33:43Z<p>Bonjour<br class="autobr">
Mon autocompletion est sensible à la casse. Effectivement en sql le critère LIKE rend la requête sur le champ titre par exemple sensible à la casse<br class="autobr">
en sql, on peut contourner en faisant UPPER(titre) like UPPER(term)<br class="autobr">
Mais comment faire de même avec les boucles spip<small class="fine d-inline"> </small>?</p>Réaliser un champ de formulaire avec autocomplétion avec jQuery UI2015-02-05T10:51:50Zhttps://contrib.spip.net/Realiser-un-champ-de-formulaire-avec-autocompletion#comment4792562015-02-05T10:51:50Z<p>Bonjour,</p>
<p>Je remercie Tchariss pour sa remarque - merci également et bien sûr à erational - car l'ajout de la pipeline dans mes_options.php est effectivement la meilleure solution.</p>
<p>En effet, l'ajout des bibliothèques / scripts directement dans le head ne suffisait pas : le sélecteur - et donc la position du menu des propositions - n'étant pas récupérée.</p>Réaliser un champ de formulaire avec autocomplétion avec jQuery UI2015-02-02T10:13:12Zhttps://contrib.spip.net/Realiser-un-champ-de-formulaire-avec-autocompletion#comment4791612015-02-02T10:13:12Z<p>J'ai aussi eu recours à cette syntaxe car l'encodage des apostrophes n'était pas correct, j'obtenais <code class="spip_code spip_code_inline" dir="ltr">aujourd'hui</code> au lieu du texte <code class="spip_code spip_code_inline" dir="ltr">aujourd'hui</code>.</p>
<p>Est-ce normal, ou y'a-t-il un paramètre à préciser<small class="fine d-inline"> </small>?</p>Réaliser un champ de formulaire avec autocomplétion avec jQuery UI2014-09-16T12:55:56Zhttps://contrib.spip.net/Realiser-un-champ-de-formulaire-avec-autocompletion#comment4769692014-09-16T12:55:56Z<p>Est-ce que cela est fonctionnel en Spip 2.1<small class="fine d-inline"> </small>?</p>Réaliser un champ de formulaire avec autocomplétion avec jQuery UI2014-06-06T09:31:58Zhttps://contrib.spip.net/Realiser-un-champ-de-formulaire-avec-autocompletion#comment4757012014-06-06T09:31:58Z<p>Un article super pratique qui m'a bien dépanné, merci.<br class="autobr">
J'ai quand même des remarques sur 2 points :</p>
<p>1) Dans le script activant l'autocomplétion, il vaut mieux utiliser la balise <code class="spip_code spip_code_inline" dir="ltr">#URL_PAGE{autocomplete}</code>.<br class="autobr">
J'ai d'abord utilisé l'url <code class="spip_code spip_code_inline" dir="ltr">spip.php?page=autocomplete</code> comme indiqué dans l'exemple, mais ça ne marchait pas : il manquait le «<small class="fine d-inline"> </small><code class="spip_code spip_code_inline" dir="ltr">../</code><small class="fine d-inline"> </small>» au début. Ca dépend peut-être des cas de figure, en tout cas avec la balise <code class="spip_code spip_code_inline" dir="ltr">#URL_PAGE</code> on est sûr d'avoir la bonne adresse.</p>
<p>2) Pour charger les scripts jquery ui, il y a la pipeline <code class="spip_code spip_code_inline" dir="ltr">jqueryui_plugins</code> qui permet d'éviter de charger les scripts en doublons.<br class="autobr">
Dans <code class="spip_code spip_code_inline" dir="ltr">mes_options.php</code> :</p>
<div class="precode"><pre class="spip_code spip_code_block language-php" dir="ltr" style="text-align:left;" data-language="php"><code>$GLOBALS['spip_pipeline']['jqueryui_plugins'] .= "|jqueryui_autocomplete";
function jqueryui_autocomplete($scripts){ $scripts[] = 'jquery.ui.autocomplete'; return $scripts;
}</code></pre></div>Réaliser un champ de formulaire avec autocomplétion avec jQuery UI2014-04-23T20:25:25Zhttps://contrib.spip.net/Realiser-un-champ-de-formulaire-avec-autocompletion#comment4750842014-04-23T20:25:25Z<p>J'ai trouvé comment résoudre le soucis :</p>
<p>Dans autocomplete.html, avant d'encodre en json, j'applique un filtre textebrut :</p>
<div class="precode"><pre class="spip_code spip_code_block" dir="ltr" style="text-align:left;"><code>[(#REM) noisette ajax pour fournir une liste de mots l'autocompletion jQuery UI autocomplete parametre - term : lettre cherchee ]#HTTP_HEADER{Content-Type: text/plain; charset=#CHARSET}
[<BOUCLE_mots(MOTS){titre LIKE %#ENV{term}%}{par titre}{","}{0,10}>{"id":#ID_MOT,"label":[(#TITRE|textebrut|json_encode)],"value":[(#TITRE|textebrut|json_encode)]}</BOUCLE_mots>]</code></pre></div>Réaliser un champ de formulaire avec autocomplétion avec jQuery UI2014-04-23T17:35:41Zhttps://contrib.spip.net/Realiser-un-champ-de-formulaire-avec-autocompletion#comment4750832014-04-23T17:35:41Z<p>Ah finalement j'ai un léger soucis, je me retrouve avec des devant les : qui sont dans les titres des mots-clés listés par l'autocomplete…</p>
<p>Une idée là-dessus<small class="fine d-inline"> </small>?</p>Réaliser un champ de formulaire avec autocomplétion avec jQuery UI2014-04-23T16:41:23Zhttps://contrib.spip.net/Realiser-un-champ-de-formulaire-avec-autocompletion#comment4750812014-04-23T16:41:23Z<p>Très bon merci<small class="fine d-inline"> </small>! J'utilisais le même mais avec une solution de base avec la doc JQuery, mais toute la liste des mots-clés s'affichait dans le code source des pages… Grâce à cette méthode, plus de soucis de ce genre.</p>