Post on 18-Feb-2018
phpsolmag.org/fr1
Projets
HORS SÉRIE
Le Plan d’action :• Nous allons tout d’abord télécharger le logiciel
PHPMaker,puisunfichierdémo.• Cecinouspermettrad’appréhendertouteslespos-
sibilitésdel’outil.• Ensuite, nous ferons un mini-cahier des charges
pour l’applicationCRM,enspécifiant leMVC(Mo-del-Vue-Controleur):
– Model : la structure de BD du CRM (tables,champs)
– Vue:lesécransquenoussouhaitonsgénérer– Controleur : PHPMaker génère le code ! Rien
àspécifier,hormisducodepersonnaliséàinjec-terdansl’outil,oudesmodificationsducodegénéré.
Qu’est-ce qu’un générateur de code ?Les générateurs de code permettent, à partir d’unestructuredebasededonnées,decréerlesécransclas-siquesdemanipulationdedonnées:
• listing(d’objetsenbasededonnées),moteurdere-cherche,
• pagededétail,• formulaires d’ajout/modification et page de sup-
pression.
Cesontdesactionsclassiquesdetype“CRUD”(Create-Read-Update-Delete).
Quand les utiliser ?Lesgénérateurssontparticulièrementutiles:
Créer un CRM avec un générateur de codeDans cet article, nous allons montrer qu’il est possible de créer un CRM complet avec un générateur de code.Nous utiliserons ici „PHPMaker”, l’un des plus simples et efficaces du marché. Il vous permettra de générer des écrans CRUD (listings/moteurs de recherches, formulaires ajout/modification/suppression) sans taper une ligne de code. De plus les écrans générés sont designables, multilingues, et sécurisés.
Cet article explique :• CommentcréerunCRM(logicieldegestiondelarelationclient,
ou gestion commerciale) avec un générateur de code PHP.• CommentutiliseraumieuxlegénérateurdecodePHPMaker.• Lagestiondeprojetspécifiqueàcegenred’outils.
Ce qu’il faut savoir :• Aucune connaissance PHP, d’hébergement et administration
de serveurs n’est nécessaire.
Figure 1. Présentation de l’interface
CRM
phpsolmag.org/fr 2HORS SÉRIE
Voicil’écranprincipaldePHPMaker(voirFigure2).L’outilayantpourbutdegénérerdeslistingsetformu-
lairesd’ajout/modification/suppressionàpartirdetablesetchamps,l’interfacepermetdespécifierpourchaquetable/champlesparamètresd’affichageetlelienentrelechampaffichéenHTMLetlechampenbasededon-nées.IlgénèredonclespagesCRUD:listings/recherche,
formulairesd’ajout/modification/suppression.Ilpermetégalementde:
• générerdestableauxavecpagination,avecexportExcel/CSV/PDF/XML...
• créerdes“vues”(commedesvuesSQL,avecjoin-tures).
• créerdesécrans“Master/Detail”:parexemple,af-fichagede lafichedétailléed’unclient,etendes-sous, affichage du listing des contacts chez ceclient.
Enfin,ilgèreletriosécurité/multilinguisme/design!
• sécurité : gestion des utilisateurs, groupes utilisa-teurs,permissionsouACL(AccessControlList).
• multilinguisme : traduction des listings et formu-laires,messagesJavascriptdevalidationdeformu-laire,desélémentsdenavigation,etc.
• design : gestion de thèmes graphiques (“tem-plates”),gestiondemenudenavigation,gestiondeCSS.
Cecivouspermetdecréeruneapplicationprofession-nelle,etfournircetriosécurité/multilinguisme/designenstandard,sanstaperunelignedecode!
PHPMaker génère des pages HTML/PHP, sur desbasesdedonnéesMySQL,PostgreSQL,Access,SQLServeur,Oracle.Lecodegénérén’étantpascrypté,onpeutlemodifier
après génération et y apporter tous les améliorationssouhaitées:élémentsdedesign, insertiond’élémentsAjaxJQuery,de“widgets”avecdel’informationvenantde services SaaS (Google/Zoho, autre...). Les pagesgénérées sont en PHP (d’où le nom “Phpmaker”), ilsuffit ensuite de les copier dans le répertoire ouFTPdel’applicationweb(aprèsavoiréventuellementmodi-fiélefichierdeconfigurationcontenantlescodeslogin/passwordd’accèsàlabasededonnées).
Web:http://www.hkvstore.com/phpmaker/.Démo:http://download.hkvstore.com/phpdemo9/carslist.php (login/passwordadmin/master).
• pour générer des interfaces d’administration avecleslistingsetformulairesclassiquesd’ajout/modifi-cation/suppression(gestiondeparamètres,gestiond’utilisateurs,backofficedegestiondestock–pro-duits/catégories/fournisseurs...)
• pour créer des applications avec principalementdeslistingsetdesformulaires(telunCRM,unlogi-cielcomptable,unegestiond’association...).
Ilsnesontpasadaptésàlacréationdelogicielsnéces-sitantducodeetunaffichageparticuliers(webmail,ca-lendrier, explorateur de fichiers, cartographieGoogle,portaildewidgetdebusinessintelligence...).
Quelquesexemplesdelogiciels:
• PHPMaker (200$), PHPRunner (400$), AppGini(60$),PHPGenerator forMySQL(gratuit,de l’édi-teurSQL“SQLMaestro”).
Autreslogiciels(pluspuissants,maispluscomplexes),donnantdespossibilitéspluspousséesen termesdeconnectivitéauxBD,delanguagedecodegénéré(ASP,JSP...)etdepersonnalisationdesécransgénérés:
• CodeCharge (200 à 500$, application windows,génère du code ASP/PHP/JSP, sur de multiplesbases de données, et intègre un designer visuelpourchaqueécran,cequenefaitpasPHPMaker–personnalisationuniquementparscriptingPHP/JS).
• ScriptCase (325$, application WEB, fonctionnantdans le navigateur, multi-utilisateur. Génère ducode PHP, pour des bases MySQL/PostgreSQL/SQLite/SQLServeur/Oracle).
Présentation rapide de PHMaker
Figure 2. Ecran principal
phpsolmag.org/fr3
Projets
HORS SÉRIE
Jevousconseilledejeteruncoupd’œilauxdifférentesversionsdulogiciel(etauxpages“Nouveautés”,“Chan-geLog”),quivouspermettrontd’appréhenderplusfaci-lementtoutessesfonctionnalités.
QUICK START. Projet DémoAvantdecréernotrepropreapplicationCRM,nousal-lonstéléchargerunfichierexempleetgénérerlecodecorrespondant.Toutd’abord,téléchargeonsPHPMakerà cette adresse : http://www.hkvstore.com/phpmaker/download.asp.Unefoisinstallé,vouspouveztélécharg-er un fichier exemple déjà configuré, téléchargeablegratuitementsur lesitede l’éditeur.URL :http://www.hkvstore.com/phpmaker/demo.asp,lien“DownloadtheDemo Project” ou directement : http://www.hkvstore.com/phpmaker/php9demo.zip.Ceprojetexempleestunegestiondebasededon-
nées de voitures, avec gestion desmodèles, fournis-seurs...L’utilisateurnonconnectépeut consulter les listings
devoitures.L’utilisateurconnecté(login/password:ad-min/master, lien “login”) accède à une interface d’ad-ministration permettant toutes les opérations CRUD(créer/modifier/supprimer)surlesvoitures,maiségale-mentdegérerlescomptesutilisateuretlesdroitsd’ac-cès(permissions/”ACL”AccessControlList).
• Lefichiercontient:lefichierprojet“PHPMaker”,etle.SQLpermettantdecréerlabasededonnées.
• CréerunebasededonnéeslocaleMySQL“demo”et importez-y le fichier .sql avec PHPMyadmin outoutautreéditeur.
• Ouvrirlefichierdemo9.pmpavecPHPMaker(menu“Project”>“Open”).
Si vous avez importé le fichier .SQL dans uneautre base que “demo” avec le login/passwordroot/<vide>,faites“Tools>Synchronize”.
• Puis allez directement dans l’onglet “Generate”, etsaisissez dans “Application root folder” le réper-toiredegénérationducodePHP,quidoitêtredansvotreserveurweblocal:
C:\xampp\htdocs\phpmaker_demo”parexemple(sivousutilisezXampp).
• Si vous avez déjà un serveur web installé, telApache,cochez“Testingwebserver:Other”.
• Unefenêtreapparaît,cochez“SelectAll”enhautàgauche pour générer tous les fichiers (nécessairelapremièrefois).
Lagénérationdevosfichiersselance.
Votre application devrait désormais être accessible àcetteurl:http://localhost/phpmaker_demo/carslist.php.
JevousconseilledecliquerunpeupartoutdansPHP-Maker,afindevisualisertouslesparamétrages,etcom-parer avec lespagesgénérées : ceci vouspermettradecomprendre l’impactdechaqueparamétragedansPHPMaker.
Projet CRMNous allons désormais nous attaquer à notre projetCRM.Lechallenge:créerunCRMsanstaperunelignedecode,en1heuremaximum.UnCRMconsistantglobalementendeslistings:
• declients/contacts,• propositionscommerciales/bonsdecommande,• emails/appels téléphoniques/rendez-vous client ef-
fectués,aveclesformulairesCRUD(Create-Read-Update-Delete)d’ajout/modification/suppressiondedonnées(clients/contacts,...emails/appelstel/rdv),ungénérateurdecodeestparticulièrementadaptéàcegenredeprojet.
Gestion de ProjetBonnespratiques:
Uneapplication réaliséeavecungénérateur de codenécessitelamêmegestiondeprojetquetoutdévelop-pementspécifique:
• expression du besoin : interviews utilisateurs fi-naux, et leurs managers – ayant souvent besoind’outilsdesupervisionetdetableauxdebordspé-cifiques,
• benchmarkfonctionnel/techniquedesolutionsdéjàexistantessurlemarché:achetons-nousunesolu-tion,ouladéveloppons-nouseninterne?
• reformulation du besoin, et comparaison vis-à-visdesoutilsexistants vousdevezvraimentvousmettre en tête que votreCRM interne est destiné àêtrelancésurlemarché.
Vousdevezlecréercommes’ils’agissaitd’unnou-veauproduitquevousvendriez.
• détermination des 80% de besoins génériques,et des 20% spécifiques (pour lesquels du codagespécifiquepeutêtrenécessaire).
Chaquesociétéadesbesoinsspécifiques,maisquandon“gratte”,onserendcompteque laplupartdesbe-soins sont récurrents, et communsàénormément degens.PensezàlaloidePareto,larègledes80/20:les80%
debesoinsgénériquesserontrapidesàdévelopper,etles20%spécifiquestrèsdifficiles.
Etenfin,:• sécurisé, multilingue (d’abord anglais - même s’il
estdestinéuniquementàdes français -puis fran-
CRM
phpsolmag.org/fr 4HORS SÉRIE
çais:français=langueétrangère/secondaire).• documentation complète utilisateur/administrateur/
développeur.• installeur/désinstalleur (création build .exe/.rpm/.
deb).
planificationduprojet,etdécoupageenv0,v1,v2,v3:• v0 : prototype réalisé leplus rapidementpossible.
Faire des “sprint”, à la scrum : livrer très rapide-ment une nouvelle version testable par les futursutilisateurs (avec un générateur, tous les jours aumaximum!).
• v1 : réalisation des 80% de fonctionnalités géné-riques demandées (ou réalisables sans problème,sans montée en compétence nécessaire sur unenouvelletechnologie).
• v2:réalisationdes“trios”:– sécurité/multilinguisme/expérience utilisateur
(design/ergonomie/performances),– versionning/tests/documentation (utilisateur/ad-
ministrateur/développeur).– v3 : réalisation des 20% de code spécifique
(pouvantprendre80%dutemps...).
Qu’est-ce qu’un CRM ?CRM=“CustomerRelationshipManager”.
Gestiondelarelationclient:
• gestion de l’activité commerciale : devis/proposi-tions commerciales, bons de commande (généra-tionde facturesgéréedans l’outildecompatibilité,nerelèveplusducommercial).
• historiquedela“relation”client,partouslescanauxdecommunicationhabituelsemail/tel/rdv.
Emails envoyés/reçus, appels sortants/entrants, ren-dez-vouschezleclientoudansleslocaux.
Lanavigations’effectuegénéralementcommesuit:Listeclients• unclicsurclientaffiche:
– lafichededétailduclient(coordonnées),– les propositions commerciales/bons de com-
mandesémis/renvoyéssignésparleclient,– etlalistedescontactschezceclient.
Enfin, unclic suruncontactaffiche lapagededétaildececontactetlalistedesappels/emails/rendez-vouspourcecontact.
Nous pouvons également souhaiter certains listingsparticuliers:• nouveauxclients,• topclients–entermesdeCA,clientstaggés“VIP”
–...
• lesclientsqu’onm’aaffectés,• maTODOlist:listedesappelsàpasser,desemails
àenvoyer,lesprochainsréunions...
Etenfin,afficherdes tableauxdebord,notamment le“pipe” des ventes, affiché habituellement sous formed’entonnoirinversé:
• PHPMakernepourrapasgénérercegenredegra-phique, mais il propose l’outil PHP Report Maker(http://www.hkvstore.com/phpreportmaker/).
• Et vous pouvez utiliser des bibliothèques de re-portingde typeFusionCharts,quiproposententreautres ce fameux entonnoir des ventes inversé :http://www.fusioncharts.com/.
Base de donnéesVoiciicilastructuredebasededonnées:
• clients: table“customer”:id,name(varchar255),type(int),
address_street/address_postal_code/address_city/address_country(varchar255).
• propositionscommerciales: table “opportunities” : id, id_customer (int), name
(varchar255),amount(float).• contacts: table “contacts” : id, id_customer (int), firstname/
lastname(varchar255),email/phone(varchar255).• rendez-vous: table “meetings” : id, id_contact (int), subject (var-
char 255), date_begin/date_end (datetime), dura-tion(int).
• appels: table “calls” : id, id_contact (int), subject (varchar
255), date_begin/date_end (datetime), duration(int),direction(varchar255).
• emails: table“emails”:id,id_contact(int),subject(varchar
255),date(datetime),email_from/email_to(varchar255),content(text),direction(varchar255).
Ajoutezpourchaquetable,àlafin,les4champsdes-cription/comments (text) et date_creation/date_last_update(datetime).Vous pouvez copier/coller la requête suivante sur
chaquetable,enchangeantuniquement lenomde latable:
ALTER TABLE `calls` ADD
`date_creation` DATETIME NULL ,
ADD `date_last_update` DATETIME NULL ,
ADD `description` INT NULL ,
ADD `comments` TEXT NULL
phpsolmag.org/fr5
Projets
HORS SÉRIE
Vouspouvezégalementrajouter2champsmetadata_categories/metadata_tags (text) pour catégoriser/tag-gertouslesobjetsstockésdansvotrebasededonnées.Chaque objet nous entourant peut être catégorisé/
taggé:
• typedesociété=SSII,éditeurdelogiciel,entreprisefinale...
• typedecontact=prospect,fournisseur,candidat,...• typederendez-vous=1errdv,qualificationbesoin,...• typed’appelouemail=entrantousortant...• typed’opportunité=pourunclientexistant,unnou-
veauclient.
RÈGLESDEPARAMETRAGEDESCHAMPS/TABLES:TousleschampssontenNULLautorisé,l’idenautoin-crément,lesvarcharentaille255,lesdatesauformatdatetime.Pourunpremier jet/prototype,nousn’effec-tuonsaucuneoptimisation(celapeutsechangeraprèssansproblème),l’objectifestdecréerlabasededon-nées le plus rapidement possible, afin de générer unprototypefonctionnel.Je préfixe les champs de manière à les regrouper
ensemble : address_street/address_postal_code/ad-dress_city/address_countryet jemets leschamps id_xxxautoutdébutdelatable,justeaprèsl’ID:ceciper-metdevoir immédiatement les liaisonsavecd’autresobjets/tables.Quelques bonnes pratiques pour la création de
champs:
• id (et non id_customer, etc...) : toujours id danschaquetable(ouid_NomDeLaTable),ensuitedanslesjointuresSQL.
• name/title (nomduclient, intituléde lapropositioncommerciale,sujetdel’email...).
• description(chaqueobjetquinousentouredanslaviedetouslesjourspossèdeunedescription...).
• comments (toujours donner la possibilité de com-menter n’importe quel objet en base de données.Celapeutégalementêtreutilepoursaisirdesdon-nées pour lesquelles ilmanque un champ de for-mulaire–c’est-à-direqu’ilfautfaireévoluerlabasededonnées,etregénérerleprojetPHPMaker).
• date_creation• date_last_update: il est important de savoir qui a fait quoi, et quand
surladonnée.
Ladonnéenevautriensionnesaitpasd’oùellevient,etcequ’ellevautàuninstantT:latracabilitéesttrèsimportante.Vouspouvezutiliser laméthodeQQOQC-CP:QuiafaitQuoi,Où,Quand,Comment,Combien,Pourquoi?Uneapplicationbienconçuedoitpouvoirré-pondreàcesquestions.
Sivotretablen’apasbesoind’êtreoptimisée,vouspou-vez:
• pourleschampstexte: utiliser varchar(255) – pour les titres/intitulés – et
“text” si vous pensez que votre contenu peut dé-passerles255caractères.
• NULLautorisépourchaquechamp: C’estauniveauapplicatifenPHPetJavascriptque
vousinterdirezdesentréesvides,pasauniveaudelabasededonnées!
PHPMaker gère les champs obligatoires très bien(coche“Validation>Required”etcase“ErrorMessage”pourdéfinirvotremessaged’erreurJavascript,enmul-tilingue!).
• desnomsdechampenanglais: Arrêtezdepenserfranco/français,etcréezd’abord
votreapplicationpourl’international,etensuitepourlaFrance.(Français=languesecondaire!).
Leséditeursdelogicielsfonctionnantbien(typeTa-lend) se lancent d’abord à l’international, puis re-viennent en France, qui est unmarché beaucouppluspetit.
Première génération rapidePourgénéreruneapplication,seuls2écranssontréel-lementnécessaires:• onglet “Database” pour définir les informations de
connection.• onglet“Generate”pourgénérerlesfichiersPHP/Ja-
vascript/autres!
Spécifiez ici les informations de connection dans leschamps Server, UserName, Password, Database : leserveurlocal,lelogin/passworddel’utilisateurdebasededonnées,etenfinlenomdelabasededonnées.Usuellement:localhost,root,“”(motdepassevide),
etbase“crm”danslecadredeceprojet.
Figure 3. Connection à la base de données
CRM
phpsolmag.org/fr 6HORS SÉRIE
Ilfautavoirpréalablementcréél’utilisateurdeBDetlabasededonnées(dansPHPMyadminparexemple,souvent livré avec les “stacks” “tout-prêts” de typeXamppouWamp).AprèsavoircliquésurConnect,vousvisualisez les tablessur votregauche (voirFigure3).Allezensuitedirectementsurl’ongletGenerate(voirFi-gure4).
Danscetonglet “Generate”,vousgénérez l’applica-tionensaisissantdans“Applicationrootfolder”leréper-toirededestination,oùseragénéré lecodePHP.Cerépertoire doit être dans votre serveurweb local, parexemple:“C:\xampp\htdocs\crm”,sivousavezinstalléXampp(racineduserveurweb:“c:\xamp\htdocs”). Si vous avez déjà un serveur web démarré (ex.
Apache),décochez“IISExpress”.Vouspouvezcocher“BrowseafterGeneration”sivoussouhaitezlancerl’ap-plicationdansvotrenavigateuràchaquenouvellegé-nération/regénération.Ouvouspouvezallermanuellementdansvotrenavi-
gateurettapezl’urlcorrespondante,ici“http://localhost/crm/”.
Génération en cours : fichiers communs/includes/as-sets(js/css/images),puis5fichierspartable:xxx_info.php,xxx_list.php,xxx_add.php,xxx_edit.php,xxx_de-lete.phpoùxxxestlenomdelatable.
Findelagénération(voirFigure9)!
Figure 4. Liste des tables après connection
Figure 5. Onglet Générer
Figure 6. Paramètres de génération
Figure 7. Sélection des pages PHP à générer
Figure 8. Génération en cours
phpsolmag.org/fr7
Projets
HORS SÉRIE
Vousretrouvezbienici6pages,affichantles6listingsde clients, contacts, proposition commerciale, appelstéléphoniques, emails, et rendez-vous. PHPMaker adoncgénérépourchaque“objet”(client,contact...)nonseulementunlistingpaginé(20lignesparpage),maiségalementunmoteurderecherche,et lesformulairesdecréation/modification/suppression.
Àcestade,nouspouvonsstockernosdonnées,mais:• les donnéesne sont pas reliéesentreelles (com-
mentdirequelescontactsn°3et4sontreliésauclient1?),
• et l’interface ne permet pas de naviguer dans ladonnée : je liste les clients, je cliquesurunclientpourafficherlesdétailsdececlient(coordonnées,chiffred’affairestotal,...)etlalistedespropositionscommercialespourceclient.
Demême,ilfautimplémenterleschémadenavigation“Master-Detail”suivant:
Liste clients => détail client + liste contacts chez ceclient=>détailContact+ listeappels/emails/rdvpourcecontact.
Ensuite,nousallonsaméliorerletrio“sécurité/multilin-guisme/expérience utilisateur (design/ergonomie/per-formances):
• traductiondel’applicationenfrançais.• améliorerl’expérienceutilisateur:“UX”/designet
ergonomie : amélioration kit graphique, menu denavigation,champHTMLpoursaisirdescommen-taires,menus.
• sécurité : gestion utilisateurs, log de tous les ac-cès à l’application, historisation des modificationsdesdonnées(quiamodifiéquoi,quandetpourquoi–idéalement).
Et enfin, faciliter et améliorer la recherche et l’accès àl’information:• miseenplaced’unmoteurderechercheavancé,• exportsexcel/csv,• quelquesvuesdetype“top10clients”,“10derniers
clients”,“répartitionCAparsecteurd’activité”.
Deuxième générationNousallonsdésormaisparamétrerendétailsPHPMa-kerafindefaireunesecondegénérationcorrespondantplusànossouhaits,précédemmentlistés.NousallonsdoncparcourirdemanièreméthodiquetouslesécransdeparamétragePHPMaker,commesuit:
• leplusimportant:paramétragesdestablesetvues(“Custom Views” et “Reports”), puis des champspourchaquetable.
• le “+” (“trio” sécurité/multilinguisme/design), danslesongletsPHP/HTML/Securityetlemenu“Tools”.
Voicilalistedestables(cliquersur«Tables»danslemenugauche,voirFigure12).Nousspécifionsici,pourchaquetable,sinousgéné-
ronsunepagedelisting,unformulaired’ajout/modifica-tion/suppression…
Figure 9. Fin de la génération !
Figure 10. Interface web générée
Figure 11. Ormulaire d’ajout
Figure 12. Paramétrages des tables : liens ajout/modifier/supprimer
CRM
phpsolmag.org/fr 8HORS SÉRIE
Encliquant sur sur le nomd’une tabledans lemenugauche,nouslistonsleschampsdecettetable,etpou-vonsdonc,champparchamp,définir:
• danslasection«ViewTag»:sonaffichagedansles listings (miseen forme/couleur/police, lienhrefsurlechamp…).
• dans la section«Edit Tag» : sonaffichagedansles formulaires d’ajout/modification (input/selectmenu/radiobouton…).
Ilestconseillédeparamétrerdansl’ordre:
• lestables,puisleschamps,• letriomultilinguisme/design/sécurité.
Revenonsdoncauparamétragedeslistings.Vouspou-vezdéfiniricilesoptionsdelisting:• lapagination (nombred’enregistrementsàafficher
parpage),affichagedelapaginationenhautouenbas(oules2)
• l’affichage ou non, ou à gauche/droite, des liens“détail/copier/modifier/supprimer” pour chaque en-registrement.
• la fonctionnalité d’export, et les formats d’exportproposés(CSV,Excel,PDF,XML...).
Ensuite,pourchaquetable,vouspouvezdéfinirsivoussouhaitezgénérerunlisting,unformulaired’ajout/modi-fication,unmode«grille»(éditionàlaExcel)…
Pourchaquetable,vousindiquezicilesfonctionnalitésproposéesauxutilisateurs:
• “inline add/edit”, “grid add/edit” : possibilité d’ajou-ter/éditerenmodeligne(commedansExcel)dansleslistings,aulieud’êtreredirigéversunformulaire(vertical)d’ajout/modificationdedonnées,
• “view”:générationpagededétail.
S’ilyaunepageaumoinsàgénérer,c’estcelle-ci!,pourlemode “lecture seule” aux personnes non-autoriséesàmodifierlesdonnées.Eneffet,leslistingsnepeuventpas toutafficher,entreautres leschamps “text”conte-nantpotentiellementénormémentdedonnées, lapagededétailvientdoncencomplémentdulistingpouraffi-cherlesdonnéesnonaffichéesdansleslistings.Onsim-plifieradoncleslistings–pasdescrollinghorizontal–enn’affichant que le strict nécessaire – c’est-à-dire qu’onmasqueraparexempledans les listings l’userIDayantcréél’enregistrement,ladatedecréationmaisonafficheladatedemodification,lechamp“commentaire”etc.).
• “add/copy”:affichagedesliens“ajouter/copier”dansleslistings(etgénérationdespagesadéquates),
• delete/edit : génération des pages supprimer/édi-ter,etaffichagedesliensadéquatsdansleslistings (à droite ou à gauche, selon ce que vous avezconfiguré dans PHPMaker - onglet “PHP > List/ViewPageOptions”),
• captcha:affichaged’un“captcha”,• quick/advanced/highlight : recherche rapide (sur
tousleschamps,àlaGoogle),avancée(recherche
Figure 13. Paramétrages des champs : type de champ de formulaire d’ajout/modifications, affichage dans listing
Figure 14. Options de listing (pagination, liens d’actions, exports CSV...)
Figure 15. Paramétrage des tables (inline edit/add...)
Figure 16. Paramétrage des tables (view, add, delete, update)
Figure 17. Paramétrage des tables (multi-update, search, audit trail)
phpsolmag.org/fr9
Projets
HORS SÉRIE
multicritères), surlignage des résultats de la re-cherche,
• audittrail:historisationdetouteslesmodificationseffectuées sur cette table (ajout/modification/sup-pressionpartielleoucomplèted’enregistrements).
• Email notificationonAdd/Edit/Delete : à cocher sivoussouhaitezêtreavertiparmailàchaquecréa-tion/modification/suppressionsurcertainestables.
Astuce:vouspouvezégalementcréerunfluxRSSsurlatable“AuditTrail”vialelogicielXMLMakerdumêmeéditeur,etenregistrercefluxRSSdansOutlook/Thun-derBirdoutoutautrelecteuremail.Àutiliseravecpar-cimonie.
Pourchaquechampaffichésur lespagesde listings,pagesdedétailetformulairesd’ajout/modification,vousdevrezindiquer:
• son lienavec labasededonnées(quelchampdeBDafficheroumettreàjour),
• samiseenforme.
Lamiseenformevouspermetdemodifier:gras/italique,fontes,couleurs,liensbrefsurcelien...Parexemple,PHP-Makeraffichesurleslistingsunliendétail.php?id=[id]surlesIDredirigeantsurlapagededétail.Vouspouvezdéci-derderajoutercemêmeliendedétailsurletitre:sélec-tionnezalors“id”danslechamp“Hreffield”etajoutezlepréfixe“détail.php?id=”danslechamp“Hyperlink>prefix”.
Lienaveclabasededonnées:PHPMakergère tous les typesdechampdebasededonnées,ettouslestypesd’affichage:
• varchar:affichaged’unchamptexte(input)oumotdepasse.
• text:affichaged’untextarea,oud’unéditeurHTMLenrichi(extensionCKEditor).
• date:affichagechamptexte+popupdesélectiondedate(extensionJSCalendar).
Vous pouvez également afficher des cases à cocher(checkbox),boutonsradiooumenusdéroulants (pou-
vantêtre“cascadés”:lasélectiond’unmenurafraîchitlemenuen dessous, utile par exemple pour saisir lacatégorie/sous-catégoried’unproduitparexemple).Et enfin, les champs “hidden” (variable cachée) et
“fichier”(pouruploaderdesfichiers).Vousdevezavoirprécédemmentparamétrélerépertoireoùserontstoc-késvosfichiersuploadés:onglet“PHP>GeneralOp-tions>FileUpload”2012-07-19_185619-ongletPHP-GeneralOptions-FileUpload.png.Pourchaquechampoupresque,vouspouvezdéfinir:
• latailleduchamp(texte),hauteur/largeur(textarea),lenombremaximaldecaractèrestapés.
• lecaractèreobligatoireduchamp(nedoitpasêtrevide,affichagealorsd’unmessaged’erreurJavas-cript:paramétrable,etenmultilingue!).
• “useLookuptable”...
Enfin,vouspouvezrelierceschampsàdestables,parexemple, afficher le nom d’un client lors de la saisied’unnouveaucontact.Ceci est indispensable pour relier un contact à un
client (c’est-à-dire stocker l’ID du client dans la tabledescontacts),etégalementpourafficherdansles lis-tingsdescontacts lenomduclient (PHPMakern’affi-cheradoncpas l’IDduclientpour lecontact,mais lenom).Ceci est également utile pour afficher une liste de
checkbox/radioboutonsouunmenudéroulant dont lalistedesentréesestdéfiniedansunetabledeparamé-trage.Ainsi,vouspouvezmodifierentempsréellecontenu
desmenusdéroulants/checkbox/radioboutons,etd’au-tantplusfacilementquevousaurezprissoindegénérerunlistingphpmakerpourcettetabledeparamétrage.Pour effectuer ceci, cochez “use Lookup table”, et
indiquez ensuite dans “table name”, “link field”, “dis-playfield”lenomdelatable/lenommysqlduchamp.Parexemple,pourafficherlalistedesclientsdansunmenu déroulant, on sélectionnera la table “account”,linkfield=”id”,displayfield=”name”.Etontrieencrois-santsur lenomduclientavecorderby=”name”,Asc/Desc=”Asc”.Personnellement,jestockelescontenusdetousles
champs (menus déroulants/checkbox/radioboutons),pour toutes les tables,dansuneunique table “setup_fields” (id, table_name, field_name, field_value, field_label),etensuitedansle“Uselookuptable”,jefiltresurlenomdelatable,pourn’afficherquelesoptionsdecemenudéroulant:
“`table_name`”=’nom_de_ma_table’ AND `field_name`”=
’nom_de_mon_champ’”.
Figure 18. Options de paramétrage d’un champ
CRM
phpsolmag.org/fr 10HORS SÉRIE
LeMasterDetailpermetdecréerunlienentre2objetsdebasesdedonnées.Danslecasd’unCRM:
• pourunclientdonné,nousavonsenvoyéplusieurspropositionscommerciales.
• pour un client donné, nous avons plusieurscontactschezlui.
• pouruncontactdonné,nousstockons la listedesemailsenvoyésetreçus,lesappelsentrantsetsor-tants, les rendez-vouschezceclientoudansnoslocaux.
Nousavonsdoncune liaisonde type1-nentreclientet proposition commerciale, entre client et contact, etentrecontactetemails/appels/rendez-vous.PHPMaker par défaut nous affichera 6 listings : la
listedesclients,lalistedespropositionscommercialespourtouslesclients,lalistedescontactspourtouslesclients, la liste des emails/appels/rendez-vous pourtouslescontactsEtnoussouhaitonsnaviguerdelasorte:listeclients>
jecliquesurunclient,cequiafficheledétailduclientetlalistedespropositionscommercialesetcontactspourceclient.Jecliquesuruncontact,etcelaaffiche ledétaildu
contact et la liste des emails/appels tel/rendez-vouspourcecontact.Onappellececile“Master-Detail”:Master=détailde
laficheclient,Detail=listedescontactspourceclient.Pour activer cette navigation, cliquez sur “Tables”
danslemenugauche(necliquezpassurlenomd’unetable),etcliquezensuitesurlebouton“Modify”enbasàdroite,danslasection“Master/Detail”.
Lescustomscriptsserventàpersonnaliserlesactionsgéréesparlecodegénéré:
• actionsCRUD(Create-Read-Uodate-Delete),c’est-à-dire créer/modifier/supprimer + les listings etpagesdedétail.
Lecodequevoussaisisseziciserainclusdanslecodegénéré.Cesystèmevousévitedoncdedevoirmodi-fierlecodeunefoisgénéré.Eneffet,sivousfaitesunemodificationdans le logiciel et devez regénérer, vousperdezlesmodificationsfaitesdanslecodegénéréetdevezlesressaisiroucopier/coller.Unbongénérateurdecodevouspermetd’incluredu
codepersonnalisé*avant*lagénération.Gestiondutrio«Sécurité/Multilinguisme/Expérience
Utilisateur » (design/ergonomie/Performances). Multi-linguisme.Pouractiver lemultilinguisme,vousdevezeffectuer
les3opérationssuivantes:
• dans lemenu “Tools>Languages”, cochez les lan-guesquevousdésirezutiliserdansvotreapplication.
Si la langue désirée n’apparaît pas, vous pouvez té-lécharger le fichier XML correspondant (par exemple“french.xml”)surleforumdel’éditeur.Enregistrezensuite lesfichiersXMLdans ledossier
“languages”del’application,parexemple:“C:\ProgramFiles\PHPMaker9\languages”,puisfermezetrelancezlelogiciel.Silefichierdelanguen’existepas,vouspouvezcréer
levotre,envousbasantsurunfichierXMLexistant.
Une fois les languescochées,vouspouvezactiver lemultilinguismedansl’onglet“PHP>GeneralOptions”:• cocher “Multi-language” pour activer le support
multilingue,• etindiquezlalanguepardéfautdanslemenu“De-
faultLanguage”.
Figure 19. Master/détail
Figure 20. Custom Scripts
Figure 21. Multilinguisme : options générales
Figure 22. Multilinguisme : options générales (suite)
phpsolmag.org/fr11
Projets
HORS SÉRIE
• enfin, vous devez saisir les traductions pourchaque entrée de menu, libellé de table, champ,etautreséléments(footer/headerdespages,mes-sages d’erreur Javascript pour la validation deschamps...).
Pour cela, allez dans “Tools >UnicodeProperty Edi-tor”quicentralise toutes les traductions.Vouspouvezégalementcliquerdanslechamp“Caption”(libellé)destablesetchamps,cequifaitapparaîtreunepetiteicone,laquelleaffichelafenêtredetraductionpourcechamp.
N’oubliezpastouslespetitsparamètresliésàlalangue:PHP>GeneralOptions:
• locale:SetLocale:“fr_FR”,• formatd’affichagedeladate:DefaultDateFormat:
“dd/mm/yyyy”
HTML>General:
• Charset:“iso-8859-1(WesternEuropean(ISO))”.
PHPMakerafficherasurchaquepagegénéréeunmenudelangue,enhautàdroite,vouspermettantdechan-gerdelangueàtoutmoment.
Figure 23. Multilinguisme : traduction des labels de champs
Figure 24. Multilinguisme : traduction des menus, messages d’erreurs Javascript...
DesignToutsetrouvedansl’onglet“HTML”(hormislagestiondumenudenavigation).
“HTML>General”:Vous pouvez ici définir entre autres le titre de votreapplication, leheader(logo...)et lefooter(textecopy-right...).
“HTML>Themes”:vouspouvezchoisiricid’utiliserunthèmegraphiqueprédéfiniou“template”,avecdescssprédéfiniespourlestextes,lefonddepages,lesfondsdeslignesdetableaux...Définissezenfinleheader(lo-goparexemple)etlefooter(copyrightparex.).
“HTML>Styles”:Vouspouvezégalement créer vospropresCSSavecl’éditeurintégré.
Figure 25. Design : titre, header/footer, police...
Figure 26. Design : template graphique
CRM
phpsolmag.org/fr 12HORS SÉRIE
ErgonomieVouspouvez“enrichir”etsimplifierl’expérienceutilisa-teurenactivantdesextensionscomplémentaires,parexemple:
• le “CKEditor” (éditeur HTML enrichi, mieux qu’unsimplechamp“textarea”).
• etle“JSCalendar”(affichantune“popup”decalen-drier pour sélectionner le trio jour/mois/année) aulieudeletaper.
Lesextensionssontactivablesvialemenu“Tools>Ex-tensions”.
Menu de navigationPHPMaker affiche un menu gauche sur toutes lespages générées ; une entrée demenuest créée pardéfautpourchaquetableouvue.Vouspouvezdécidericid’afficherounoml’entréedemenu,encréerdenou-vellesversd’autrespagesnongénéréesviaPHPMa-ker,oudesentréesdemenunepointantnullepart,etservantjusteàregrouperdesliens.Silemenunevousconvientpas,vouspouveznepaslegénérer,etinsérerdanslespagesPHPMakerunme-nu“hand-made”,crééparvous-mêmeviaunautreoutil
Figure 27. Design : éditeur de styles CSS
Figure 28. RIA : extensions DHTML (éditeur HTML, popup de date) Figure 29. RIA : menu de navigation
phpsolmag.org/fr13
Projets
HORS SÉRIE
(parexempleSothinkDHTMLMenu,oudesmenusDanslecadredenotreprojetCRM,lemenugénérépardéfautparPHPMakerpourraitêtrelesuivant:
• Clients• Contacts• Propositionscommerciales• AppelsTéléphoniques• Mails• Rendez-vous
Nouspouvonsajouterdesentréesdemenus,etrajou-terdes“vues”(commedesvuesSQL),afind’arriveràcemenu:
• Mes... Clients Propales• Clients Clientsactifs Prospects
Anciensclients• Nouveauxclients ClientsVIP• “Pipe”desventes Propositionscommercialesenvoyées(80) Propositionscommercialesacceptées(10) Bonsdecommandesenvoyés(8) Bonsdecommandesvalidés(5)• Administration GestiondelasécuritéUtilisateursHistoriquedesmodifications
VouspouvezcréerdesvuesSQLdansPHPMaker:cf«CustomViews»danslemenugauche. “MesClients”et“MesPropales”seraientdesvues: lalistedesclientsoupropositionscommerciales,fil-tréesparl’IDdel’utilisateurconnecté.“Clientsactifs”,“Prospects”,“anciensclients”seraient
égalementdesvues:lalistedeclients,filtrésparleur“status”:actif,inactif,...
Figure 30. Sécurité : protection par mot de passe
Figure 31. Sécurité : gestion d’utilisateurs et groupes
Figure 32. Sécurité : gestion d’utilisateurs et groupes (suite)
CRM
phpsolmag.org/fr 14HORS SÉRIE
“Nouveauxclients”et“ClientsVIP”: listedesclientstriéspardatedécroissante(etfiltrésparexemple:dateentrée aujourd’hui et aujourd’hui moins 1mois), listedesclientstriésparchiffred’affairedécroissant.Pourle“Pipe”desventes,celadépenddevotreCRM.
SécuritéVouspouvezindiquersivoussouhaitezprotégervotreapplication simplement par un couple identifiant/motdepasseuniquesaisiici“endur”(hardcodé),communpourtouslesutilisateurs.Vouspouvezégalementacti-verunegestiondesaccèsviaunebased’utilisateurs,desgroupesutilisateurs,etdes“ACL”(AccessControlList).Ces“ACL”permettentdemanièretrèsfinedespéci-
fierquialedroitdefairetelleopération(consulter/lister,créer/modifier/supprimer,copier/exporter...).Untelpeutseulementconsulterladonnée,unautrepeutmodifieruniquementcertainschamps,etunautrepeuttoutfaire(lesuperadministrateurparexemple).
Sécurité – utilisateurs et groupesVous pouvez utiliser une table d’utilisateurs externe(maisdanslamêmebaseutiliséeparPHPMakerdansl’application) ; dans ce cas, indiquez ici le nomde latable stockant vos utilisateurs, et les champs corres-pondantsauloginetaumotdepassequedevrautiliserPHPMaker.PHPMakerpeutcréerunetabled’utilisateurssivous
n’enavezpasencore.Demême,ilpeutcréerdestablespour gérer les groupes et les permissions (consulter/lister, créer/modifier/supprimer, copier/exporter...) pargroupeutilisateurouutilisateurnommé.PHPMakervousproposeégalementdenombreuses
autresoptions:motdepassestockéenmd5,xxxten-tativesdeconnectionaumaximum,affichaged’uncapt-cha, envoi d’un lien d’activation de compte utilisateuraprèscréationducompte,page“motdepasseperdu”...Options accessibles via “Security” > bouton “Ad-
vanced”>fenêtre“AdvancedSecurity”>section“UserLoginOptions”.
Sécurité – audit trailL’ “audit trail” est le fait d’historiser tous les accès(connections/déconnections) à votre application, ainsiquetouteslesopérationseffectuéessurlesdonnées:ajout/modification/suppressiond’entréescomplètesoudechamps.PHPMakerpeut créerpour vous la tablehistorisant
touteslesmodificationseffectuéessurladonnée–quiamodifiéquoi,quand–(nomdelatable,nomduchamp,anciennevaleur,nouvellevaleur,userIDayanteffectuélamodification,datedemodification).
Email SettingsSaisissez ici lesparamètresdevotreserveurdemaillocal.PHPMakerpeutenvoyerdesmailsdansdenom-breusessituations:
• lors de l’enregistrement d’un nouvel utilisateur, oupourlafonctionnalité“motdepasseperdu”,
• la fonctionnalité “AuditTrail”peutvousenvoyerunemail à chaque création/modification/suppressiond’enregistrements,
• vouspouvezenvoyerdesfichesdedétaild’enregis-trement.
Trucs et astucesVouspouvezégalementvouloirsupprimerlesliens“dé-tail/modifier/supprimer”surchaqueligne,afind’allégerl’affichage.Soitvouslesmasquezpardéfautetlesaffi-chezaupassagedelasouris(leplusélégant),soitvousgénérezlespagessanscesliens,soitvousgénérezlespagesavecetmasquezcesliensdanslecodegénéré(oulacolonneaffichantcesliens).Lapremièreméthodeimpliquedemodifierlecodegé-
néréenmettentcesliensdansunDIV/SPANavecunevisibilitémasquéepardéfaut,etderajouterunévéne-mentonmouseoversurleslignes.Doncdesmanipula-tionsdecode.La seconde méthode (générer sans ces liens) né-
cessiteuneastuce:sivousdécochez“Edit”,alorslespagesd’éditionneserontpasgénérées.Ilfautd’abordfaireunegénérationavecdétail/édition/supprimer,puisdécocheretrégénéreruniquementlapagedelisting,etrajouterunlien“detail.php?id=[id]”surl’IDetletitre,parexemple.Lapagedetail.phpn’ayantpasétérégénérée,elleaffichera les liensvers lespagesdemodification/suppression.Retrouvez les fichiersPHPMaker, .sql, fichiersPHP
générés à cette adresse : http://pierrenoel-sirh.com/phpmag/crm_phpmaker.
PIERRE Noël Coach Open Source, j’aide les entreprises à profiter des technologies Open Source afin de créer ou améliorer leur Système d’Information, leurs produits et services.
Figure 33. Sécurité : Audit Trail (historisation des modifications des données)