DOCUMENTATION SUR LE GESTIONNAIRE DE FORMULAIRES : ClasseForms.php

AUTEUR : FRANCK OBERLECHNER, Ingénieur Système et Réseaux

Dernière mise à jour : Mai 2008


 

SOMMAIRE

1. Préambule

2. Principe de ré-entrance

3. Installation de la classe

4. Déclaration d'un formulaire

5. Déclaration des objets

6. Controle de saisie des objets

7. Modification de l'état des objets

8. Mise en forme des champs du formulaire

9. Codage de la ré-entrance

10. La gestion des Upload ( Copie d'un fichier local vers le serveur WEB )

11. Les sortie différées

12. La fonction Timeout

13. La fonction Message

14. La fonction Focus

15. Le masquage d'un champ

 

A. TOUS LES EXEMPLES

B. L'historique des modifications de la classe

 


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 :

Fonctions associées à ces objets :

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 Voir un exemple (si installation achevée) ( 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

Voir un exemple (si installation achevée)

$f->frm_Protection();

permet de désactiver le clic droit sur la page (Fonction optionnelle)

Voir un exemple (si installation achevée)

$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

Voir un exemple (si installation achevée)

$f->frm_InitFont("10");

on peut changer la taille de la fonte, par défaut sans appel à cette fonction la taille est = 10

Voir un exemple (si installation achevée)

. 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

voir le chapitre "Affichage des champs en mode manuel"

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:

Voir un exemple (si installation achevée)

 


 

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:

"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 :

Voir un exemple (si installation achevée)


 

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

MATRICE DES PARAMETRES

PARAMETRES ObjetListe ObjetListeLongue Objet2Listes ObjetListeEditable ObjetListesCascade ObjetBascule
label
X
X
X
X
X
X
default
X
X
X
X
X
X
width
X
X
X
X
X
X
help
X
X
X
X
X
X
attrib
X
X
X
X
X
X
rows
X
X
  
 
 
X
orientation    
X
 
X
 
title
X
X
 
 
 
 
titlevalue
X
         
title1, title2
 
 
X
 
 
X
sort          
X
addvalue  
X
       
script  
X
   
X
 

 

Voir un exemple (si installation achevée)

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";

}

Voir un exemple (si installation achevée)

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)

Voir un exemple (si installation achevée)

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.

Voir un exemple (si installation achevée)

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:

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

 

Voir un exemple (si installation achevée)

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 :

  1. normal : le mode par défaut, pour valider l'objet il faut obligatoirement (si attribut "R" ) une value de la liste la plus basse.

  2. 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' => true

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 comme l'id.
Ici encore 2 modes d'appels :

  1. 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.
  2. 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

Voir un exemple (si installation achevée)

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",...)

Voir un exemple (si installation achevée)



5.5) UPLOADER DE FICHIER

L'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'upload

Syntaxe :

$f->frm_ObjetUploader("SelectFichier",

array(
"label" => "Selecteur de fichier",
"help" => "Sélectionner un fichier",
"attrib" => "R",
"width" => "400px",
....
)
);

Syntaxe de la page appelée :

<?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 blancs

filter : 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"

 

 

Voir un exemple (si installation achevée)

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)")
);

Voir un exemple (si installation achevée)


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 autrement

paramè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") );
}

 

Voir un exemple (si installation achevée)


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

 

Voir un exemple (si installation achevée)

 


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")
);



Voir un exemple (si installation achevée)

 


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"
)
);


 

Voir un exemple (si installation achevée)


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"
)
);


 

Voir un exemple (si installation achevée)


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" );

 

Voir un exemple (si installation achevée)

 


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 tous

oNOMCHAMP.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.

Voir un exemple (si installation achevée)


 

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 / false

frm_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 / false

Syntaxe :

$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

Voir un exemple (si installation achevée)


 

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 = obligatoire

la 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();

Voir un exemple (si installation achevée)Voir un exemple (si installation achevée)

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)

Voir un exemple (si installation achevée)les popups sont décallés

 

 


6) CONTROLE DE SAISIE DES OBJETS

    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.

    Voir un exemple (si installation achevée)

    6.2) CONTROLE COTE "SERVEUR"

    Ce mode est entièrement à programmer dans la section "aiguillage" de la réentrance (voir schéma)

     


