Personnaliser son application¶
Nous allons maintenant personnaliser notre application
Pour se faire, nous allons saisir le jeu de données suivantes
Vous pouvez le faire avec les formulaires, la création des tables stockant les sequences est fait par le framework (methode setId des objets metier) sinon vous pouvez exécuter le script sql suivant
-- insertion de deux emetteurs
INSERT INTO emetteur (emetteur, nom, prenom) VALUES
(1, 'dupont', 'pierre'),
(2, 'durant', 'jacques');
--
-- Structure de la table 'emetteur_seq'
--
CREATE TABLE emetteur_seq (
id int(10) unsigned NOT NULL auto_increment,
PRIMARY KEY (id)
) TYPE=MyISAM ;
--
-- Contenu de la table 'emetteur_seq'
--
INSERT INTO emetteur_seq (id) VALUES (2);
--
-- Contenu de la table 'service'
--
INSERT INTO service (service, libelle) VALUES
(1, 'informatique'),
(2, 'telephonie');
--
-- Structure de la table 'service_seq'
--
CREATE TABLE service_seq (
id int(10) unsigned NOT NULL auto_increment,
PRIMARY KEY (id)
) TYPE=MyISAM ;
--
-- Contenu de la table 'service_seq'
--
INSERT INTO service_seq (id) VALUES (2);
--
-- Contenu de la table 'courrier'
--
INSERT INTO courrier (courrier, dateenvoi, objetcourrier, emetteur, service) VALUES
(1, '2010-12-01', 'Proposition de fourniture de service', 1, 1),
(2, '2010-12-02', 'Envoi de devis pour formation openMairie', 2, 1);
--
-- Structure de la table 'service_seq'
--
CREATE TABLE service_seq (
id int(10) unsigned NOT NULL auto_increment,
PRIMARY KEY (id)
) TYPE=MyISAM ;
--
-- Contenu de la table 'service_seq'
--
INSERT INTO service_seq (id) VALUES (2);
Faire un affichage courrier plus convivial¶
L’affichage des courriers se fait avec les clés secondaires et non les libellés.
Nous souhaitons avoir le nom et le prénom de l’emetteur et le libellé du service.
Dans le fichier sql/mysql/courrier.inc nous allons modifier les variables $table et $champAffiche de la manière suivante (après la ligne include):
$table = DB_PREFIXE."courrier inner join ".DB_PREFIXE."emetteur
on emetteur.emetteur=courrier.emetteur
inner join ".DB_PREFIXE."service
on service.service=courrier.service";
$champAffiche=array('courrier',
'concat(substring(dateenvoi,9,2),\'/\',substring(dateenvoi,6,2),
\'/\',substring(dateenvoi,1,4)) as dateenvoi',
'concat(emetteur.nom,\' \',emetteur.prenom) as emetteur',
'service.libelle as service');
Le résultat est le suivant
Courrier Dateenvoi Emetteur Service
1 01/12/2010 dupont pierre informatique
2 02/12/2010 durant jacques informatique
De la même manière nous souhaitons rechercher dans les courriers sur le nom de l’emetteur et sur le libellé du service. Dans le fichier sql/mysql/courrier.inc, nous allons modifier la variable tableau $champRecherche de la manière suivante
$champRecherche=array("emetteur.nom", "service.libelle");
Vous devez avoir dans la zone recherche la possibilité de selectionner
Tous
emetteur.nom
service.libelle
Nous souhaitons maintenant avoir les derniers courriers au début de la page affichée et nous pouvons le faire en insérant la variable $tri dans courrier.inc de la manière suivante:
$tri= " order by dateenvoi desc";
Le résultat est le suivant
2 02/12/2010 durant jacques informatique
1 01/12/2010 dupont pierre informatique
Pour en savoir plus sur ces variables voir framework/affichage
Rendre obligatoire des champs¶
Nous avons affiché le courrier avec une jointure de type « inner ». Donc s’il n’y a pas de lien sur le service et/ou l’emetteur, l’enregistrement n’apparaitra pas. Il faut rendre obligatoire la saisie de l’emetteur et du service (auquel le courrier est affecté)
Nous allons surcharger la méthode verifier() dans obj/courrier.class.php de la manière suivante (par défaut le premier champ, ici dateenvoi est obligatoire, cet option est modifiable dans le générateur)
La methode à insérer apres le constructeur est la suivante
function verifier($val,&$db,$DEBUG) {
parent::verifier($val,$db,$DEBUG);
$f=" ! ";
$imgv="<img src='../img/punaise.png' style='vertical-align:middle' hspace='2' border='0'>";
if ($this->valF['service']==""){
$this->msg= $this->msg.$imgv._('service')." "._('obligatoire').$f;
$this->correct=False;
}
if ($this->valF['emetteur']==""){
$this->msg= $this->msg.$imgv._('emetteur')." "._('obligatoire').$f;
$this->correct=False;
}
}
La commande « parent::verifier($val,$db,$DEBUG); » permet de ne pas neutraliser la fonction surchargée (ici dans gen/obj/courrier.class.php)
Pour plus d’information voir le châpitre framework/methode
Valoriser un champ par défaut¶
Pour simplifier la saisie, nous souhaitons mettre la date du jour dans le champ dateenvoi n ajout de courrier.
Nous allons surcharger la methode setVal() dans obj/courrier.class.php de la manière suivante
function setVal(&$form, $maj, $validation, &$db, $DEBUG=null){
parent::setVal($form, $maj, $validation, $db, $DEBUG=null);
if ($validation==0) {
if ($maj == 0){
$form->setVal("dateenvoi", date('Y-m-d'));
}
}
}
Le champ dateenvoi contient la date systeme (date(“Y_m-d”)) si la validation est égal à 0 et si $maj est égal à 0 (ajout).
Mettre en majuscule un champ¶
Nous souhaitons maintenant mettre en majuscule le champ « nom » de la table emetteur. Nous allons surcharger la methode setOnchange() dans obj/emetteur.class.php de la manière suivante
function setOnchange(&$form,$maj){
parent::setOnchange($form,$maj);
$form->setOnchange("nom","this.value=this.value.toUpperCase()");
}
A la saisie ou à la modification du nom, le champ se met en majuscule.
Principe à retenir¶
Voila quelques exemples des possibilités de modification dans les fichiers sql (repertoire sql/ ….) et dans les methodes de l’objet (repertoire obj/ …)
En aucun cas, il ne faut modifier les fichiers dans gen/ qui est l’espace de travail du générateur.
Nous allons dans le prochain chapitre modifier la base et regénérer les écrans sans mettre en danger votre personnalisation.