AUTEUR : FRANCK OBERLECHNER, Ingénieur Système et Réseaux
Dernière mise à jour : Mai 2008
SOMMAIRE
1. Préambule
4. Déclaration d'un formulaire
6. Controle de saisie des objets
7. Modification de l'état des objets
8. Mise en forme des champs du formulaire
10. La gestion des Upload ( Copie d'un fichier local vers le serveur WEB )
1) PREAMBULE
La classe ClasseForms.php permet de déclarer les éléments d'un formulaire sous forme d'objets. Ils sont ensuite transformés en HTML et associés à du code JAVASCRIPT pour la gestion des interactions entre les objets.
Types d'objets :
- Champs Texte,
- Champs Date avec ou sans calendrier Popup, Time stamp,
- Champ TextePopUp
- Champ Timer
- Champs mémo (saisie libre sur plusieurs lignes) et Editeur de type Word
- Listes simples, avec filtres, avec zone saisissable (COMBO BOX), à choix multiple
- Listes double en bascule, Paire de listes chainées (MERE/FILLE), Listes en cascade
- Coches, Boutons radio,
- Champ caché
- Slider
- Onglets
- Arbres hiérarchiques
- Sélecteur d'icones
- Sélecteur de couleur
- Listes à trier
- Gestionnaire de téléchargement
Fonctions associées à ces objets :
- Masques de saisie,
- activations/désactivations dynamique sur coche,
- champs d'aide "Tooltips" sous forme de bulles d'aide,
- controle de validité des champs avant validation du formulaire
- Choix d'une palette prédéfinie pour tous les objets (SKINS)
Une bibliothèque d'objets formulaire DHTML généré par PHP dynamiquement ne présente un intérêt que si elle est compatible avec tous les navigateurs. Les scripts sont donc compatibles avec Internet Explorer (v6+) et Mozilla (1.3+).
Les exemples PHP exécutables sont signalés par l'icone ( la classe doit être installée au préalable )
2) LA RE-ENTRANCE
La gestion des pages est ici simplififiée par le principe de ré-entrance des pages :
Une même page servira à ajouter, modifier, corriger et enfin enregistrer les données du formulaire grace à l'appel en boucle de la page mais à un comportement différent en fonction de l'action précédente.
3) INSTALLATION
Définir un répertoire "include_path" en modifiant le fichier de configuration de PHP %SYSTEMROOT%\PHP.INI sous IIS
;;;;;;;;;;;;;;;;;;;;;;;;;
; Paths and Directories ;
;;;;;;;;;;;;;;;;;;;;;;;;;; UNIX: "/path1:/path2"
;include_path = ".:/php/includes"
;
; Windows: "\path1;\path2"
include_path = "d:/wwwroot/rubappli/communs"Décompresser dans le répertoire "include_path" du serveur PHP le fichier classeForms.php et le répertoire classeForms (ce répertoire contient toutes les ressources nécessaires à la classe)
On obtient l'arborescence :
.../Répertoire_Include
_classePath.php
classeForms.php
classeForms <dir>Editer le fichier _classePath.php et modifier la ligne DEFINE en terminant par un "/" obligatoirement, la constante INCLUDEPATH doit pointer sur le répertoire ou se situe le fichier classeForms.php et _classePath.php
// PARAMETRAGE :
DEFINE('INCLUDEPATH','/rubappli/communs/');ATTENTION pour que toutes les pages de votre site fonctionnent, définir de préférence un chemin absolu ( commencant par un / et donnant le chemin complet depuis la racine du site )
C'est tout ! la classe est maintenant exploitable directement
EN OPTION : DEFINITION D'UN THEME DE COULEUR IMPLICITE POUR TOUT LE SITE
Créer un fichier _classeSkin.php dans le répertoire des inclusions
<?php
// 0: Rouge, 1:Bleu, 2:Gris, 4:Vert, 5:Orange
DEFINE('DEFAULT_SKIN', 5);?>
ce fichier est utilisé par les autres classes classeTableau, classeGrid tous les objets gérés par ces classes bénéficient du même thème de couleurs.
ATTENTION : L'INSTALLATION COMPLETE EST NECESSAIRE POUR TESTER LES EXEMPLES QUI SUIVENT
4) DECLARATION DU FORMULAIRE
On ne peut déclarer qu'un seul formulaire "ClasseForms" par page.
Syntaxe :
<?php balise de début de code PHP,
ATTENTION LE CODE QUI SUIT DOIT PRECEDER LA BALISE <HTML>
include('classeForms.php');
appel au code de la classe $f = New Forms; création d'un nouvel objet "formulaire" : $f $f->frm_Init($readonly,'200px',$premierchamp); Iinitialisation de l'objet :
les 2 paramètres sont optionnels.
1) = true, si on veut qu'une grille ne soit pas modifiée et ne serve que de visu. Une même page PHP peut donc servir à la modification, a l'ajout ou pour une simple visualisation. C'est le codage qui le déterminera
voir le comportement du mode "lecture seule"2) = '200px', c'est la largeur de la colonne label des champs en mode affichage automatique (voir la fonction frm_Ouvrir() ), cette option est inutile si on utilise l'ordre frm_MasquerLabel()
3) [optionnel] par défaut = false, permet au chargement du formulaire de se retrouver directement sur le 1er champ.
si un ordre $f->frm_InitFocus('NOM_PREMIER_CHAMP'); est défini postérieurement c'est ce champ là qui sera activé
$f->frm_MasquerLabel(); ne pas afficher la colonne label même si des label ont été définis dans les objets
$f->frm_Protection(); permet de désactiver le clic droit sur la page (Fonction optionnelle)
$f->frm_InitUpload($taillemaxi, $chemindestination, $attributsautorises);
permet dans le cas de la présence d'un champ Sélecteur de fichier d'activer la fonction UPLOAD : 3 paramètres "chaine de caractères" sont obligatoires :
1 - Le chemin de destination (obligatoire)
2 - La taille maximum du fichier en Octets téléchargeable (optionnel)
3 - Les suffixes de fichiers autorisés (le séparateur étant la virgule "," ) exemple : "DOC,XLS,TXT" (optionnel)
$f->frm_InitConfirm(); permet de demander une confirmation d'enregistrement si tous les tests sont OK avant validation du formulaire
$f->frm_InitPalette($codepalette); permet d'initialiser la couleur de tous les objets disponbible en une seule ligne :
$codepalette = 1 ( bleu ), =2 (Gris), =3 (Jaune)
La palette par défaut est rouge.
Pour définir de nouvelles palettes modifier le switch/case de la fonction.
voir le rendu$f->frm_InitFont("10"); on peut changer la taille de la fonte, par défaut sans appel à cette fonction la taille est = 10
. Appel à une fonction qui définit les objets ou aux fonctions frm_* directement.
. Appel aux fonctions qui modifient les caractéristiques des objets Ces fonctions permettent en fonction de la réentrance de modifier les champs dans leur définition (activation ou non, changer la valeur par défaut, pointage en erreur..)
$ret = $f->frm_Aiguiller();
switch ( $ret ) {...}
Analyse de la ré-entrance voir chapitre traitant le sujet ?>
Fin de définition des objets du formulaire <html>
<head>
<title>...</title>
</head>
<body>...
<?php
Insertion ici du code HTML de présentation, les menus titres de fenêtre sont à placer ici. $f->frm_Ouvrir($modeautomatique); Affichage des champs définis ci-dessus
2 modes sont possibles ( automatique=par défaut
ou manuel )Mode automatique :
tous les champs sont placés automatiquement dans l'ordre de leur définition. Ils sont placés dans un tableau à 2 colonnes :
. A gauche : le "label" qui donne la signification du champ
. A droite : le champ.
Tous les champs sont alors alignés.Mode manuel :
Tous les champs sont à placer manuellement, il est possible de les placer dans l'ordre que l'on veut, plusieurs par ligne. Le "label" n'est pas affiché, il faut le saisir manuellement
if ($f->frm_Reentrant()) {
...
}
Si la page est réentrante alors la fonction retourne vrai $f->frm_Fermer(); Pour fermer le formulaire (envoi la balise </FORM> et ferme le tableau ouvert en mode automatique )
?>
5) DECLARATION DES OBJETS
Tous les champs devoient être unique dans la grille, les éventuels doublons sont signalés.
Le nom des champs doit être en majuscule pour correspondre à leurs valeur retournée par $_POST['NOMCHAMP'].
5.1) CHAMPS TEXTE
Le champ texte permet toute saisie en une seule ligne de données. Ces données peuvent être formatée par des masques.
Syntaxe :
$f->frm_ObjetChampTexte("NOM",array(
"label" => "Nom :",
"attrib" => "RU",
"width" => "100px",
"maxlength" => "20",
"help" => "ceci est le texte de l'aide",
"default" => "Nom par défaut")
);
$f->frm_ObjetChampTexte("TEL",array(
"label" => "Téléphone (*)",
"attrib" => "R",
"default" => "02.50.10.02.03",
"mask" => "##.##.##.##.##")
);
$f->frm_ObjetChampTexte("MONEY",array("label" => "Mon salaire en € sans les centimes (mask=€#_###.##)",
"attrib" => "N",
"mask" => "€#_###.##",
"help" => "Saisir le salaire à travers le masque, 2 décimales non obligatoire €#_###.##")
);
$f->frm_ObjetChampTexte("DATE_1",array("label" => "Date manuellemen ou avec calendrier (attrib=DP)",
"attrib" => "DP",
"default" => "TIMER",
"help" => "Saisir une date ou la sélectionner dans au calendrier")
);Détail des paramètres:
- label : c'est le texte qui apparait dans la colonne des labels (mode affichage automatique) et quand une erreur de saisie est détectée à la validation du formulaire.
- default : affectation d'une valeur par défaut, dans le cas des champs DATE et TIMESTAMP si = "TIMER" alors l'horloge du serveur est récupérée.
- attrib : attributs des champs
"R" : champ obligatoire
"+" : Lecture seule ( même action que la fonction frm_ChampLectureSeule() )
"-" : Désactiver le champ ( même action que la fonction frm_ChampActif() )
"U" : transformation en majuscule
"L" : transformation en minuscule
"I" : transformation avec l'initiale en majuscule le reste du mot en minuscule"M" : pour une adresse email du type : nom@domaine.com
"N" : pour numérique, le cadrage est automatiquement placé à droite, les caractères alphanumériques autre que +, -, . sont ignorés.
"W" : préformate le champ texte en type PASSWORD
"D" : préformate la saisie au format date "jj/mm/aaaa", la saisie de l'année sur 2 caractères est automatiquement complétée à 4. ( en ajoutant "P" un bouton calendrier est ajouté à droite )
"T" : préformate la date au format "timestamp" jj/mm/aaaa hh:mm, un bouton calendrier est rajouté automatiquement la saisie manuelle n'est pas possible
"H" : format de saisie HH:MM
exemple de combinaisons : RDP (champ date obligatoire avec bouton "calendrier"), RN (numérique obligatoire)
- mask : définit un masque de saisie dynamique (voir possibilités ci-dessous)
- width : définit la largeur
- maxlength : nombre de caractères maximun
- help : affiche au niveau du champ à droite de la fenêtre une bulle d'aide, le libellé de l'aide peut contenir des balises HTML ( <b></b> pour mettre un mot en gras par exemple
5.2) CHAMPS MEMO ET EDITEUR DE TYPE WORD
Le champ mémo permet toute saisie libre en une ou plusieurs lignes.
Le champ editeur permet une saisie formatée comme un éditeur de type WORD l'objet utilise l'excellente librairie FCKeditor un peu lourde à charger à la 1ere visite mais ne fois dans le cache du navigateur quelle puissance !
Syntaxe :
$f->frm_ObjetChampMemo("MEMO", array(
"label" => "Champ Mémo",
"attrib" => "RU",
"default" => "Ceci est la valeur par défaut passé au champ ",
"help" => "Saisie libre dans cette zone",
"width" => "400px")
);
$f->frm_ObjetEditeur("EDITEUR", array(
"label" => "Champ Editeur",
"width" => "400px",
"height" => "150px",
"userfilespath" => "/tmp/",
"default" => "Ceci est la <b>valeur par défaut</b> passé au <um>champ \"Editeur\"</um><br>Le contenu de ce champ est évidemment à sauvegarder dans un champ mémo")
);
Détail des paramètres:
- label : c'est le texte qui apparait dans la colonne des labels (mode affichage automatique) et quand une erreur de saisie est détectée à la validation du formulaire.
- attrib : attributs des champs
"R" : champ obligatoire
"U" : transformation en majuscule
"I" : transformation avec l'initiale en majsucule le reste du mot en minuscule"N" : pour numérique, le cadrage est automatiquement placé à droite, les caractères alphanumériques autre que +, -, . sont ignorés.
"+" : Lecture seule ( même action que la fonction frm_ChampLectureSeule() )
"-" : Désactiver le champ ( même action que la fonction frm_ChampActif() )"D" : préformate la saisie au format date "jj/mm/aaaa", la saisie de l'année sur 2 caractères est automatiquement complétée à 4. ( en ajoutant "P" un bouton calendrier est ajouté à droite )
"T" : préformate la date au format "timestamp" jj/mm/aaaa hh:mm, un bouton calendrier est rajouté automatiquement la saisie manuelle n'est pas possible
"H" : format de saisie HH:MM
MEMO = rows : le nombre de lignes du champ
EDITEUR = height: hauteur de la zone de saisie en pixels
Paramètres spécifiques à l' éditeur :
"userfilespath" => "/tmp/" : racine du gestionnaire de fichiers ATTENTION pour la prise en compte de cette option la page doit avoir une session d'ouverte.
Si le formulaire est en lecture seul toute la barre d'outils disparait :
5.3) CHAMPS LISTES SIMPLES ET COMPLEXES
5 fonctions permettent de gérer des listes de manière différente :
- frm_ObjetListe : liste simple on choisit un élément de la liste
- frm_ObjetListeLongue : filtrage d'une liste avec de nombreux éléments pour simplifier la recherche , la saisie d'une valeur est possible
- frm_Objet2Listes : création de 2 listes en liaison. La valeur retournée est la valeur du fils sélectionnée. les valeurs sont passées en un seul tableau de "hash" qui doit être de la forme :
array( "1" => "Valeur Père 1", "2" => "Valeur Père 2",
"1.1" => "Valeur fils 1 du père 1", "1.2" => "Valeur fils 2 du père 1",
"2.1" => "Valeur fils 1 du père 2 ", "1.2" => "Valeur fils 2 du père 2 "
... )
- frm_ObjetListeEditable : comportement "combo box", choix de valeur parmi une liste avec la possibilité de saisir une valeur propre. Le champ de données est caché et à pour nom le nom du champ "NOMDUCHAMP", la valeur de saisie se nomme "NOMDUCHAMP_EDIT". Quand la valeur n'est pas dans la liste les caractères du champ deviennent italique et la valeur retournée par "NOMDUCHAMP" = -1
- frm_ObjetListeBascule : création de 2 listes avec possibilité de faire glisser des valeurs de droite à gauche et réciproquement.
- Les indices des lignes sélectionnées sont concaténées dans un seul champ (caché) avec la virgule "," comme séparateur. Ce champ se nomme "NOMDUCHAMP".
- La valeur par défaut fonctionne de même : si les indices 1,3,4 sont passés par défaut alors default = "1,3,4"Syntaxe :
$f->frm_ObjetListe("LISTE_NORMALE", array(
"label" => "Liste déroulante ",
"title" => "----- Choisir une VILLE -----",
"default" => "5",
"help" => "choisir une ville de la liste",
"width" => "200px"),
$tableau1
);
$f->frm_ObjetListe("LISTE_OBLIG", array( "label" => "Capitale (*)",
"attrib" => "R",
"default" => "5",
"help" => "choisir OBLIGATOIREMENT une ville de la liste",
"width" => "200px"),
$tableau1
);
$f->frm_ObjetListe("LISTE_LNG", array( "label" => "Liste normale",
"default" => "3",
"rows" => 5,
"help" => "choisir une ville de la liste",
"width" => "200px"),
$tableau1
);
$f->frm_ObjetListeLongue("LISTE_LONGUE" ,array(
"label" => "Liste longue avec filtre (*)",
"default" => "2",
"attrib" => "RU",
"addvalue" => true,
"rows" => "4",
"help" => "Utiliser le champ de filtrage pour trouver et choisir une ville",
"width" => "200px",),
$tableau1
);
$f->frm_Objet2Listes("LISTE_VERT", array( "label" => "2 listes en liaison (V)",
"orientation" => "V",
"default" => "2.2",
"help" => "choisir une option et une sous-option",
"width" => "200px",
"title1" => "---choisir la ville---",
"title2" => "---choisir la curiosité---")
,
array( "1" => "Paris", "2" => "Lyon",
"3" => "Marseille", "4" => "Toulouse",
"1.1" => "Tour effel", "1.2" => "Sacré coeur",
"2.1" => "Fourvière", "2.2" => "Bellecour",
"3.1" => "Canebière", "3.2" => "Notre dame de la garde",
"4.1" => "Capitole", "4.2" => "Saint-Sernin")
);
$f->frm_ObjetListeEditable("Liste", array( "label" => "Liste éditable",
"attrib" => "RI",
"default" => "Bruxelles",
"width" => "200px",
"help" => "Saisir une valeur de la liste ou saisir une nouvelle (les valeurs hors liste sont en italique)",
),
$tableau1 );
$f->frm_ObjetBascule("LISTE_BASCULE", array( "label" => "Listes en bascule",
"default" => "1,2,3",
"attrib" => "R",
"rows"=>"10",
"title1" => "Liste gauche",
"title2" => "Liste droite",
"help" => "choisir au moins une ville",
"width" => "100px"
),
$tableau1 );
ATTRIBUTS COMMUNS
- label : c'est le texte qui apparait dans la colonne des labels (mode affichage automatique) et quand une erreur de saisie est détectée à la validation du formulaire.
- default : valeur par défaut (indice du tableau ou valeur quelconque possible pour la fonction frm_ObjetListeEditable()
- width : largeur en pixels du champ liste
- help : bulle d'aide
- attrib : attributs des champs
"R" : champ obligatoire
"U" : transformation en majuscule
"I" : transformation avec l'initiale en majsucule le reste du mot en minuscule"+" : Lecture seule ( même action que la fonction frm_ChampLectureSeule() )
"-" : Désactiver le champ ( même action que la fonction frm_ChampActif() )- rows : nombre de lignes de la liste, dans le cas de la bascule, la valeur implicite et minimale = 7
- orientation : V pour vertical, H pour Horizontal
- title : c'est le titre de la liste, n'apparait que dans les listes déroulantes ( le paramètre rows non défini )
- titlevalue : vient completer title en lui donnant une valeur par défaut ( très utile dans le cas d'un choix non obligatoire qui ne doit pas prendre la valeur NULL dans la base)
- title1, title2 : titre des 2 listes
MATRICE DES PARAMETRES
PARAMETRES ObjetListe ObjetListeLongue Objet2Listes ObjetListeEditable ObjetListesCascade ObjetBascule label X X X X X Xdefault X X X X X Xwidth X X X X X Xhelp X X X X X Xattrib X X X X X Xrows X X Xorientation X Xtitle X Xtitlevalue Xtitle1, title2 X Xsort Xaddvalue Xscript X X
cas particulier de l'objet frm_ObjetListeEditable :
ATTENTION CE CHAMP EST INCOMPATIBLE AVEC LES ONGLETS
si l'objet a pour nom "LISTEEDITABLE", la page retourne 2 variables POST issues de champs
- $_POST['LISTEEDITABLE'] , l'indice dans la table de l'objet sélectionné ou -1 si l'élément n'est pas dans la table (c'est un champ "hidden" )
- $_POST['LISTEEDITABLE_EDIT'], le libellé du champ
pour initialiser la valeur de l'objet on dispose de 3 possibilités :
- soit on passe l'indice de l'élément du tableau (numérique)
- soit une des valeurs présente dans le tableau (chaine de caractères)
- ou enfin une chaine quelconque qui n'est pas dans la liste, et qui apparait alors en italique
// ANALYSE DES VALEURS ENREGISTREES
if ( isset($_POST['LISTE_1']) ) {
// SI L'INDICE EST =-1 ALORS C'EST UNE CHAINE QU'IL FAUT PASSER EN VALEUR "PAR DEFAUT"
if ($_POST['LISTE_1']==-1) $def_liste1 = $_POST['LISTE_1_EDIT'];
else $def_liste1 = $_POST['LISTE_1'];
} else {
$def_liste1 = "Bruxelles";
}
cas particulier de l'objet frm_ObjetBascule :
sort : quand cette option est true alors les éléments de la liste de droite sont triables.
le champ qui correspond au nom de l'objet est un objet caché qui contient la liste des indices des options sélectionnées séparés par une virgule. Le choix de ce séparateur n'est pas un hasard puisqu'en SQL on peut sélectionner plusieurs enregistrements qui ont un identifiant parmi une liste de valeurs séparés par une virgule :
SELECT * FROM MaTable WHERE id_table IN (1,2,3,4)
cas particulier de l'objet frm_ObjetListeLongue :
addvalue : quand cette option est true la zone de filtre devient en même temps un champ de saisie
addminlength : taille minimum ajoutable, si =5 par exemple les mots de moins de 5 caractères ne sont pas ajoutables
L'interpretation de la valeur retour se fait comme suit :
Avec la déclaration du champ "NOM_DU_CHAMP" sont retournés 2 variables $_POST : "NOM_DU_CHAMP" qui contient l'indice dans la table ou -1 si nouvelle saisie, et "NOM_DU_CHAMP_EDIT"la valeur de la nouvelle saisie
script : expression exécutée a chaque changement d'état de l'objet, l'exemple sample05_listes_longues_script.php permet par exemple d'activer un autre champ quand la valeur saisie avec l'attribut "addvalue" n'est pas dans la liste.
Nouveaux attributs AJAX :
Dans ce cas le tableau des valeurs est vide, la liste est recalculée dynamiquement
ajax : le seul paramètre obligatoire, c'est le nom de l'URL qui retourne un XML, par défaut le paramètre est passé en POST et se nomme:
- 'TEXT' pour une recherche plein texte
- 'VALUE' pour trouver un enregistrement précis sur son identifiant
mais on peut aussi envoyer d'autres paramètres au moyen d'un HASH de la forme :
"ajaxparams" => array(
'DEPARTEMENT' => "MM_findObj('DEPARTEMENT').value",
'NOM' => "MM_findObj('NOM').value",);
ajaxsearchminlength : la recherche est interdite en si le nombre de caracteres est en dessous de cette limite. Cet attribut empeche le script de durer trop longtemps et de planter le navigateur dans le cas de tables importantes,
ajaxautosearch : true / false, appel a chaque modification du filtre, peut être assez lent sur une table importante
ajaxautosearchminlength : l'appel est manuel quand le filtre a moins de x caractères et est automatique au dessus, cet attribut est pratique pour les grandes tables
ajaxmodedebug : true / false, par l'ajout d'une icone on peut appeler la page qui retourne le fichier XML et vérifier le contenu retourné dans une fenêtre d'alerte et ainsi vérifier si une erreur de syntaxe ne vient pas fausser la structure du fichier XML
cas particulier de l'objet frm_ObjetListesCascade :
L'objet permet de gérer de 2 à x listes en cascades, avec alimentation des listes en AJAX via un fichier XML
et dans 2 modes particuliers :
- normal : le mode par défaut, pour valider l'objet il faut obligatoirement (si attribut "R" ) une value de la liste la plus basse.
- multi-niveau : le mode qui permet de choisir au moins une valeur mais dans un niveau quelconque. Il sera utilisé pour réaliser un filtre de recherche.
L'interpretation des valeurs en retour se fait comme suit :
Avec la déclaration du champ "NOM_DU_CHAMP" sont retournés 2 variables $_POST : "NOM_DU_CHAMP" qui contient l'indice dans la table, et "NOM_DU_CHAMP_LEVEL" le nom du niveau préalablement défini
ce mode est activable par la directive :
'multilevel' => trueajax : le seul paramètre obligatoire, c'est le nom de l'URL qui retourne un XML, par défaut le paramètre est passé en POST et se nomme comme l'id.
Ici encore 2 modes d'appels :
- 1 seule page PHP pour toutes les listes et on analyse la valeur du $_POST['ID'] pour exécuter le code qui retournera le bon XML.
- 1 page par liste, permet de faire une page par liste,
list : le tableau de tableau qui contient tous les paramètres de chaque liste, de la forme
'list' => array(
array( 'id' => 'REGION',
'title' => "---choisir une région---",
'width' => '150px' ),
array( 'id' => 'DEPT',
'title' => "---choisir le département---",
'width' => '200px' ),
array( 'id' => 'VILLE',
'title' => "---choisir la ville---",
'width' => '300px' ),),
ajaxmodedebug : true / false, par l'ajout d'une icone on peut appeler la page qui retourne le fichier XML et vérifier le contenu retourné dans une fenêtre d'alerte et ainsi vérifier si une erreur de syntaxe ne vient pas fausser la structure du fichier XML
script : expression exécutée a chaque changement d'état de l'objet, l'exemple sample05_listes_longues_script.php permet par exemple d'activer un autre champ quand la valeur saisie avec l'attribut "addvalue" n'est pas dans la liste.
"erase" => true, permet en affichant la croix d'effacer tous les niveaux de liste.
"reset" => true, permet pour cet objet de revenir à la valeur initiale."ajaxparams" => array(
'FILTRE' => "MM_findObj('FILTRE').value"
);
permet d'envoyer au fichier appelé des paramètres supplémentaire en variable POST, on peut par exemple modifier les critères de recherche et de filtre en fonction de la valeur d'autres objets
On peut choisir de ne pas initialiser a la création de l'objet la liste racine : dans ce cas le dernier paramètre de l'objet est égal à array() = liste vide
il suffit ensuite d'interpreter dans la page appelée la variable POST['ROOT'] ( voir exemple sample05_listes_cascade7.php et la page appelée sample05_listes_cascade_root_called.php )
on peut remplacer cette variable par défaut en initialisant l'attribut 'root' => 'TITI' la page appelée sample05_listes_cascade_root_called.php devra donc analyser cette valeur 'TITI'
5.4) CHAMPS COCHES ET BOUTONS RADIO
2 fonctions permettent de manipuler des coches et des boutons radio pour activer au nom des champs liés au choix
frm_ObjetCoche : case à cocher
frm_ObjetBoutonsRadio : Boutons radios
Syntaxe :
$f->frm_ObjetCoche("DEPLACER", array(
"label" => "Mobilité", "title" => "Un déplacement est nécessaire",
"help" => "Sélectionner Si un déplacement est nécessaire",
"default" => "0",
"activation" => array("CHAMP1","CHAMP2","CHAMP3") )
);
$f->frm_ObjetBoutonsRadio("BTNSRAD", array("label" => "Sexe",
"default" => "1",
"help" => "cocher Homme ou Femme pour choisir un prénom",
"activation" => array("CHAMP1","CHAMP2") ),
$tableau1
);PARAMETRES COMMUNS
label : c'est le texte qui apparait dans la colonne des labels (mode affichage automatique) et quand une erreur de saisie est détectée à la validation du formulaire.
default : valeur par défaut (indice du tableau ou valeur quelconque possible pour la fonction frm_ObjetListeEditable()
help : bulle d'aide
activation => array("champ1","champ2",...) : permet d'activer un ou plusieurs champs par la case à cocher ou faire correspondre à une option du bouton radio un champ qui s'activera quand elle sera sélectionnée. On peut définir un tableau de tableau de champ (voir ci dessous)
noactivation => array("champ1","champ2",...) : permet de désactiver un ou plusieurs champs par la case à cocher ( un seul pour un bouton radio, plusieurs pour une coche)SPECIFIQUE "COCHE"
valueon, valueoff : par défaut respectivement '0' et '1' mais on peut prendre 'O', 'N' ou n'importe quelle valeur
SPECIFIQUE "BOUTON RADIO"orientation : V pour vertical, H pour Horizontal
LES BOUTONS RADIOS GERENT DEPUIS LA VERSION 1.09 L'ACTIVATION DE 1 A n CHAMP PAR OPTION RADIO
on définit un tableau de tableaux :
activation => array("champ1", array("champ2-1","champ2-2"),"champ 3",...)
5.5) UPLOADER DE FICHIERL'utilisation du sélecteur de fichier standard HTML a été intégré dans une fenêtre POPUP pour ne pas planter tout le formulaire quand un problème survient (fichier trop gros pour le serveur et la page retournée par le serveur est une "internal error" )
L'objet fonctionne en mode simple fichier :
dans ce cas, La valeur de l'objet contient le nom physique du fichier sans son chemin (qui est connu puisqu'égal à la valeur de "target" ) Le nom du fichier choisi par le sélecteur peut être préfixé d'un identifiant ( voir paramètre "prefix" )
...ou en mode "multi-fichier" :
dans ce cas, La valeur de l'objet contient les noms physique des fichiers sans leur chemin et séparés par des tabulations ( '\t' ) l'enregistrement dans une table d'une telle chaine doit être faite dans un champ de type BLOB, TEXT ou bien manuellement dans plusieurs enregistrements d'une table en faisant une boucle sur chacun des fichiers
il offre en outre la possibilité de faire une prévisualisation des images, de faire des tris.
PARAMETRES OBLIGATOIRES
url : c'est le nom de la page PHP qui gère le chargement (voir syntaxe de cette page ci-dessous)
target : le chemin relatif ou absolu du répertoire qui recevra les fichiers téléchargés c'est le seul paramètre obligatoire.
PARAMETRES OPTIONNELS VISUELS
label : c'est le texte qui apparait dans la colonne des labels (mode affichage automatique) et quand une erreur de saisie est détectée à la validation du formulaire.
default : valeur par défaut, chaine qui contient le ou les noms de fichiers (quand il y en a plusieurs ils sont séparés par le paramètre TAB ('\t')
Cette valeur n'est pas utilisable a moins de vérifier la présence du fichier auquel elle fait référence.help : bulle d'aide
width : largeur du champ texte ou de la liste en pixels
size : nombre de lignes de la liste ( en mode multi-fichiers )
PARAMETRES OPTIONNELS MAIS MODIFIANT LE COMPORTEMENT DU TELECHARGEMENT
attrib : vide ou 'R' pour rendre le choix d'un fichier obligatoire
overwrite : true ou false pour permettre ou non le téléchargement d'un fichier qui existe déjà
preview : true ou false, permet de prévisualiser les fichiers qui viennent d'être téléchargés.
prefix : il peut être intéressant dans un contexte multi-utilisateurs de préfixer les fichiers par l'identifiant de l'utilisateur par exemple. On évite alors des écrasements de fichiers et on cloisonne les téléchargements quitte à les doublonner.
multifiles : true ou false pour permettre le téléchargement d'un fichier ou plusieurs fichiers
multifilesmax : nombre maximum de fichiers autorisés à télécharger. ( -1 = pas de limite )
PARAMETRES DE REDIMENSIONNEMENT D'IMAGES
resize_to : définition de la taille en pixels du bord le plus long de l'image
resize_x_to : définition de la largeur en pixels de l'image
resize_y_to : définition de la hauteur en pixels de l'image
2 cas possibles :
- le fichier image original est redimensionné directement
- le fichier original est chargé sur le site mais n'est pas modifié, une vignette est créée simultanément avec les dimensions spécifiées
resize_prefix : définition du préfixe qui sera ajouté au fichier d'origine pour constituer la vignette.
voir la description complete du mécanisme d'uploadSyntaxe :
$f->frm_ObjetUploader("SelectFichier",
array(
"label" => "Selecteur de fichier",
"help" => "Sélectionner un fichier",
"attrib" => "R",
"width" => "400px",
....
)
);
<?php
// session_start(); si les autres pages utilisent les sessions réctiver cette ligne
include('classeForms.php');$f = New Forms;
$f->frm_uploader( array('target'=>'../../../rubappli/tmp/',
'maxfilesize'=>2048*1024,
'delete'=>false) );
?>
Aucun code HTML n'est requis les paramètres de la fonction frm_uploader() sont :
OBLIGATOIRE :
target : le chemin relatif du répertoire qui recevra les fichiers téléchargés par rapport à la page qui contient cette fonction. C'est le seul paramètre obligatoire. Il n'est pas passé en paramètre GET comme les autres par la fenêtre principal qui contient le formulaire pour raison de sécurité
OPTIONNELS :
extensions : liste des extensions autorisées séparées par le caractère "|" par défaut "GIF|PNG|JPG|JPEG" seuls les images sont autorisées. La syntaxe doit être précise car la chaine est utilisée par des expressions régulières de contrôle.
maxfilesize : taille maximum en octets, 2*1024*1024 <=> 2Mo
opener : nom de la page autorisée à appeler cette page, par défaut seules les pages du même répertoire que la page appelée sont autorisées
title : titre de la fenêtre, par défaut "Sélectionnez un fichier"
space : 'caractère' dans les noms de fichier les espaces sont remplacés par un caractère spécifique. Cette fonction permet d'éviter que les noms de fichiers soient vus sous IE comme "Nom%20de%20fichier". Le caractère le mieux adapté est '_'.
Une chaine vide supprime tous les blancsfilter : true / false filtrage des caractères spéciaux, par défaut cette option est à "true".
"ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊË€èéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ"
qui sont remplacés par les caractères suivants :
"AAAAAAaaaaaaOOOOOOooooooEEEEEeeeeCcIIIIiiiiUUUUuuuuyNn"
NOTA : Les chemins absolus ne sont pas autorisés par les serveurs en "safe mode". C'est le cas des serveurs des fournisseurs d'accès
5.6) CHAMP "SLIDER"
L'utilisation du slider permet une saisie simplifiée et graphique de nombre entier compris dans un intervalle donné
width : c'est la largeur total du bloc graphique en pixels.
size : C'est la largeur du champ texte en nombre de caractères
Syntaxe :
$f->frm_ObjetSlider("Slider01",
array("label" => "Nombre de colonnes ",
"orientation" => "H",
"width" => "80px",
"mini"=> "1",
"maxi"=>"3",
"default" => "2",
"size" => "5",
"help" => "choisir le nombre de colonnes (1,2 ou 3)")
);
$f->frm_ObjetSlider("Slider02", array("label" => "Nombre de lignes ",
"orientation" => "V",
"height" => "120px",
"mini"=> "1",
"maxi"=>"10",
"default" => "8",
"help" => "choisir le nombre de lignes (1 à 10)")
);
5.7) CHAMP "TEXTE ET POPUP "
L'utilisation des champs "Texte et popup" permet de faire appel via une fenêtre POPUP a une liste puis en choisissant une valeur le champ est automatiquement mise à jour. L'avantage est dans l'usage de listes longues qui ne sont formées que quand c'est nécessaire.
Une URL est définie c'est elle qui est appelée quand on presse sur le bouton .
Cette URL est soit une fenêtre en HTML (il faut dans ce cas tout gérer, le retour des valeurs compris ) soit une page PHP qui en 10 lignes gère tout (voir syntaxe de la page appelée)
PARAMETRES GENERAUX
label : c'est le texte qui apparait dans la colonne des labels (mode affichage automatique) et quand une erreur de saisie est détectée à la validation du formulaire.
attrib : tous les attributs des champs texte ( R, U, +, -, I ...)
url : nom de la page appelée sans aucun paramètre GET
"url" => "sample19_popup_called.php",
width : largeur du champ texte
return : définit le mode de retour des valeurs (2 cas)
"id" : le champ est composé de 2 champs, un est caché "la clef" l'autre visible "la valeur". Il permet de gérer la paire "clef / valeur" d'une liste HTML
<option value="clef">la valeur affichée</option>
"value" : le champ est unique, il permet une saisie assistée depuis une liste d'élément mais aussi une saisie libre
default : valeur par défaut = indice du tableau ( "return" => "id" ) ou valeur affichée ( "return" => "value" )
defaultview : valeur par défaut affichée dans le champ visible ( "return" => "id" )
help : bulle d'aide
PARAMETRES DE MISE EN FORME DE LA FENETRE APPELEE
winwidth, winheight : largeur et hauteur de la fenetre en pixels (implicitement la largeur de la page correspond à celle du champ
rows : hauteur de la liste en nombre de lignes, la liste est centrée automatiquement
param : pour permettre un comportement différent de la fenêtre en fonction de la valeur d'un autre champ, ce paramètre prend le nom d'un autre champ.
exemple ci dessous : une liste de villes permet un pré-choix. Quand on appelle la fenêtre, celle ci recoit en paramètre la valeur de la clef de la ville on peut faire une requête en fonction pour filtrer les valeurs qui lui correspondent.
dans l'exemple ci-dessous, PARAM=1
Syntaxe :
$f->frm_ObjetChampPopup("NOMPOPUP",
array( "label" => "POPUP (avec retour id+valeur)",
"attrib" => "U",
"width" => "200px",
"url" => "sample19_popup_called.php",
"return" => "id",
"default" => "10",
"defaultview" => "SIVOM",
"winwidth" => "240",
"winheight" => "240",
"rows" => "10" )
);
$f->frm_ObjetChampPopup("NOMPOPUPMINI", array( "label" => "POPUP (taille automatique)",
"width" => "250px",
"url" => "sample19_popup_called.php",
"return" => "id" )
);
PAGE APPELEE
La page appelée est constituée de code javascript et de php. On peut simplifier son codage par l'emploi de la fonction $f->frm_popup_called
paramètre n°=1 : La fonction sait gérer 2 type de tableau : les tableaux javascript à 2 dimensions et les tableaux PHP.
Dans le cas d'un tableau javascript, on passe en chaine 'le nom de la table' à 2 dimensions qui contient les données.
Ce tableau peut être généré par une fonction PHP qui exécute une requête sur une base de données ( voir la fonction de la classe classeBases :
$base->bdd_tableversarrayjs();
var myData1 = [
["12","Action scolaire"],
["22","Action Sociale"],
...
["24","Urbanisme"]
];Dans le cas d'un tableau php, on passe en paramètre le tableau à 2 dimensions qui contient les données.
Ce tableau peut être généré par une fonction PHP qui exécute une requête sur une base de données ( voir la fonction de la classe classeBases :
$tableservices = $base->bdd_tableversliste()
$tableservice = array( "12" =>,"Action scolaire",
"22" => "Action Sociale",
...
"24" => "Urbanisme");paramètre n°=2 (optionnel) : nom de la fonction javascript qui est appelée quand la valeur sélectionnée est changée. On peut modifier l'état d'objet de la fenêtre appelante par la fonction javascript :
window.opener.document.forms[params['FORMULAIRE']].elements['CHAMP_A_MODIFIER].value = 'xxx';
ou bien
window.opener.document.forms[params['FORMULAIRE']].elements['CHAMP_A_MODIFIER].disabled=true;
paramètre n°=3 (optionnel) : afficher ou non les boutons "OK", "VALIDER", "EFFACER" (true ou false) par défaut ils sont affichés.
"EFFACER" permet d'éffacer completement le champ sinon c'est impossible autrementparamètre n°=4 (optionnel) : Tous les valeurs sont strictement numérique, toutes les autres lignes qui ont une valeur non numérique ne sont pas sélectionnables
PAR DEFAUT TOUTES LES VALEURS DOIVENT ETRE NUMERIQUES
Cette astuce permet de créer dans la liste des séparateurs qui sont inertes (les lignes de séparation et blanche.
<?php
$tablearticles = array();
$tablearticles['A0'] = "------ AGENT ---------------------------------";
if (empty($tableart_agent)) {
$tablearticles['A1'] = " L'agent n'a pas d'article !";
} else {
foreach ( $tableart_agent as $valeur => $libelle) $tablearticles[$valeur] = $libelle;
}
$tablearticles['S0'] = "";
$tablearticles['S1'] = "------ SERVICE ---------------------------------";
if (empty($tableart_service)) {
$tablearticles['S2'] = " Le service de l'agent n'a pas d'article !";
} else {
foreach ( $tableart_service as $valeur => $libelle) $tablearticles[$valeur] = $libelle;
}
$tablearticles['T0'] = "";
$tablearticles['T1'] = "------ TOUS LES ARTICLES ---------------------------------";
foreach ( $tableart_tous as $valeur => $libelle) $tablearticles[$valeur] = $libelle;
?>
Dans l'exemple ci dessous on concatène 3 tableaux et on insère entre chaque des séparateurs inertes dans la valeur est ALPHABETIQUE
Syntaxe d'une page appelée :
CODE AVEC TABLEAU JAVASCRIPT CODE AVEC TABLEAU PHP <HTML>
...
<BODY>
<SCRIPT language="javascript">
var myData1 = [
["12","Action scolaire"],
["22","Action Sociale"],
...
["24","Urbanisme"]
];
function externe() {
alert('appel a une fonction externe !');
}
</SCRIPT><?php
include('classeForms.php');
$f = New Forms;
$f->frm_Init();
$f->frm_popup_called('myData1','externe()');?>
</body>
</html><HTML>
...
<BODY>
<?php$myData = array( "12"=>"Action scolaire",
"22"=>"Action Sociale",
"26"=>"Bâtiments",
"19"=>"Bibliothèque",
...
"10"=>"SIVOM",
"15"=>"Sports",
"24"=>"Urbanisme"
);include('classeForms.php');
$f = New Forms;
$f->frm_Init();
$f->frm_popup_called($myData);
?>
</body>
</html> FONCTION DE LA CLASSE PHP "classeBases" POUR GENERER UN TABLEAU$base->bdd_connecter_base("svpinfo");
$requete = "SELECT * FROM article,Modele ORDER BY art_numinv";
$base->bdd_execsql($requete);
$base->bdd_tableversarrayjs( array("art_id","art_numinv","mod_nom"),"NomTableauJS" );
}$base->bdd_connecter_base("svpinfo");
$requete = "SELECT * FROM article,Modele ORDER BY art_numinv";
$base->bdd_execsql($requete);
$tableservices = $base->bdd_tableversliste( array("art_id","art_numinv","mod_nom") );
}
5.8) CHAMP "ARBRE HIERARCHIQUE "
L'utilisation des champs arbres permet de choisir une valeur dans un arbre
PARAMETRES GENERAUX
label : c'est le texte qui apparait dans la colonne des labels (mode affichage automatique) et quand une erreur de saisie est détectée à la validation du formulaire.
attrib : les 2 attributs qui restent ( R, + ) sont "obligatoire" et "lecture seule"
width : largeur du champ
height : hauteur du champ
default : valeur par défaut = indice du noeud dans le tableau
lines : fait apparaitre les lignes ou non ( true | false )
rootselector : la racine de l'arbre est sélectionnable ( "true" si oui )
iconroot : nom complet (chemin inclus) de l'image de l'icone qui symbolise la racine de l'arbre
icondirclosed, icondiropened : nom de complet de l'image de l'icone qui symbolise un dossier ouvert ou fermé
$tableauTree : est le tableau de tableau de valeurs avec 3 champs :
- L'indice de l'enregistrement
- Le titre du noeud
- l'indice père ( -1 si racine de l'arbre )
Syntaxe :
$tableauTree = array(
array("0","France (0)",-1),
array("1","Paris (1)",0),
array("2","Marseille (2)",0),
array("3","Lyon (3)",0),
array("4","Place de la Concorde (4)",1),
array("5","Montmartre (5)",1),
array("6","Vieux port (6)",2),
array("7","Notre Dame de la Garde (7)",2),
array("8","Place Bellecourt (8)",3),
array("9","La croix rousse (9)",3),
array("10","Invalides (10)",1),
array("11","Sacré Coeur (11)",5),
array("12","La place du tertre (12)",5),
array("13","Trifouilly (13)",0),);
$f->frm_ObjetChampArbre("FEUILLE1",
array( "label" => "Arbre n°=1 (defaut=5)",
"attrib" => "",
"width" => "300px",
"height" => "150px",
"default" => "5",
"lines" => "false",
"title" => "Nom de l'arbre"
),
$tableauTree
);
$f->frm_ObjetChampArbre("FEUILLE2",
array( "label" => "Arbre n°=3 (defaut=4) LECTURE SEULE",
"attrib" => "+",
"width" => "300px",
"height" => "150px",
"default" => "4"
),
$tableauTree
);
Arbre n°=1 : pas de ligne, non obligatoire
Arbre n°=2 : lecture seulement
Arbre n°=3 : personnalisation des icones de l'arbre
5.9) CHAMP "SELECTEUR D'ICONES "
L'utilisation du champ sélecteur de couleur (de fond ou de textet) permet de choisir précisement un couleur et retourne une chaine de 6 caractères au format HEXADECIMAL.
PARAMETRES GENERAUX
label : c'est le texte qui apparait dans la colonne des labels (mode affichage automatique) et quand une erreur de saisie est détectée à la validation du formulaire.
attrib : les 2 attributs qui restent ( R, + ) sont "obligatoire" et "lecture seule"
width : largeur standard du champ [optionnel]
default : valeur par défaut de la couleur de fond ou de texte [optionnel], par défaut le fond est vide (blanc) le texte est noir.
target : choix de la couleur du texte "TEXT" ou du fond 'BACKGROUND"
Syntaxe :
$f->frm_ObjetColorPicker("LE_FOND",
array( "label" => "Couleur du fond",
"help" => "Saisir une couleur pour le fond",
"default" => "3399CC",
"target" => "background")
);
$f->frm_ObjetColorPicker("LE_TEXT",
array( "label" => "Couleur du texte",
"help" => "Saisir une couleur pour le texte",
"default" => "660033",
"target" => "text")
);
5.10) CHAMP "TIMER"
L'utilisation d'un champ timer permet d'alimenter un champ TIMESTAMP de base de données avec l'horloge du client. Pour gérer l'horloge côté serveur on le fera par programmation.
Le format en retour peut être SQL (AAAA/MM/JJ HH:MM:SS) ou français (JJ/MM/AAAA HH:MM:SS)
PARAMETRES GENERAUX
$f->frm_ObjetTimer("MON_TIMER",
array("label" => "Horloge",
"width" => "70px",
"icon" => true / false,
"format" => "french" / "iso"
)
);
5.11) CHAMP "SELECTEUR DE COULEURS " (ColorPicker)
L'utilisation d'un champ timer permet d'alimenter un champ TIMESTAMP de base de données avec l'horloge du client. Pour gérer l'horloge côté serveur on le fera par programmation.
Le format en retour peut être SQL (AAAA/MM/JJ HH:MM:SS) ou français (JJ/MM/AAAA HH:MM:SS)
PARAMETRES GENERAUX
$f->frm_ObjetTimer("MON_TIMER",
array("label" => "Horloge",
"width" => "70px",
"icon" => true / false,
"format" => "french" / "iso"
)
);
5.12) CHAMP "LISTE A TRIER " (SortSelect)
L'utilisation d'un champ SortSelect permet de trier une liste
PARAMETRES GENERAUX
label : c'est le texte qui apparait dans la colonne des labels (mode affichage automatique) et quand une erreur de saisie est détectée à la validation du formulaire.
width : largeur standard du champ [optionnel]
default : chaine qui comprend les indices du tableau trié séparés par une virgule ","
rows : nombre de lignes de la liste
help : Aide en ligne
separators : si la chaine est "true" alors les séparateurs sont autorisés on peut alors insérer ou supprimer un séparateur de lignes
separatorvalue : valeur dans la chaine "ordre" qui sera prise en compte pour signifier le sépérateur ( par défaut = "-" le moins )
separatortext : chaine de caractère qui symbolisera visuellement le séparateur ( par défaut une chaine plusieurs "-" )
Sans l'option "separators"
Avec l'option "separators"
frm_ObjetSortSelect("LISTE_T2"
array(
"label" => "Liste à trier",
"rows" => "10",
"separators" => "true",
"separatorvalue" => "*",
"separatortext" => "___________________________",
"default" => $def2,
"order" => $ordre2,
"help" => "Trier la liste",
"width" => "100px"),
$tableau1
);
avec le hash :
$tableau1 = array( "1" => "1-Paris","2" => "2-Lyon","3" => "3-Marseille","4" => "4-Toulouse","5" => "5-Bordeaux",
"6" => "6-Nantes" );
5.13) CHAMP "LISTE A CHOIX MULTIPLE " (MultiListe)
L'utilisation d'un champ MultiListe permet un choix de plusieurs éléments d'une liste l'objet possède nativement de nombreuses fonctions de controle de validité de la saisie (bloc contigus, nombre maximum de choix...)
PARAMETRES GENERAUX
attrib : 'R' pour obligatoire, une option au minimum doit être choisie.
label : c'est le texte qui apparait dans la colonne des labels (mode affichage automatique) et quand une erreur de saisie est détectée à la validation du formulaire.
width : largeur standard du champ [optionnel]
default : valeur des lignes sélectionnées séparés par une virgule ","
rows : nombre de lignes de la liste, l'option 'auto' ajuste la taille au nombre d'éléments
help : Aide en ligne
mode : mode d'actication des lignes :
'normal' c'est l'option par défaut les sélections ne sont pas cumulées,
'save' les sélections sont cumulables mais peuvent être annulées en réappuyant sur les lignes
'append' les sélections sont cumulables mais ne peuvent peuvent être annulées quand réappuyant sur les icones de la barre d'outils appelée par l'option 'toolbar'
toolbar : Affichage de la barre d'outils "Tout Sélectionner", "Annuler toutes les sélection" et "Retour à la dernière sélection" . Cette option est implicite dans le cas du mode 'append'
modeblock : activation de mode "bloc" qui n'autorise que des blocs de valeurs continus. valeur : true
modeblockrestore : quand cette condition n'est pas remplis on a 2 comportement possible : true, restauration de la dernière sélection valide ou false, la liste est effacée.
modeblockmessage : message qui est affichélimit : C'est le nombre maximum d'élément que l'on peut sélectionner
limitmessage : message qui est affiché quand le nombre est dépassé
script : Pour un réglage encore plus fin il est toujours possible de remplacer le script par défaut par un script spécifique. Cette option n'est pas compatible avec 'toolbar' qui exécute pour chaque icone ses propres scripts ni avec l'option
Le script par défaut est : ( le nom de l'objet javascript est le nom du champ préfixé de 'o' )
if (oNOMCHAMP.MultiSelect_onChange()) { oNOMCHAMP.MultiSelect_SaveChange(); }il suffit d'intercaler le script comme suit :
if (oNOMCHAMP.MultiSelect_onChange()) { alert('Hello'); oNOMCHAMP.MultiSelect_SaveChange(); }Les fonctions suivantes sont disponibles dans les scripts:
oNOMCHAMP.MultiSelect_RestoreOK() : restaure la dernière selection correcte.
oNOMCHAMP.MultiSelect_InitAll(boolean) : selectionne tous les objets ou le annule tousoNOMCHAMP.MultiSelect_Reset() : pour réinitialiser à la valeur d'origine les sélections de la liste
oNOMCHAMP.MultiSelect_Counter() : retourne le nombre d'options selectionnées
5.20) CHAMP CACHE
L'utilisation du champ caché permet de véhiculer une variable et de la retourner en POST
Syntaxe :
frm_ObjetChampCache("NOMDUCHAMP", "VALEUR_PAR_DEFAUT");
5.21) LES ONGLETS
L'utilisation des onglets permet de condenser sur une seule page sans bouger les ascenseurs, un nombre important de champs classés et distribués logiquement. Dans le cas suivant, l'activation de la case à cocher active les champs dépendants de cet objet mais aussi l'onglet du 1er champ de cette liste.
2 fonctions permettent de manipuler les onglets :
frm_OngletDefinir : appelée une seul fois avant la définition du 1er champ
width, height = dimension de l'onglet
space = largeur de tabulation entre le libelle et le champ lui-même
default = "Le nom de l'onglet"frm_OngletNouveau : Appelée au début de chaque onglet, la femeture de l'onglet est déclenchée par l'appel à un nouvel onglet ou la fin du formulaire
frm_OngletDefaut : Appelée apres la définition des onglets pour Modifier l'onglet qui sera affiché au chargement de la page, indifféremment l'indice ou le nom de l'onglet ( le 1er étant = 0)
$f->frm_OngletDefinir("Adresse"); ou
$f->frm_OngletDefinir(1);
Syntaxe :
$f = New Forms;
$f->frm_Init(false,"150px");$f->frm_OngletDefinir( array("width" => "550px", "height" => "200px","default" => "Titulaire" ) );
$f->frm_ObjetChampTexte("CHAMP1", ... // ces 2 champs ne sont pas dans les onglets
$f->frm_ObjetChampTexte("CHAMP2", ...
$f->frm_OngletNouveau('Titulaire');
$f->frm_ObjetChampTexte("NOM", ...
$f->frm_ObjetChampTexte("PRENOM", ...
$f->frm_ObjetChampTexte("DATEABON", ...
$f->frm_ObjetCoche("ADRESSEABON",...$f->frm_OngletNouveau('Adresse');
$f->frm_ObjetChampTexte("NUMRUE", ...
$f->frm_ObjetChampTexte("NOMRUE", ...
$f->frm_ObjetChampTexte("CP", ...
$f->frm_ObjetChampTexte("VILLE", ...
En cas de validation du formulaire sans avoir saisi les champs obligatoires, on obtient une erreur sitant le nom de l'onglet et celui du champ incorrect.
5.22) LES SEPARATEURS DE PARAGRAPHES
L'utilisation des séparateurs de paragraphes permet de condenser comme les onglets sur une seule page sans bouger les ascenseurs, un nombre important de champs classés et distribués logiquement.
2 fonctions permettent de manipuler les séparateurs :
frm_EnteteDefinir : appelée une seul fois avant la définition du 1er champ
2 paramètres :
exclusif = ouverture exclusive des paragraphes (l'ouverture d'un par nouveau ferme automatiquement l'ancien paragraphe)
valeur : true / false
sauvegarder l'état = sauvegarde par cookie de l'état des paragraphes
valeur : true / falsefrm_EnteteNouveau : Appelée au début de chaque paragraphe, sa fermeture est déclenchée par la définition d'un nouveau paragraphe ou la fin du formulaire
2 paramètres :
titre = titre du paragraphe
valeur : chaine de caractères
Pré-déployé = déploiement automatique du paragraphe
valeur : true / falseSyntaxe :
$f = New Forms;
$f->frm_Init(false,"150px");$f->frm_EnteteDefinir($modeexclusif,$sauveretat);
$f->frm_ObjetChampTexte("CHAMP1", ...
$f->frm_ObjetChampTexte("CHAMP2", ...
// ces 2 champs ne sont pas dans le 1er paragraphe$f->frm_EntereNouveau('CHAPITRE N°=1');
$f->frm_ObjetChampTexte("...
$f->frm_ObjetChampTexte("...
$f->frm_ObjetChampTexte("...$f->frm_EntereNouveau('CHAPITRE N°=2');
$f->frm_ObjetChampTexte(...
$f->frm_ObjetChampTexte(...
$f->frm_ObjetChampTexte(...
$f->frm_ObjetChampTexte(...COMPORTEMENT EN CAS D'ERREUR DE SAISIE : Les paragraphes sont automatiquement déployés
5.23) LES SCROLLER DE CHAMPS
L'utilisation d'un nombre important de champ et la nécessité de voir en permanence les boutons peut amener à l'emploi de scroller (fonctions CSS standards)
3 fonctions permettent de manipuler les scrollers :
frm_InitScroller(...) : appelée une seul fois avant la définition du 1er champ
4 paramètres :
la largeur en pixel = obligatoire
la hauteur en pixel = obligatoirela couleur du fond = pour faire ressortir la zone de scroll on peut lui donner une couleur (mettre en blanc par défaut)
le mode automatique ou manuel = en mode automatique tous les champs qui seront définis seront dans la zone de scroll. En mode manuel, il faut ouvrir et fermer la zone de scroll.frm_ScrollerOpen(), frm_ScrollerClose(): Appelée entre chaque définition de champ, pas de paramètre
Syntaxe :
$f = New Forms;
$f->frm_Init(false,"200px");
$f->frm_InitScroller("400","90","#FFE0D2",false);
$f->frm_ObjetChampTexte("Champ1", ...$f->frm_ObjetChampTexte("Champ2", ...
...
$f->frm_ScrollerOpen();
$f->frm_ObjetChampTexte("Champ3", ...
..$f->frm_ScrollerClose();
$f->frm_Ouvrir();
ATTENTION : NE PLACER DANS LA ZONE DE SCROLL QUE DES CHAMPS DE TYPE "TEXTE" CAR SINON LES OBJETS COMPLEXES PEUVENT AVOIR UN COMPORTEMENT IMPREVU (Voir exemple ci-dessous)
2 modes de saisie des informations peuvent co-éxister :
6.1) CONTROLE COTE "CLIENT"
Ce mode de saisie effectué en Javascript est effectué à la volée (cas des attributs "masques" et "N" ) ou à la validation du formulaire ( submit() ) pour l'attribut obligatoire "R" par exemple.
Controle à la validation, quand un ou plusieurs champs ne sont pas remplis correctement, une fenêtre d'alerte apparait à la validation en donnant la liste des champs à modifier :
Quand la fenêtre d'alerte est fermée le curseur est positionné sur le 1er champ en erreur.
Une exception au controle des champs est l'attribut "S" ( submit() ) il est prioritaire sur tout attribut "R", il provoque une sortie du code ( voir chapitre traitant l'attribut "S" )
La fonction frm_InitConfirm() permet si tous les tests précédents sont OK de demander confirmation d'enregistrement :
dans le cas d'un ajout
ou "Enregistrement de la modification ?" dans le cas d'une modification.on peut definir un message sur mesure en appelant la fonction par frm_InitConfirm("Message a afficher en cas de validation")
Par la fonction frm_InitConfirmCancel() on peut comme avec la fonction frm_InitConfirm() demander la confirmation pour rétablir les valeurs par défaut. Cette fonction est très pratique dans le cas des grilles qui ont beaucoup de champs à saisir.
6.2) CONTROLE COTE "SERVEUR"
Ce mode est entièrement à programmer dans la section "aiguillage" de la réentrance (voir schéma)
Les fonctions suivantes permettent de modifier l'état d'un champ (valeur par défaut, activation ou non...) après sa définition mais avant son affichage
Lors de la réentrance du formulaire (A1 ou M1), la valeur des champs peut-être testée ( $_POST['NOM_DU_CHAMP'] ) si la valeur ne correspondant pas a celle attendu, il faut marquer le champ par la fonction :frm_ChampEnErreur()
syntaxe :
frm_ChampEnErreur('NOMCHAMP','MESSAGE D\'ERREUR');
exemple :
//APRES LA DEFINITION DES CHAMPS
if ( $_POST['CHOIX'] != '3' ) {
$f->frm_ChampEnErreur("CHOIX", "<h1>ATTENTION</h1>Confort doit etre cochées");
}
if ( $_POST['VILLE'] != 'NANTES' ) {
$f->frm_ChampEnErreur("VILLE", "La ville doit être NANTES");
}// AVANT L'AFFICHAGE DES CHAMPS
Dans le même principe des autres fonctions du chapitre 7) frm_ChampActif() permet d'activer ou non un champ en fonction de tests et ce quelque soit l'état défini par défaut.
frm_ChampLectureSeule() permet de définir qu'un champ est en lecture seule
Comme la fonction précédente, frm_ChampInitialiserValeur() permet de modifier la valeur par défaut du champ.
syntaxe :
frm_ChampInitialiserValeur("NOM_DU_CHAMP","Valeur du Champ");
Comme la fonction précédente, frm_ChampInitialiserValeur() permet de modifier la valeur par défaut du champ de tous les champs déclaré par rapport aux valeurs d'un tableau hash. Ce tableau sera généré par la fonction bdd_resultats_vers_tableau() de la classe "classeBase".
syntaxe :
frm_ChargerLesChamps( array("NOMCHAMP1" => "Valeur1", ...) );
Pour simplifier le codage d'une page réentrante, un seul appel à la fonction frm_ChampsRecopier() permet de donner comme valeur par défaut à tous les champs la valeur $_POST venant de la page précédante. On les trouvera dans la section de code A1 et M1.
syntaxe :
case "M1" :
// SI AUCUNE ERREUR NE SUBSISTE ALORS ON ENREGISTRE LA MODIFICATION ET ON SORT
if ($cpterreur==0) {
$requete = $base->bdd_creationrequete("agents","agent_id","M" );
$base->bdd_execsql($requete);
header("Location: maj_annuaire.php#".$_POST['AGENT_ID']);
}
// SINON ON REAFFICHE LE FORMULAIRE
$requete = "SELECT * FROM agents WHERE agent_id=" . $_GET['agent_id'];
$base->bdd_execsql($requete);
$titrefenetre = "MISE A JOUR DE : " .
$base->bdd_lire_champ("agent_prenom") ." " .$base->bdd_lire_champ("agent_nom");
$f->frm_ChampsRecopier();
break;
Par défaut le bouton "valider" d'un formulaire est désactivé jusqu'à modification d'un champ dans le 1er appel de la page (A0 ou M0).
Une fois la page réentrante, le bouton "valider" est toujours activé. La fonction : frm_ActiverBtnValider() permet de forcer l'activation du bouton dès le début de la page.
Pour réaliser des calculs entre les champs textes ou toute autre action utiliser l'attribut "script" en placer comme valeur le nom de la fonction javascript executée à chaque sortie ou validation du champ
exemple "addition()"
la page doit alors contenir le code spécifique ce code n'est pas géré par classeforms
<script language="JavaScript" type="text/JavaScript">
<!--function addition() {
KW_calcForm('AJOUT_RESULTAT',100,-1,'#AJOUT_1','+','#AJOUT_2','+','#AJOUT_3');
}function soustraction() {
KW_calcForm('SOUST_RESULTAT',100,-1,'#SOUST_1','-','#SOUST_2');
}//-->
</script>
Par défaut, le moyen le plus simple d'afficher les champs qui ont été déclaré est le mode automatique. Les champs sont insérés dans un tableau à 2 colonnes (la colonne de gauche comprend le label, celle de droite le champ lui même.
Ce mode permet néanmoins de faire varier la positions des champs en largeur :
$f->frm_Init($readonly,'200px');
et de faire des sauts de lignes entre les champs :
$f->frm_SautLignes(2);
Quand le positionnement automatique ne correspond pas à ce que l'on veut il ya toujours la possibilité de placer les champs manuellement. Dans ce cas la génération du tableau qui reçoit les labels dans la colonne de gauche et les champs dans celle de droite ne se fait pas
syntaxe :
$f->frm_Ouvrir(false);
ATTENTION NE PAS OUBLIER DE PLACER MANUELLEMENT LES BOUTONS DE VALIDATION ET D'ANNULATION
<?php $f->frm_AfficheBtnValider(); ?>
<?php $f->frm_AfficheBtnAnnulerQuitter(); ?>LA VUE CI-DESSOUS EST CELLE DE L'EDITEUR EN MODE RENDU
Par défaut les boutons ont les libellés suivants :
Il est possible de modifier le libellé des boutons suivants par l'usage de la fonction :
Implicitement : $f->frm_LibBoutons('Valider','Quitter','Rétablir');
On peut choisir par exemple : $f->frm_LibBoutons('OK','Sortir','Annuler');
Le bouton Valider est inactif jusqu'a ce qu'on rendre dans un champ et quand il y a plus d'un champ dans le formulaire :
Il est possible cependant de pré-activer le bouton VALIDER
Déclaration de la fonction : $f->frm_ActiverBtnValider();
Pour réaliser des sauts de lignes entre les objets utiliser la fonction $f->frm_SautLignes()
Implicitement : $f->frm_SautLignes();
provoque 1 seul saut de ligne avant l'objet suivant
$f->frm_SautLignes(2);
provoque 2 sauts de lignes avant l'objet suivant
Comme décrit dans le schéma, il faut analyser en PHP avant d'envoyer la 1ere balise HTML les codes $_POST pour savoir dans quel état doit se trouver la page.
9.1) APPEL D'UNE FENETRE EN MODE "AJOUT"
par convention l'appel d'une page en ajout se fait sans paramètre GET
( syntaxe d'appel : nom_page.php )Dans ce cas les états que pourra prendre la page seront :
A0 : 1er appel à la page, on met les champs à blanc
A1 : on analyse les champs (récupéré en $_POST)
AQ : la touche "quitter" a été pressée on branche à la page suivant (liste, menu général...) par la fonction
header("Location: AfficherResultats.php");
9.2) APPEL D'UNE FENETRE EN MODE "MODIFICATION"
par convention l'appel d'une page en ajout se fait avec un ou plusieurs paramètres GET
( syntaxe d'appel : nom_page.php?id=100 )Dans ce cas les états que pourra prendre la page seront :
M0 : 1er appel à la page, on récupère le paramère $_GET, on lit l'enregistrement correspondant à la valeur de la clef
M1 : on analyse les champs (récupéré en $_POST)
MQ : la touche "quitter" a été pressée on branche à la page suivant (liste, menu général...) par la fonction
header("Location: AfficherResultats.php");
9.3) APPEL D'UNE FENETRE EN MODE "CONSULTATION"
par convention l'appel d'une page en ajout se fait avec plusieurs paramètres GET
( syntaxe d'appel : nom_page.php?id=100&RO=yes )Dans ce cas les états que pourra prendre la page seront :
L0 : 1er appel à la page, on récupère les paramères $_GET, on lit l'enregistrement correspondant à la valeur de la clef
L1 : n-ieme appel à la page, on récupère les paramères $_GET, on lit peut dans ce cas
LQ : la touche "quitter" (c'est la seule affichée dans ce cas) a été pressée on branche à la page suivant (liste, menu général...) par la fonction
header("Location: AfficherListe.php");Pour utiliser un formulaire en consultation c'est facile :
<?php
$consultation = isset($_GET['RO']);
$f->frm_Init($consultation,'200px');
...?>
$f->frm_LibBoutons("Effacer","Sortir","");Dans le cas ou on choisit le bouton "Effacer", La page sera ré-entrante avec le statut "L1"
$f->frm_LibBoutons("","Sortir","");
La chaine n°=1 doit être une chaine vide
Dans ce cas, La page sera ré-entrante avec le statut "LQ"
9.4) AIGUILLER VERS LE BON CODE A EXECUTER
Dans les 3 cas précédants, il est nécessaire de faire un appel à la fonction frm_Aiguiller() (les objets doivent préalablement être déclarés)
$ret = $f->frm_Aiguiller('NOM_DE_LA_CLEF');
switch ( $ret ) {case "A0" :
$action = "APPEL A LA FENETRE EN AJOUT n°1";
break;case "A1" :
$action = "APPEL A LA FENETRE EN AJOUT n°2 et +";
// controler les variables $_POST
// si pb faire appel à la fonction "frm_ChampsRecopier()", tous les champs sont recopiés
// si pas de pb alors :
// - on sauvegarde des données
// - on branche header("Location: AfficherListe.php");
break;case "AQ" :
header("Location: AfficherListe.php");
break;}
9.5) L'ATTRIBUT "S" POUR "SUBMIT()"
L'attribut "S" permet en cas de changement de valeur d'un champ de forcer la réentrance du formulaire, il suffit d'analyser sa valeur pour définir de nouveaux champs ou modifier des valeurs. On peut l'utiliser principalement avec des boutons radios ou des listes.
Exemple d'application : On souhaite par exemple renseigner une liste avec les 36000 communes de France. Le chargement et l'affichage donnerait des temps de réponse catastrophique. On préférera définir une liste des département avec l'attribut "S" et dans la réentrance charger uniquement les communes de ce département après un filtrage sur le département choisi.
Syntaxe :
$ret = $f->frm_Aiguiller('NOM_DE_LA_CLEF');
switch ( $ret ) {9.6) SAUVEGARDER DES VALEURS DE CHAMPS
Il est parfois nécessaire de mémoriser des paramètrage environnementaux ou des choix par défaut sans que celà soit nécessaire dans une base de données dans ce cas on choisira :
- les variables de session si la durée de vie de l'information est limitée au temps ou l'utilisateur est connecté à l'application
- les cookies pour mémoriser des informations sur plusieurs mois
exemple : on veut proposer par défaut à un utilisateur le choix du format d'étiquette qu'il utilise tout le temps.Syntaxe :
... les champs viennent d'être défini
$ret = $f->frm_Aiguiller('NOM_DE_LA_CLEF');
switch ( $ret ) {case "A0" :
...
$f->frm_ChampInitialiserValeur("ETIQUETTES", $_COOKIE["ETI_ID"] );
break;
case "A1" :
...
setcookie("ETI_ID", $_POST['ETIQUETTES'], time()+86400*9999);
break;}
Explications : la valeur est potionnée
Php nativement offre des fonctions qui associées à l'objet "uploader" permettent de télécharger sur le serveur des fichiers locaux.
TECHNOLOGIE HTML :les objets selecteur de fichiers doivent être associés à un formulaire avec les paramètres suivants :
<form action="" method="post" enctype="multipart/form-data" name="form1" id="form1">
<input type="file" name="file" />
</form>TECHNOLOGIE PHP :
La taille maximum d'un fichier téléchargeable est fixé par plusieurs paramètres :
- Le fichier php.in ,
si safe_mode = On, alors on ne peut modifier la limite système "PHP" dynamiquement il faut modifier les paramètres upload_max_filesize et post_max_size comme suit avec obligatoirement upload_max_filesize <= post_max_size;;;;;;;;;;;;;;;;
; File Uploads ;
;;;;;;;;;;;;;;;;; Whether to allow HTTP file uploads.
file_uploads = On; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
;upload_tmp_dir =; Maximum allowed size for uploaded files.
upload_max_filesize = 200M
....
; Maximum size of POST data that PHP will accept.
post_max_size = 200M
- le champ texte caché MAX_FILE_SIZE qui conditionne la taille maximale pour le formualire
<input name="MAX_FILE_SIZE" type="hidden" value="100000000">
Il peut être interressant quand on génère des sections d'une page à partir de variables de différer les sorties et placer tout le code généré dans une variable:
EXEMPLE :
<?php
$f = New Forms;
$f->frm_initbuffer();
$f->frm_Init($readonly,'200px');
$f->frm_InitConfirm();
$f->frm_Objet...$f->frm_Ouvrir(); // la sortie n'est pas effective
$buffer = $f->frm_flushbuffer();
?>
....
<h4><span class="titre1 style1">TOUS LES OBJETS DISPONIBLES </span>
<?phpprint "<h1>$action</h1>";
print "<hr>";// c'est ici que sortira tout le code lié au formulaire (rien avant)
print $buffer;?>
</h4>
Il peut être interressant de donner une durée de vie à un formulaire, qui branche automatiquement une page si rien n'est saisi pendant un délai fixé.
ATTENTION le timeout n'est pas activé quand la page est réentrante A1,M1,L1 (une erreur de saisie à corriger absolument par exemple)
EXEMPLE :
<?php
$f = New Forms;
$f->frm_Init(false,"400px");
$f->frm_InitTimeOut(10,'index.php#ANNEXES','COOL_REDIRECT_COUNTER');
....
?>
"COOL_REDIRECT_COUNTER" est optionnel, il suffit de positionner le code ci dessous pour rendre visible le compte à rebours
<DIV id=COOL_REDIRECT_COUNTER>X</DIV>
On peut informer par un message que l'enregistrement a bien été ajouté, modifié, effacé ou enregistré.
Le message est configuré par la fonction frm_Message() dans la section ci-dessous mais la sortie effective est réalisée par l'ordre $f->frm_Ouvrir(); situé entre les balises <BODY>...</BODY>
Il est possible de personaliser la sortie avec la fonction frm_IsMessage() qui retourne vrai si un message a été défini.
Les icones disponibles sont appelée par l'attribut 'icon' => 'ICON_SAVE' sans son suffixe .gif ,
on peut aussi définir toute icone en précisant son chemin d'accès relatif ou absolu et son nom et suffixe.
Les autres attributs sont :
'url'=> 'nom_de_page.php', url de branchement quand on clique sur l'icone
'target'=> '_blank', quand on clique sur l'icone on se branche sur le lien de l'Url, ATTENTION cette option annule la temporisation ci dessous
'timeout'=> 5 : La durée en seconde de la temporisation
ICON_BOOK_ADD | ICON_BOOK_DELETE | ICON_BOOK_NEW | ICON_BOOK_PREF | |
ICON_BOX_ADD | ICON_BOX_DELETE | ICON_BOX_NEW | ICON_BOX_PREF | |
ICON_CARD_ADD | ICON_CARD_DELETE | ICON_CARD_NEW | ICON_CARD_PREF | ICON_CARD_OK |
ICON_DATA_ADD | ICON_DATA_DELETE | ICON_DATA_NEW | ICON_DATA_ADD | ICON_DATA_ADD |
ICON_DATA_DISK | ICON_DATABASE_ADD | ICON_DATABASE_DELETE | ICON_SAVE | |
ICON_DISK_OK | ICON_DOC_OK | ICON_DOC_DELETE | ICON_DOC2_DELETE | |
ICON_SCROLL_ADD | ICON_SCROLL_DELETE | ICON_SCROLL_OK | ICON_SCROLL_PREF | |
ICON_CARD2_ADD | ICON_CARD2_DELETE | ICON_CARD2_EDIT | ICON_CARD2_NEW | ICON_CARD2_NEW |
ICON_DATA2_ADD | ICON_DATA2_CLEAN | ICON_DATA2_DELETE | ICON_DATA2_DISK | ICON_DATA2_EXPORT |
ICON_DATA2_IMPORT | ICON_LOCK_ADD | ICON_LOCK_DELETE | ICON_LOCK_OK | |
ICON_GROUP_ADD | ICON_GROUP_DELETE | ICON_GROUP_EDIT | ICON_GROUP_NEW | ICON_GROUP_OK |
ICON_PACK_ADD | ICON_PACK_DELETE | |||
ICON_PC1_ADD | ICON_PC1_DELETE | ICON_PC1_LOCKED | ICON_PC1_UNLOCK | ICON_PC1_OK |
ICON_PICT1_ADD | ICON_PICT1_DELETE | ICON_PICT1_EDIT | ICON_PICT1_NEW | ICON_PICT1_OK |
ICON_USER1_ADD | ICON_USER1_DELETE | ICON_USER1_EDIT | ICON_USER1_NEW | ICON_USER1_OK |
ICON_CRT_ADD | ICON_CRT_DELETE | ICON_CRT_OK | ||
ICON_FILE_ADD | ICON_FILE_DEL | ICON_FILE_DELETE | ICON_FILE_EDIT | ICON_FILE_EXPORT |
ICON_FILE_OK | ||||
ICON_SERVER_ADD | ICON_SERVER_DELETE | ICON_SERVER_NEW | ICON_SERVER_OK | |
ICON_SUCCESS | ICON_DELETE | ICON_DELETE2 | ICON_DELETE3 | ICON_DELETE4 |
ICON_FORWARD | ICON_DELETE3 | ICON_OK2 | ICON_SAVE2 | ICON_ERROR |
ICON_SKETCH_ADD | ICON_SKETCH_DELETE | ICON_SKETCH_FORWARD | ICON_SKETCH_IMPORT | ICON_SKETCH_OK |
ICON_SKETCH_SAVE | ICON_SKETCH_WARN | ICON_SKETCH_WARN2 | ICON_STOP | ICON_PROP |
ICON_EMAIL1 |
ICON_EMAIL2 |
ICON_EMAIL3 |
ICON_EMAIL4 |
ICON_EMAIL5 |
ICON_EMAIL6 |
ICON_EMAIL7 |
ICON_PDF |
ICON_PDF2 |
|
ICON_QUESTION1 |
ICON_QUESTION2 |
|||
ICON_GEAR |
ICON_GEAR_ADD |
ICON_GEAR_WARN |
||
ICON_SHIELD1 |
ICON_SHIELD2 |
ICON_SHIELD3 |
ICON_SHIELD4 |
EXEMPLE :
<?php
$ret = $f->frm_Aiguiller();
switch ( $ret ) {
case "A0" :break;
case "A1" :
if ( "il n'a pas d'erreur" ) {
$f->frm_Message( array( 'text' => "La fiche modifiée a été correctement enregistrée",
'url' => $url_cible,
'icon' => 'ICON_SAVE',
'timeout' => 5 ) );} else {
$f->frm_ChampsRecopier();
$f->frm_ChampEnErreur("CHOIX", "<h1>ATTENTION</h1>Confort doit etre cochées");}
break;default :
header('Location: '.$url_cible);
}
?>...
<HTML>...
<?php
if (!f$->frm_IsMessage()) {
print '<span class="titre1"> TITRE AFFICHE AVANT LE FORMULAIRE</span>';
}
$f->frm_Ouvrir();
if (f$->frm_Reentrant()) {
print '<hr>';
}
?>
La fonction frm_InitFocus() présente un autre intérêt : pouvoir sélectionner le champ.
$f->frm_InitFocus("NOMDUCHAMP",true); // le champ est sélectionné
$f->frm_InitFocus("NOMDUCHAMP",false); // le champ ne sera pas sélectionné
Il etre possible de masquer dynamiquement un champ qui vient d'être défini en fonction d'une valeur par exemple, l'appel à cette fonction doit se faire en la création de l'objet et la fonction $f->frm_Ouvrir();
typiquement en zone "A0" ou "M0" en fonction de ce que l'on veut faire.
La syntaxe est : $f->frm_MasquerObjet("NOM_OU_INDICE_DE_L_OBJET");
A.1) Exemples de codes
sample01_palette.php Utilisation des skins sample02_masquerchamp.php Masquer un champ qui a été défini sample02_nolabel.php Masquer la colonne des labels de champs sample02_protection.php Protection du clic droit sample03_masques.php Utilisation des masques de saisie d'in fichier texte sample04_dates.php Utilisation des formats date et timestamp dans un champ texte sample05_listes.php Différentes listes sample05_listes_cascade.php Listes en cascade, évolution de l'objet frm_Objet2Listes() qui était limité à 2 sample05_listes_cascade2.php Listes en cascade avec option de debuggage sample05_listes_cascade3.php Listes en cascade pilotée par bouton radio sample05_listes_cascade4.php Listes en cascade multi-niveau sample05_listes_cascade5.php Listes en cascade multi-niveau avec retour dans un champ particulier sample05_listes_cascade6.php Listes en cascade multi-niveau avec envoi de parametres a la page qui génère du XML sample05_listes_cascade7.php Listes en cascade avec initialisation de 1ere liste en AJAX sample05_listes_cascade8.php Listes en cascade avec initialisation de 1ere liste en AJAX sample05_listes_editables.php Listes éditables sample05_liste_longue_seule.php Liste longue seule avec filtrage dynamique sample05_listes_longues.php Listes longues avec filtrage dynamique sample05_listes_longues_ajax.php Listes longues avec filtrage dynamique de type AJAX (données en XML) sample05_listes_longues_ajax_param.php Listes longues avec filtrage dynamique de type AJAX (données en XML) et prise en compte d'autres champs pour modifier les filtres sample05_listes_longues_script.php Listes longues avec filtrage dynamique, sasie possible et script sample09_listes_bascule.php Listes en bascule avec ou sans option de tri sample09_listes_bascule_radio.php Listes en bascule avec ou sans option de triavec activation par champ radio sample06_memo_editeur.php Champs mémo et editeur de texte sample06_editeur.php Champs éditeur de texte FCKeditor sample36_memo_editeur_onglet.php idem mais dans un onglet sample33_coche_simple.php Champ checkbox sample07_coche_radio.php Champ radio et coche, activation dynamique de champs sample07_radio.php Champ radio avec activation dynamique de groupes de champs sample07_radio_2.php idem avec champ en intersection sample07_radio_onglets.php Champ radio avec activation dynamique de groupes de champs répartis dans des onglets sample07_radio_onglets2.php Champ radio avec activation dynamique de groupes de champs répartis dans des onglets sample33_coche_graphiques.php Champs checkbox modifiés sample08_onglets.php Utililisation des onglets pour simplifier les formulaires trop denses sample11_submit.php Gestion dynamique de la réentrance sur un champ sample12_champenerreur.php Gestion par programmation des champs en erreur sample13_sliders.php Emploi des Sliders pour choisir graphiquement des nombre entier dans un intervalle donné sample14_boutons.php Modification du libellé des boutons standards sample15_consultation.php Gestion du mode consultation d'un formulaire sample15_readonly.php Gestion du mode lecture seule de certains champ d'un formulaire sample16_attributs.php Attributs de saisie des champs textes (U,I, L, M) sample17_sautlignes.php Affichage de saut de ligne entre les champs
Catalogue de tous les objets à afficher sample19_popup.php Champ Popup appelant une autre page dans une fenêtre popup placée automatiquement sous le champ sample20_separateurs.php Champ Entete de séparation de paragraphe, permet comme avec les onglets de gérer un nombre important de champs sample21_separateurs_onglets idem mais avec des onglets à gérer pour un nombre très important de champs sample22_arbres.php Gestion d'arbres sample23_icones.php Selecteur d'icones (s'appuie sur le mécanisme des champs POPUP) sample24_icones.php Selecteur d'icones dans un onglet sample25_confirm.php Confirmation d'un ajout ou d'une modification par boite de dialogue sample27_scroller.php
sample27_scroller2.php
sample28_scroller_coche_radio.phpAffichage d'une zone de scroll pour que les boutons valider/annuler restent immobiles
2 modes possibles "automatique ou manuel"sample29_timer la gestion du champ heure dynamique sample30_javascript Exécuter un javascript a chaque sortie de champ pour réaliser un calcul par exemple. sample31_colorpicker Sélecteur de couleur de fond ou de texte(utilise les fonctions popups pour charger le sélecteur) sample34_taillepolice.php Taille par défaut de la police de caractère sample35_bufferedoutput.php Bufferisation des sorties sample37_sortselect.php Liste à trier sample38_sortselect_separator.php Liste à trier avec séparateurs à insérer sample39_multiliste_normale.php Liste à choix multiple simple sample41_multiliste_bloc.php Liste à choix multiple avec vérification que la sélection est bien une plage d'éléments contigus sample42_multiliste_script.php Liste à choix multiple avec vérification du nombre d'options sélectionnées sample43_uploader_simple.php Téléchargement de fichiers dans un répertoire particulier, test de l'option "overwrite" sample44_uploader_prefixed.php Idem avec test de l'option "preview" pour les fichiers images sample44_uploader_resizing.php redimensionnement des fichiers images sample45_uploader_multi.php Téléchargement de 1 à n fichiers simultanéments, chaque ajout enrichit une liste sample46_uploader_multifilesmax.php idem avec un nombre maximum de fichier sample47_uploader_filesinorder.php idem avec la possibilité de changer l'ordre des fichiers dans la liste sample49_timeout.php Fenetre de saisie avec timeout sample50_message_ok.php Message de bon enregistrement et timeout sample51_message_simple.php Message de bon enregistrement sample51_message_simple_target.php Message de bon enregistrement avec branchement dans une autre fenêtre sample52_titre_simple.php Affichage d'un titre simplement sample53_titre_ou_message.php Affichage d'un titre ou un message simplement sample60_focus.php Activation d'un champ particulier du formulaire sample61_focus_premier.php Activation du 1er champ du formulaire
A.2) Utilisation des palettes pré-définies