7) MODIFICATION DE L'ETAT DES OBJETS

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

7.1) Marquer un champ en erreur

    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

    Voir un exemple (si installation achevée)

     

7.2) Activer un champ

    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.

7.3) Définir un champ en lecture seule

    frm_ChampLectureSeule() permet de définir qu'un champ est en lecture seule

 

 

7.4) Initialiser la valeur d'un champ

    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");

     

7.5) Initialiser tous les champs

    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", ...) );

     

7.6) Recopier tous les champs de réentrance

    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") ."&nbsp;" .$base->bdd_lire_champ("agent_nom");
    $f->frm_ChampsRecopier();

    break;

7.7) Activer le bouton Valider dès le début de la saisie

    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.

7.8) Exécuter un code javascript externe à la sortie d'un champ texte (CALCUL par exemple)

    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>

    Voir un exemple (si installation achevée)


8) MISE EN FORME DES CHAMPS DU FORMULAIRE

8.1) AFFICHAGE DES CHAMPS EN MODE AUTOMATIQUE

    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);

     

8.2) AFFICHAGE DES CHAMPS EN MODE MANUEL

    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

8.3) MODIFIER LES LIBELLES DES BOUTONS

    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');

    Voir un exemple (si installation achevée)

8.4) PREACTIVER LE BOUTON VALIDER

    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();

    Voir un exemple (si installation achevée)

     

8.5) SAUT DE LIGNES

    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

    Voir un exemple (si installation achevée)

 


9) CODAGE DE LA RE-ENTRANCE

    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"

    Voir un exemple (si installation achevée)

    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 ) {

    Voir un exemple (si installation achevée)

    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

     


10) LE CODAGE DES UPLOAD (TELECHARGEMENTS)

    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 :

    ;;;;;;;;;;;;;;;;
    ; 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


    <input name="MAX_FILE_SIZE" type="hidden" value="100000000">

    Voir un exemple (si installation achevée)


11) LES SORTIES DIFFEREES

    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>
    <?php

    print "<h1>$action</h1>";
    print "<hr>";

    // c'est ici que sortira tout le code lié au formulaire (rien avant)
    print $buffer;

    ?>
    </h4>

    Voir un exemple (si installation achevée)


12) LA FONCTION "TIMEOUT"

    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>

    Voir un exemple (si installation achevée)


