Ce widget se présente sous la forme d'un champ de saisie classique à inclure dans un formulaire généré ou non via un Pxxo_Widget_Form. Ce champ a la particularité de proposer au fur-et-à-mesure de la frappe des propositions “d'auto-complétion” (ou de résultats quelconques ayant un rapport avec la saisie) via une liste de type Livesearch. Ainsi il peut être utilisé en tant qu'aide à la saisie pour simplifier la frappe, la recherche ou encore autre chose …
| Nom | Type | Valeur par défaut | Description |
|---|---|---|---|
| “id” | String | Aucune | identifiant de l'élément (paramètre obligatoire) |
| “version” | String | 1.0.0 | Numéro de la version à utiliser |
| “id_form” | String | Aucune | Identifiant du formulaire qui englobe cet Input ; ce paramètre est automatiquement valué lorsque ce widget est indirectement instancié via un Pxxo_Widget_Form ; dans le cas d'une utilisation autonome ce paramètre est obligatoire |
| “nbLetterMin” | Integer | 2 | Nombre de lettre minimum nécessaire pour commencer à effectuer des requêtes |
| “nbMaxLigne” | Integer | 10 | Nombre maximum de résultats à afficher par bloc ; si la liste des résultats comportent plus d'elementz que cette valeur les élements supplémentaires seront ignorés |
| “activeGetVal” | Boolean | false | si à true renvoie la valeur associée à l'entrée selectionnée |
| “activeGetLib” | Boolean | false | si à true renvoie le libellé associé à l'entrée selectionnée |
| “activeLink” | Boolean | true | Active ou désactive la génération de lien qui permette de faire pointer les résultats vers une autre page |
| “modeLink” | String | SELF | Mode d'ouverture des liens ; valeurs autorisées : SELF, PARENT, OPENER, NEW ; ce paramètre est ignoré (et donc facultatif) si “activeLink” est positionné à false |
| “urlquery” | String | query.php | URL de la page à interroger pour constituer et renvoyer le résultat des requêtes d'auto-complétion ; pour des raisons de sécurité cette page de doit se trouver dans la même arborescence web que la page accueillant ce widget |
| “urldest” | String | Aucune | URL de la page vers laquelle pointeront les liens générés ; ce paramètre est ignoré (et donc facultatif) si “activeLink” est positionné à false |
| “urlsuivant” | String | Aucune | URL de la page vers laquelle un lien présentant la suite des résultats pointent ; ce parametre est ignoré (et donc facultatif) si “affLienSuivant” est positionné à false |
| “affLienSuivant ” | Boolean | true | active ou désactive l'affichage du lien “La suite des résultats” |
| “affEnteteBloc” | Boolean | true | active ou désactive l'affichage des entêtes de chacun des blocs |
| “affNbResultat” | Boolean | true | active ou désactive l'affichage du nombre de résultats |
| “txtLienSuivant” | String | cf.⇒ | Texte à afficher quand il y a davantage de résultats. Par défaut le texte suivant est utilisé : 'La suite des résultats …' |
| “txtNbResAucun” | String | cf.⇒ | Texte à afficher quand il n'y a aucun résultat. Par défaut le texte suivant est utilisé : 'Aucun résultat trouvé' |
| “txtNbResPlusieurs” | String | cf.⇒ | Texte à afficher quand il y a des résultats Par défaut le texte suivant est utilisé : 'résultats trouvés' |
| “fieldlinked” | mixed | null | tableau indexé de la forme Array( Array('id'⇒ identifiant_champ_lié, 'label' ⇒ nom_de_mapping_du_champ ) [ , … ] ) ; ce tableau contient l'identifiant de chacun des champs liées au livesearch et un label qui sera utilisé pour mapper ces champs dans les paramètres des requêtes AJAX et au niveau des paramètres des URL générées |
| “activePrefixOut” | boolean | true | si à true et “activeLink” à true, on prefixe chacun des paramètres en sortie par le ClassID afin que l'objet soit capable de reconnaitre automatiquement ses paramètres via la méthode getResult(). Cependant, on peut souhaiter désactiver cette fonctionnalité, dans ce cas, il faut valoriser ce paramètre à false. |
| “globalParamMapping” | mixed | null | tableau indexé de la forme Array( Array('in'⇒ nom_du_parametre_a_mapper, 'out' ⇒ nom_en_sortie ), [ , … ] ) ; Ce paramètre permet d'associer à un paramètre un autre nom. Pour en savoir plus cf. ci-dessous la section “Mapping de paramètre”. |
On peut l'utiliser de 2 manières différentes : soit on l'instancie par l'intermédiaire d'un Pxxo_Widget_Form, soit l'utiliser directement dans un formulaire “maison”. Vous avez remarqué que ce widget peut prendre énormément de paramètre. De cette manière son comportement et les résultats obtenus sont très variés afin de répondre aux plus larges besoins.
Il suffit d'instancier un Pxxo_Widget_Form en lui spécifiant quelques paramètres comme le montre l'exemple suivant :
$params = array ( 'inputs' => array( array( 'type' => 'livesearch', 'id' => 'test1', 'label' => 'pays', 'required' => true, 'urldest' => './query_pays.php', 'activeGetLib' => true, 'activeLink' => true, 'affLienSuivant' => false, 'affEnteteBloc' => false, ), ) ); $o = new Pxxo_Widget_Form($params);
Aucune subtilité (cf. paramètres) mise à part que le paramètre “form_id” doit être renseigné.
L'exemple ci-dessous illustre la structure attendue générée par le script interrogé pour répondre à la requête que le widget a constitué.
<div id=myResult> <span>61</span> <ul> <li>Commence par ...</li> <li> <ul> <li><span>TE.147253</span><span>ITALGIURE</span></li> <li><span>TE.118750</span><span>Italian ENEA</span></li> <li><span>TE.118751</span><span>Italian ENEL</span></li> <li><span>TE.141608</span><span>Italianisme</span></li> <li><span>TE.826</span><span>Italie</span></li> </ul> </li> </ul> <ul> <li>Contient ...</li> <li> <ul> <li><span>TE.11128</span><span>Brassica oleracea italica</span></li> </ul> </li> </ul> </div>
Dans cet exemple, on peut y voir le nombre de résultats de la requête, ici “61”, entre balise “span”. Par ailleurs, on peut voir deux blocs de résultats correspondant au premier niveau des “ul”, intitulés ici “Commence par” et “Contient…”. On pourrait très bien n'avoir qu'un bloc ou au contraire multiplier ceux-ci ou les faire varier en fonction des besoins et/ou des paramètres de la requête. Dans les niveaux plus profonds de chacun des blocs, on retrouve une liste (“ul”) dans laquelle se trouve la liste des items résultats. Chacun d'eux se trouvent dans un élément “li”. Le contenu de ce dernier est structuré via des balises “span”. Le premier “span” contient l'identifiant de l'item, le second contient le libellé qui sera affiché. La présence de l'identifiant est obligatoire mais celui-ci peut être égal au libellé dans le cas où, par exemple, l'applicatif n'a pas besoin de véhiculer un identifiant.
Il est possible de lier un ou plusieurs champs de formulaire au champ de saisie de saisie généré par ce widget. Cela permet d'enrichir les requêtes (et les liens générés) par les valeurs de ces champs qui constitue le contexte. Pour effectuer ce lien, il faut renseigner le paramètre “fieldlinked”. Celui-ci est un tableau de tableau qui respecte la structure illustrée dans l'exemple ci-dessous :
... 'fieldlinked' => array ( array('id' => 'f1', 'label' => 'alt' ), array('id' => 'lng', 'label' => 'lng' ) ) ...
- La clef “id” correspond à l'identifiant (attribut html “id') de l'élément de formulaire à lier.
- La clef “label” est une chaine de caractère qui permet de “mapper” l'élément avec les paramètres du script de recherche. Concrètement, dans l'exemple ci-dessus, la valeur x de l'élément de formulaire dont l'identifiant est “f1”, et la valeur y de l'élément “lng” seront automatiquement ajoutées à la requête de la manière suivante : …&alt=x&lng=y
Quand le paramètre “activeLink” est à true, la sélection d'un item dans la liste de résultats générée par le widget renvoie systématiquement deux paramètres vers l'url précisée dans “urldest” : “id” et “lib”. Ces deux paramètres sont par défaut préfixés par le ClassID. Dans un contexte d'existant et pour simplifier l'intégration de ce widget à celui-ci, on peut avoir le besoin de ne pas renvoyer ces paramètres sous ces noms. Par exemple, dans le script php (ou autre) qui répondra à l'url précisées dans “urldest”, on peut attendre un paramètre d'url nommé “idt” au lieu de, par défaut, “id” préfixé par le ClassID. Pour cela, il suffit de mapper la variable en le spécifiant de la manière suivante dans les paramètres passés au constructeur de ce widget :
... 'activePrefixOut' => false, 'globalParamMapping' => array ( array('in' => 'id', 'out' => 'idt' ) ) ...
- “activePrefixOut” à false : désactive le “préfixage” des paramètres par le ClassID
- La clef “in” correspond au nom du paramètre à mapper.
- La clef “out” est le nom que le paramètre spécifié dans “in” utilisera en sortie.
On peut également mapper d'autres paramètres, par exemple, un champ lié au livesearch ou encore un paramètre utilisé pour générer les url des liens de type “la suite des résultats”. Exemple :
... 'activePrefixOut' => false, 'globalParamMapping' => array ( array('in' => 'id', 'out' => 'idt' ), array('in' => 'lng', 'out' => 'lang' ), array('in' => 'qry', 'out' => 'q' ) ) ...
Il est mentionné dans le tableau décrivant les paramètres :
| Nom | Type | Valeur par défaut | Description |
|---|---|---|---|
| “urlquery” | String | query.php | URL de la page à interroger pour constituer et renvoyer le résultat des requêtes d'auto-complétion ; pour des raisons de sécurité cette page de doit se trouver dans la même arborescence web que la page accueillant ce widget |
Cette restriction est liée à l'utilisation d'AJAX. Cependant on peut être coincé et devoir utiliser, par exemple, un webservice ne se trouvant par sur le même serveur et/ou arborscence web pour executer la requête de recherche. Pour cela, il suffit de créer une page dans votre arborescence qui fera office de “proxy”. Dans cette page, il suffit d'en récupérer les paramètres et via la fonction php file_get_contents d'ouvrir l'url du webservice et d'en écrire le résultat. L'exemple suivant illustre ces propos :
// encodage de retour header('Content-Type: text/html; charset=utf-8'); // les paramètres à faire suivre $params = ( isset($_GET['qry']) ? '&qry='.$_GET['qry'] : '' ); $params .= ( isset($_GET['lng']) ? '&lng='.$_GET['lng'] : '' ); // url de destination $url = 'http://neotrouvetou.com/wbs/query.php?'; // récupération et écriture du résultat echo ( $buffer=file_get_contents($url.$params) ? $buffer : '' );
Dans cet exemple, le script php qui fait office de “proxy” prend en paramètre la langue (“lng”), ainsi que la chaine à rechercher (“qry”). L'URL à interroger est la suivante http://neotrouvetou.com/wbs/query.php et renvoie un résultat encodé en UTF-8 (Attention à bien utiliser le même encodage de caractère en retour que sur la page qui accueille ce widget) et on affiche le retour si il y en a un.