4.7 Les aides à la saisie
4.7.1 Présentation
Une aide à la saisie permet de compléter ou de remplir des zones de saisie lors de la modification d'un document, en proposant des suggestions à l'utilisateur.
Les suggestions sont calculées au moyen d'une fonction qui doit être définie dans
un fichier php placé dans le répertoire /EXTERNALS/
du contexte.
Elle doit retourner un résultat sous la forme d'un tableau à 2 dimensions :
- la première dimension correspond à la liste des suggestions ;
-
la seconde dimension correspond à la liste des valeurs à insérer dans le document lors du choix de cette suggestion.
Elle est traitée de manière positionnelle :
- La première valeur est affichée en tant que suggestion pour l'utilisateur ;
- les valeurs suivantes sont dépilées et affectées dans l'ordre aux attributs cible.
Elle peut également retourner une chaîne de caractères, qui servira de message d'erreur.
4.7.2 Syntaxe
La syntaxe définissant les aides à la saisie est la suivante :
Ce qui donne en BNF :
inputHelp ::= funcName '(' ( funcInputs | ) ')' ':' funcOutputs funcInputs ::= funcInput ( ',' funcInput )* funcInput ::= '<spaces>'* ( sourceAttributeName | familyParameterName | text | sourceKeyWord | propertyName | '{' appParameterName '}' | '{' familyName '}' ) '<spaces>'* funcOutputs ::= funcOutput ( ',' funcOutput )* funcOutput ::= ( targetAttributeName | targetKeyWord ) text ::= ( "'" '<text>' ) | ( "'" "[^',]+" "'" ) | ( '"' '[^",]+' '"' ) sourceKeyWord ::= ( 'CT' | 'CT' '[' relationAttributeName ']' | 'D' | 'I' | 'K' | 'T' | 'A' ) targetKeyWord ::= ( 'CT' | 'CT' '[' relationAttributeName ']' )
avec les éléments suivants :
- sourceAttributeName
-
Un nom d'attribut existant dans la famille.
La fonction de calcul recevra la valeur de l'attribut au moment de l'appel.
Lorsque attributeName est dans un array, alors la valeur passée est :
- la valeur sur la même ligne si l'attribut sur lequel est définie l'aide à la saisie est dans le même tableau,
- la valeur de la colonne (sous la forme d'un tableau php) si l'attribut sur lequel est définie l'aide à la saisie est en dehors du tableau
- la valeur sur la même ligne si l'attribut est dans un autre tableau, ce qui peut conduire à des comportements surprenants.
- familyParametername
-
Un nom de paramètre existant dans la famille.
La fonction de calcul recevra la valeur du paramètre au moment de l'appel.
- sourceKeyWord
-
Un mot clé qui est remplacé par une valeur dynamique.
- CT[relationAttributeName]
-
La valeur de l'input correspondant à la relation relationAttributeName.
Lorsque l'id est rempli, cela correspond au titre du document cible, sinon cela correspond au texte saisi dans cet input.
- CT
-
Raccourci pour CT[currentAttributeName] (où currentAttributeName est le nom de l'attribut sur lequel est définie l'aide à la saisie).
Ne peut être utilisé que sur les attributs de type relation.
- D
- Accès à la base de données.
- I
- Id du document courant.
- K
-
L'index de la ligne en cours si l'attribut est dans un tableau.
Si l'attribut n'est pas dans un tableau, la valeur passée est
-1
- T
-
L'objet php correspondant au document en cours.
L'objet récupéré est le document tel qu'il est en base de donnée.
- A
-
L'action courante (un objet de la classe
Action
).Cela permet, par exemple, de récupérer des informations sur l'utilisateur courant.
- propertyName
-
Une propriété du document.
Elle sera remplacée par sa valeur.
- appParameterName
-
Un paramètre applicatif.
Ce paramètre doit obligatoirement être global.
- familyName
-
Un nom logique de famille.
Il sera remplacé par son id.
- targetAttributeName
-
Un nom d'attribut existant dans la famille.
Lors du choix d'une des suggestions, les valeurs correspondant à ces suggestions sont insérées dans l'ordre dans les attributs désignés par targetAttributeName
- targetKeyWord
-
Un mot clé désignant la cible de l'aide à la saisie.
- CT[relationAttributeName]
- L'input correspondant à la relation relationAttributeName.
- CT
- Raccourci pour CT[currentAttributeName] (où *currentAttributeName est le nom de l'attribut sur lequel est définie l'aide à la saisie).
- ?
-
permet de "sauter" une des valeurs de retour sans l'utiliser.
Est particulièrement utile dans le cas d'aides à la saisie génériques qui retournent plus de valeurs que d'attributs à compléter.
4.7.3 Exemples
4.7.3.1 Retour unique
attrid | label | type | visibility | phpfile | phpfunc |
---|---|---|---|---|---|
city_name | Ville | text | W | cities.php | getCities(city_name):city_name |
<?php /** * EXTERNALS/cities.php */ function getCities($userInput=''){ $suggestions = array(); // Liste des villes utilisables $availableCities = array( "Paris", "Toulouse", "Souillac" ); //teste si les villes correspondent à la saisie de l'utilisateur foreach($availableCities as $city){ if( ''===$userInput || preg_match(strToLower($userInput), strToLower($city)) ){ $suggestions[] = array( $city, //le nom de la suggestion $city //la valeur qui ira dans attr_city ); } } return $suggestions; } ?>
4.7.3.2 Retour multiple
attrid | label | type | visibility | phpfile | phpfunc |
---|---|---|---|---|---|
city_name | Ville | text | W | cities.php |
getCities(city_name):city_name |
city_cedex | Code postal | int | W | cities.php |
getCedex(city_cedex):city_cedex,city_name |
<?php /** * EXTERNALS/cities.php */ function getCedex($userInput=''){ $suggestions = array(); // Liste des villes utilisables $availableCities = array( "75000" => "Paris", "31000" => "Toulouse", "46200" => "Souillac" ); //teste si les villes correspondent à la saisie de l'utilisateur foreach($availableCities as $cedex => $city){ if( ''===$userInput || preg_match($userInput, $cedex) ){ $suggestions[] = array( sprintf("[%d] %s", $cedex, $city), //le nom de la suggestion $cedex, //la valeur qui ira dans attr_cedex $city //la valeur qui ira dans attr_city ); } } return $suggestions; } ?>
4.7.4 Astuces
4.7.4.1 attributs relation
- Lorsqu'une aide à la saisie remplit un attribut de type docid, il faut penser à remplir l'id et le titre affiché (attrid et CT[attrid]).
- Lorsqu'un attribut est masqué (visibilité R ou H), alors le champ désigné par CT[attrid] n'existe pas, il est donc impossible de les désigner comme retour des aides à la saisie.
4.7.4.2 attributs htmltext
- Lorsqu'un attribut de type htmltext est utilisé en entrée d'une aide à la saisie, la valeur reçue est encodée. il est donc nécessaire de la décoder (au moyen de html_entity_decode)