13) LA FONCTION "MESSAGE"

    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

     

    ICONE ICON_BOOK_ADD ICONE ICON_BOOK_DELETE ICONE ICON_BOOK_NEW ICONE ICON_BOOK_PREF  
    ICONE ICON_BOX_ADD ICONE ICON_BOX_DELETE ICONE ICON_BOX_NEW ICONE ICON_BOX_PREF  
    ICONE ICON_CARD_ADD ICONEICON_CARD_DELETE ICONEICON_CARD_NEW ICONEICON_CARD_PREF ICONEICON_CARD_OK
    ICONE ICON_DATA_ADD ICONE ICON_DATA_DELETE ICONE ICON_DATA_NEW ICONE ICON_DATA_ADD ICONE ICON_DATA_ADD
    ICONE ICON_DATA_DISK   ICONE ICON_DATABASE_ADD ICONE ICON_DATABASE_DELETE ICONE ICON_SAVE
    ICONE ICON_DISK_OK   ICONE ICON_DOC_OK ICONE ICON_DOC_DELETE ICONE ICON_DOC2_DELETE
    ICONE ICON_SCROLL_ADD ICONE ICON_SCROLL_DELETE ICONE ICON_SCROLL_OK ICONE ICON_SCROLL_PREF  
    ICONE ICON_CARD2_ADD ICONE ICON_CARD2_DELETE ICONE ICON_CARD2_EDIT ICONE ICON_CARD2_NEW ICONE ICON_CARD2_NEW
    ICONE ICON_DATA2_ADD ICONE ICON_DATA2_CLEAN ICONE ICON_DATA2_DELETE ICONE ICON_DATA2_DISK ICONE ICON_DATA2_EXPORT
    ICONE ICON_DATA2_IMPORT   ICONE ICON_LOCK_ADD ICONE ICON_LOCK_DELETE ICONE ICON_LOCK_OK
    ICONE ICON_GROUP_ADD ICONE ICON_GROUP_DELETE ICONE ICON_GROUP_EDIT ICONE ICON_GROUP_NEW ICONE ICON_GROUP_OK
    ICONE ICON_PACK_ADD ICONE ICON_PACK_DELETE      
    ICONE ICON_PC1_ADD ICONE ICON_PC1_DELETE ICONE ICON_PC1_LOCKED ICONE ICON_PC1_UNLOCK ICONE ICON_PC1_OK
    ICONE ICON_PICT1_ADD ICONE ICON_PICT1_DELETE ICONE ICON_PICT1_EDIT ICONE ICON_PICT1_NEW ICONE ICON_PICT1_OK
    ICONE ICON_USER1_ADD ICONE ICON_USER1_DELETE ICONE ICON_USER1_EDIT ICONE ICON_USER1_NEW ICONE ICON_USER1_OK
    ICONE ICON_CRT_ADD ICONE ICON_CRT_DELETE ICONE ICON_CRT_OK    
    ICONE ICON_FILE_ADD ICONE ICON_FILE_DEL ICONE ICON_FILE_DELETE ICONE ICON_FILE_EDIT ICONE ICON_FILE_EXPORT
    ICONE ICON_FILE_OK        
    ICONE ICON_SERVER_ADD ICONE ICON_SERVER_DELETE ICONE ICON_SERVER_NEW ICONE ICON_SERVER_OK  
    ICONE ICON_SUCCESS ICONE ICON_DELETE ICONE ICON_DELETE2 ICONE ICON_DELETE3 ICONE ICON_DELETE4
    ICONE ICON_FORWARD ICONE ICON_DELETE3 ICONE ICON_OK2 ICONE ICON_SAVE2 ICONE ICON_ERROR
    ICONE ICON_SKETCH_ADD ICONE ICON_SKETCH_DELETE ICONE ICON_SKETCH_FORWARD ICONE ICON_SKETCH_IMPORT ICONE ICON_SKETCH_OK
    ICONE ICON_SKETCH_SAVE ICONE ICON_SKETCH_WARN ICONE ICON_SKETCH_WARN2 ICONE ICON_STOP ICONE
    ICON_PROP
    ICONE
    ICON_EMAIL1
    ICONE
    ICON_EMAIL2
    ICONE
    ICON_EMAIL3
    ICONE
    ICON_EMAIL4
    ICONE
    ICON_EMAIL5
    ICONE
    ICON_EMAIL6
    ICONE
    ICON_EMAIL7

    ICON_PDF

    ICON_PDF2
     
    ICONE
    ICON_QUESTION1
    ICONE
    ICON_QUESTION2
         
    ICONE
    ICON_GEAR
    ICONE
    ICON_GEAR_ADD
    ICONE
    ICON_GEAR_WARN
       
    ICONE
    ICON_SHIELD1
    ICONE
    ICON_SHIELD2
    ICONE
    ICON_SHIELD3
    ICONE
    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>';

    }

    ?>

    Voir un exemple (si installation achevée)

 


14) LA FONCTION "FOCUS"

    Il peut être interressant de "rentrer" directement dans le formulaire en plaçant le curseur directement dans un champ précis ou plus implement le 1er chanp ( surtout pour des saisies enchainées ).
    Pour réaliser cette fonction 2 méthodes :

    1. $f->frm_Init(false,"150px",true);

      place le curseur sur le 1er champ saisissable du formulaire, les champs inactifs ou en lecture seule sont "sautés"

    2. $f->frm_Init(false,"150px");
      // DEFINITION DES CHAMPS
      ...
      $f->frm_InitFocus("NOMDUCHAMP");
      $f->frm_Ouvrir();

      place le curseur sur le champ précisé en paramètre

    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é

    Voir un exemple (si installation achevée)

     


15) LA FONCTION MASQUAGE DE CHAMP

    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");

    Voir un exemple (si installation achevée)


 

A) LES EXEMPLES

     

    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

     

    sample18_TOUSLESOBJETS.php


    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.php
    Affichage 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

     

    Voir un exemple (si installation achevée)

    A.2) Utilisation des palettes pré-définies