IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Création templates RTF par les utilisateurs


Sujet :

Langage PHP

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Points : 356
    Points
    356
    Par défaut Création templates RTF par les utilisateurs
    Bonjour,

    Je développe une application en Php et BDD Mysql qui toune sur une machine locale. Dans cette application, l'utilisateur doit pourvoir générer des rapports et les envoyer. J'ai découverts il y a peu comment pouvoir générer du rtf contenant des variables Php. Je peux donc créer différents templates RTF.

    Mon soucis est que je voudrais pouvoir permettre à l'utilisateur lambda qui n'a pas de notion de programmation de pouvoir créer ses propres templates à partir d'une liste de variables à sa disposition.
    J'envisage donc de mettre en place un moteur qui enregistrerait en automatique un document .doc en rtf. Ce document pourrait ensuite être réutilisé dans l'application. Ceci me paraît encore réalisable.

    Par contre, un problème qui me semble nettement plus complexe est l'insertion par l'utilisateur de variables Php dans le document ainsi la gestion des accords grammaticaux.

    Je m'explique :

    dans mon template, je dois par exemple avoir la phrase "j 'ai vu votre patient" si c'est un homme et "j'ai vu votre patiente" si c 'est une femme. Un autre exemple est que si un test de QI a été effectué, la phrase "J'ai effectué un test de QI dont voici les résultats ..." doit apparaître, tandis que si le test n 'a pas été effectué, cette phrase ne doit pas apparaître ou encore la phrase "Je n'ai pas effectué de test de QI chez ce(tte) patient(e)" doit apparaître.


    Auriez-vous des idées ou suggestions pour la réalisation de cette fonctionnalité? Ou encore mieux, existe-il déjà quelque chose de semblable que je pourrais réutiliser?

    Merci d'avance.

  2. #2
    Expert confirmé
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Points : 4 853
    Points
    4 853
    Par défaut
    Salut,

    dans mon template, je dois par exemple avoir la phrase "j 'ai vu votre patient" si c'est un homme et "j'ai vu votre patiente" si c 'est une femme. Un autre exemple est que si un test de QI a été effectué, la phrase "J'ai effectué un test de QI dont voici les résultats ..." doit apparaître, tandis que si le test n 'a pas été effectué, cette phrase ne doit pas apparaître ou encore la phrase "Je n'ai pas effectué de test de QI chez ce(tte) patient(e)" doit apparaître.
    Pour cette partie les l'utilisation des ifs ne te vont pas ?
    Développeur | Zend Certified Engineer

    Étapes Pour mieux se servir du forum:
    1. Commencez par lire les cours et tutoriels ;
    2. Faites une recherche;
    3. Faites un post si rien trouvé dans les deux étapes précédentes en respectant les règles;

    Nix>_Rien n'est plus pratique que la théorie

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Points : 356
    Points
    356
    Par défaut
    Merci beaucoup pour ton intérêt.

    En fait, si l'utilisateur doit commencer à coder avec des if, il doit alors avoir des notions de programmation (ce qu'il na absolument pas). De plus, certaines conditions pourront être un peu plus complexes avec différents ifs imbriqués et, pour un seul if, différents tests sur des variables (ex : si telle variable n'est pas vide et que telle variable n'est pas vide et que telle variable n'est pas vide alors faire... sinon si faire sinon faire).

  4. #4
    Membre habitué

    Inscrit en
    Février 2004
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 342
    Points : 197
    Points
    197
    Par défaut


    pour avoir déjà implémenté ce type de solution, je me permets qqs comments
    * c'est plutôt une bonne idée comme postulat de départ. Les users se sentent généralement plus à l'aise dans MS Word pour créer un modèle de document.

    * simplement demande à tes users de mettre des <<objet.attribut>> pour appeler les éléments interactifs. Derrière tu pourras facilement retrouver ces champs avec des expressions régulières. Il faut juste bien documenter tous les champs disponibles.

    * pour la gestion du singulier, pluriel, masculin, feminin, abréviation ou nom complet etc, fais des champs qui vont bien et demande à tes utilisateurs de mettre du texte comme
    <<personne.titre>> <<personne.prenom>> <<personne.nom>> a été vu(e) en entretien le <<entretien.dateLongueEnFrancais>>> à <<entretien.ville>>. Il(elle) était très joli(e).... bla bla bla
    => en gros, c'est moins élégant, mais tu gagnes ENORMEMENT en simplicité (complexité = €€€, qqn la paie tjs)

    * à noter, s'ils mettent des images dans les modèles tu es mal. Au moins pour les version 2003 et inférieures, dans un document .rtf Word enregistre les images comme du bitmap, ce qui fait exploser les tailles de fichier (wordpad le fait aussi). Si c'est vraiment indispensable qu'ils puissent mettre des images dans les rtf, alors mieux vaut leur demander d'acheter Atlantis (de l'ordre de 60 EUR / licence de mémoire, je fais pas la pub je précise). Ca leur coutera bcp moins cher que de se former aux if

    * s'il doit y avoir des boucles (genre des tableaux dont le nombre de ligne dépend des données...)... alors là c'est galère. Le moins pénible que j'ai trouvé était de leur imposer un format que je mettais en hardCode qqpart ex
    <<personne.listeDeCourses>>

    * il m'est déjà arrivé qu'un champ interactif qui apparait comme correct soit en realité mal enregistré par l'éditeur rtf (pourtant à l'écran devant l'utilisateur c'est parfaitement correct, screenshot à l'appui).
    Dans ce cas, je leur disais de supprimer le champ intractif completement et le retaper (pas de copier-coller). Pas top, mais on n'a rien trouvé de mieux.
    Cela dit, les users touchent rarement à leurs templates.

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Points : 356
    Points
    356
    Par défaut
    Merci énormément pour ton attention et ton intervention.

    Pour te situer le cadre, l'application que je développe est à destination de neuropsychologues. J'ai une commande pour une neuropsychologue en particulier (avec ses propres cannevas de rapports) mais, vu le temps que j'ai passé et que je dois encore passé sur ce développement, j'ai nettement intérêt à vendre cette application à d'autres neuropsychologues (qui auront certainement leurs canevas propres différents de ceux que je pourrais mettre à disposition de la première). De plus, au cours du temps, différents nouveaux tests pourront être intégrés à l'application, et ces informations devront pouvoir être reprises dans les rapports. Donc, si je ne veux pas à l'avenir devoir passer mon temps à créer de nouveaux templates et/ou à faire évoluer les existants, je pense qu'il vaut mieux que je mette un outils adapté à disposition de l'utilisateur afin qu'il puisse les créer et les modifier lui-même.

    De manière shématique, voici comment j'envisage la création et l'utilisation d'un template par l'utilisateur :

    1. L'utilisateur ouvre un document .doc vierge (avec Word par ex.).

    2. Il crée un canevas type. Dans ce canevas il intègre des variables Php à des endroits laissés à sa convenance. Il doit pouvoir également y intégrer de la gestion grammaticale en fonction de valeur de variables Php (par exemple $objPatient->getSexe() donnera "votre patient doit être revu" si la valeur de retour est 'M' sinon donnera "votre patiente doit être revue"). De même pour le sexe du destinataire, celui de l'utilisateur en lui-même etc... De plus, il doit pouvoir conditionner la production de portions de texte en fonction du contenu de certaines variables.

    3. L'utilisateur enregistre ce document dans un répertoire particulier.

    4. L'application réenregistre ce document .doc en rtf en y appliquant le traitement nécessaire (interprétation de balises introduites par l'utilisateur pour l'étape 2 par exemple).

    5. L'application met ce template à diposition de l'utilisateur lorsque celui-ci veut générer un document qui se complète de manière automatique.

    6. Lorsque l'utilisateur génère un document sur base dudit template, celui-ci se génère automatiquement en fonction des variables et des conditions intégrées par l'utilisateur lors de l'étape 2.

    En fonction de ce que tu viens de me proposer, dans l'étape 2 l'utilisateur devrait utiliser des <<objet.attribut>> pour appeler les éléments interactifs. Qu'entends-tu par éléments interactifs?

    Au niveau de la gestion du masculin-féminin, singulier-pluriel etc.. penses-tu qu'il y ai possibilité d'introduire un mot-clé qui effectuerait un post-ckeck lors de la génération du RTF et appliquerait le traitement nécessaire? Ex : votre patient<?MF?> a été vu<?MF?> le...

  6. #6
    Membre habitué

    Inscrit en
    Février 2004
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 342
    Points : 197
    Points
    197
    Par défaut
    Citation Envoyé par dubitoph Voir le message
    En fonction de ce que tu viens de me proposer, dans l'étape 2 l'utilisateur devrait utiliser des <<objet.attribut>> pour appeler les éléments interactifs. Qu'entends-tu par éléments interactifs?
    par élément interactif, je veux parler des "trucs magiques" que le user pourrait intégrer dans ces templates et qui seront remplis par le server au moment où le user va réclamer un template (modele) rempli par php.

    en pratique, mettre directement du php dans ton rtf
    ex:
    <<$patient->getSexe()>>
    est une syntaxe déjà trop compliquée pour un user lambda. Il vont glisser un espace au mauvais endroit, oublier un ) ou metter deux - au lieu d'un...

    il faut lui simplifier la vie et prévoir une syntaxe facile à gérer pour toi d'une part, et facile à écrire pour tes users d'autre part.

    En gros, c'est exactement la meme chose, mais en plus lisible pour ton user

    ex:
    <<$patient->getSexe()>>
    devient
    <<patient.sexe>>

    derrière, à grands coups d'expressions régulières et de double dollar ($$) tu peux facilement gérer ce genre de truc.


    Un autre élément important est de trouver un éuilibre entre le nombre d'attributs et leur simplicité
    VERSUS
    le nombre de templates à maintenir.

    par exemple
    <<patient.titre>> => Mme.
    <<patient.titreLong>> => Madame (celui-là

    de plus, on s'est rendu compte, que c'était plus facile de faire plusieurs modèles quasiment identiques, avec juste un peu de texte statique qui change
    plutot que multiplier les champs ou complexifier la syntaxe pour minimiser le nombre de template.

    ex:
    "prise de rdv - normale.rtf" => le modèle standard d'un rdv normal
    "prise de rdv - retard.rtf" => le mm modèle que ceci dessus (copié-collé), mais avec un paragraphe ajouté dans le texte où tu demandes au gars de cesser de rater ses rdv, tu peux meme glisser un <<patient.precedentRDVDate>> dans lequel tu indiques la date du rdv raté.

    derrière rien n'empeche de limiter le <select> de choix du modele selon que le type est en retard ou pas.

    Certes ca fait un jeu de modèle un peu plus difficile à maintenir, mais c'est au final plus facile pour tes users (ca reste dans ce qu'ils savent faire). De toute facon, ils changeront leur jeu de modèles rarement.

    Au niveau de la gestion du masculin-féminin, singulier-pluriel etc.. penses-tu qu'il y ai possibilité d'introduire un mot-clé qui effectuerait un post-ckeck lors de la génération du RTF et appliquerait le traitement nécessaire? Ex : votre patient<?MF?> a été vu<?MF?> le...
    pas de traitement post génération. C'est sujet à erreur. En francais c'est pas juste un 's' après certains mots, chercher des 'votre' à mettre en 'vos'...
    non franchement oublie ca.
    je mettrais plutot un

    "Le(s) patient(s) suivant(s) a(ont) été vu(s)
    <<dossier.listerPatients>>
    "
    avec derrière un <<dossier.listerPatients>> qui te crache une liste préformatée en rtf.

    Ok les (s) vont rester dans le texte final certes.
    Mais essaie de calculer le temps que tu vas mettre à intégrer ou coder un correcteur syntaxique de francais qui comprend le rtf. Multiplie par deux, parce que tu vas forcément te tromper comme nous tous qd on aborde un sujet qu'on connait mal
    et tu lui fais un devis avec ca.

    je te garantis qu'en voyant le chiffre il sera tout heureux de vivre avec des (s) dans ses documents finaux.
    Et puis si vraiment ca lui écorche les yeux, il peut toujours demander à sa secretaire de faire F7 dans word pour les supprimer.

  7. #7
    Membre averti
    Homme Profil pro
    Inscrit en
    Mai 2004
    Messages
    803
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 803
    Points : 356
    Points
    356
    Par défaut
    Encore merci pour ton éclairage, Fourchette.

    Le nombre de templates dépendra du user car le but de la manoeuvre est qu'il les crée ET qu'il les maintienne lui-même. Donc ce sera à lui de déterminer la manière dont il vaudra travailler (moins de canevas complexes ou plus de canevas moins complexes). Enfin, c'est la manière dont j'envisage la chose, maintenant...

    Quelques canevas de base seront mis à sa disposition (ceux que j'aurai créés pour le premier client) et tous les éventuels autres seront entièrement gérés par le client.

  8. #8
    Membre habitué

    Inscrit en
    Février 2004
    Messages
    342
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 342
    Points : 197
    Points
    197
    Par défaut
    un tip utile pdt que j'y pense

    si tu mets des tags dans les noms de fichiers

    c'est facile ensuite de faire un filtre qui réduit le nb d'items dans le <select> où le type choisit son modele.

    selon le nb de modèle ca peut leur faire gagner pas mal de temps

    si tu estimes que ta question est résolue mets donc le flag [resolu] ca fait plaisir aux modos

Discussions similaires

  1. [2.x] Création de formulaires par les utilisateurs
    Par zevince dans le forum Symfony
    Réponses: 3
    Dernier message: 17/04/2013, 10h25
  2. [AC-2003] Création d'en-tête par les utilisateurs, est-ce possible ?
    Par Takeo31 dans le forum IHM
    Réponses: 0
    Dernier message: 15/07/2010, 14h56
  3. Réponses: 4
    Dernier message: 18/03/2007, 18h18
  4. Réponses: 13
    Dernier message: 09/07/2006, 15h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo