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

Zend Framework PHP Discussion :

Architecture d'une leçon


Sujet :

Zend Framework PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur
    Avatar de Bakura
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 386
    Par défaut Architecture d'une leçon
    Bonjour à tous,

    Je rencontre un gros problème d'architecture et j'ai besoin de votre aide pour, peut-être, m'aiguiller vers d'autres pistes auxquelles je n'ai pas pensé (sachant que j'ai toujours eu l'habitude de ne pas réussir à me contenter de solutions bancales, et que j'ai beaucoup de mal à vivre avec quelque chose qui ne me convient pas architecturalement parlant ).

    Voici la problématique : j'ai besoin, pour mon site, de leçons qui sont constituées de plusieurs éléments prédéfinis du point de vue HTML. J'ai fait ressortir deux types d'éléments principaux : les exercices, avec lesquels l'utilisateur doit donc pouvoir être capable de vérifier ses réponses et d'avoir un feedback approprié (assimilable à un message d'erreur), et d'autre part des "textes", c'est-à-dire, par exemple, une liste de vocabulaire, un dialogue écrit...

    A l'intérieur de ces deux groupes j'ai défini précisément les différents éléments. Par exemple, dans le groupe "texte", j'ai un élément Dialog :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <div id="element_number" class="dialog">
    		<h2>Dialogue</h2>
    		<p class="instructions">
    			Lisez attentivement le dialogue ci-dessous, écoutez-le plusieurs fois et tentez de repérez les mots importants, sans lire la traduction (onglet suivant).
    		</p>
     
    		<dl>
    			<dt>Personnage 1</dt>
    			<dd>Dialogue 1.</dd>
     
    			<dt>Personnage 2</dt>
    			<dd>Dialogue 2.</dd>
     
    			<dt>Personnage 3</dt>
    			<dd>Dialogue 3.</dd>
    		</dl>
    	</div>
    La plupart des éléments texte sont basés sur le même modèle, seuls la classe, le h2 et les instructions diffèrent.

    Concernant les exercices, j'ai par exemple des vrais/faux, des QCM, des exercices de traduction... Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    <div id="element_number" class="missing_word">
    		<h2>Exercice : mots manquants</h2>
    		<p class="instructions">
    			Complétez chaque phrase avec les mots qui conviennent suivant la traduction donnée (chaque espace vide
    			correspond à exactement un mot).
    		</p>
     
    		<dl>
    			<dt>Comment vas-tu ?</dt>
    			<dd>
    				How
    				<input type="text" size="10" name="element_6_0_0">
    				you ?
    			</dd>
     
    			<dt>Ça va bien, merci.</dt>
    			<dd>
    				<input type="text" size="10" name="element_6_1_0">
    				fine,
    				<input type="text" size="10" name="element_6_1_1">.
    			</dd>			
    		</dl>
     
    		<a href="#">Vérifier</a><br>
    		<a href="#">Afficher la correction</a>
     
    	</div>
    Bref, le markup de la plupart des éléments d'une leçon sont faits et le tout me semble relativement propre... reste maintenant à coder tout ça.

    La première chose à laquelle j'ai pensé pour le stockage tout d'abord, c'est d'avoir mon modèle Lesson qui contient les éléments de la leçon, puis la leçon est sérialisée pour être enregistrée en base (ce qui va sérialiser les éléments de la leçon). Tout d'abord est-ce une bonne solution de passer par la sérialisation ? C'est la solution la plus simple que je vois.


    Mon plus gros soucis et là ou je vous sollicite c'est... comment créer les éléments ? J'ai de nombreuses idées en tête, mais aucune de me convient. Je vous les énumère ci-dessous :

    EDIT : je rajouterais que concrètement à Zend_Form ou un élément correspond à un champ, mon élément de leçon comme je l'appelle est un type d'exercice ou de texte (dialogue, QCM...), chaque élément pouvant contenir un nombre n de couples (question/réponse(s)).

    1. De par la nature des exercices (soumission de valeurs, vérifications, affichage de message d'erreur si faux) j'ai tout de suite pensé à utiliser Zend_Form. En plus je peux ainsi bénéficier de la puissance des décorateurs pour formater le code. Mais quelle est la solution la plus propre... Créer mes propres éléments, un élément correspondant à un type d'exercice (vrai/faux, QCM...) ? Ou alors utiliser les éléments fournis mais passer par des décorateurs personnalisés qui me permettraient de spécifier mes couples questions/réponses... ?

      Quid des autres éléments de type texte de la leçon ? D'après moi tous les éléments d'une leçon devraient partager une classe de base commune, mais faire hériter une leçon de grammaire de Zend_Form me pose problème...

      La solution Zend_Form me pose également problème car pour l'instant, je ne l'ai utilisé qu'avec des formulaires aux champs pré-définis. Ici, chaque formulaire, chaque élément de ce formulaire, doit avoir un nom généré correct (j'ai une hiérarchie de element_num, puis pour chaque élément element_num_num, et ainsi de suite...).
    2. L'autre solution à laquelle j'avais pensé est un peu plus complexe, et en y réfléchissant j'ai eu un peu l'impression de réinventer Zend_Form finalement, mais l'architecture est plus logique je trouve. En gros, j'ai mon modèle Model_Lesson qui comme tout à l'heure contient un ensemble d'éléments de leçon.

      Le modèle offrirait plusieurs fonctions pour créer/retirer des éléments et générer les bons noms. Les éléments dériveraient tous d'une classe de base Model_Lesson_ElementAbstract, puis deux classes Model_Lesson_ExerciseAbstract et Model_Lesson_TextAbstract (ces deux classes héritant de Model_Lesson_ElementAbstract).

      Puis j'aurais plusieurs classes héritant de Model_Lesson_ExerciseAbstract, en l'occurrence une classe pour le type d'exercice, idem pour TextAbstract.

      Puis, pour dessiner la leçon, des view helpers, ou alors des fonctions render dans toutes ces classes pour renvoyer le markup HTML.

      Mais j'ai l'impression de réécrire un peu Zend_Form dans certains côtés...


    EDIT : une dernière solution auquel je viens de penser mais que je trouve toujours très "moyenne" serait d'utiliser des subforms : un formulaire global engloberait tous les éléments de la leçon, et chaque subform un type bien précis (par exemple un subform contenant un dialogue, un autre contenant des vrais/faux...). Dans ce cas là, un élément reviendrait à un élément au sens de Zend_Form. Mais par contre, toujours ce soucis conceptuel de faire hériter d'un formulaire un élément contenant un dialogue ou des notes explicatives...

    Désolé pour la longueur du post, mais depuis deux semaines que je cherche, je ne cesse de tourner autour de ces deux solutions qui ne me satisfassent qu'à moitié, et peut-être qu'il y a d'autres solutions plus simples/logiques.

    Merci de votre aide !

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Juste pour t'embrouiller un peu plus.
    Je ne supporte pas Zend_Form qui pour moi est absolument inutilisable et franchement pas facile à prendre en main.

    Par contre je crée tout mes formulaires avec le helper de vue

    index.phtml:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <?php echo $this->formFile(); ?>
    Par exemple, regarde de ce côte, tu pourrais en plus alors jouer avec les partials et le switchcontext.

    Je te laisse fouiller le net.....j'espère t'avoir aider

    MaitrePylos

  3. #3
    Rédacteur
    Avatar de Bakura
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 386
    Par défaut
    Le switch context, tu parles de l'AjaxContext ? Je m'en sers déjà avec Zend_Form.

    Tu as tort, Zend_Form est relativement simple en fait, même les décorateurs, et c'est vraiment flexible (sauf dès que la mise en forme devient un peu compliquée)...

    j'espère t'avoir aider
    Pas tellement .

    Dans ce cas là, j'aurais des aides de vues par exemple TrueFalse ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <?php echo $this->lessonTrueFalse(mesParamètres); ?>
    <?php echo $this->lessonGrammar(mesParamètres); ?>
    Mais j'ai aucun moyen de sauvegarde là... à part sauvegarder les "mesParamètres". Peut-être du Zend_Config, je sais paaaas... Mais c'est une idée. Par contre utiliser des validateurs dans des aides de vue ? Techniquement et conceptuellement.... ça te convient toi ?

    Les partials, jamais compris ce que c'était et à quoi ça servait. Tu peux m'expliqure en quelques lignes ?

  4. #4
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 506
    Par défaut
    Les partials sont des morceau de vue qu'on insère en fonction d'un contexte, ou même qui est répétitif.

    Par contre tu nous annonces que tu maîtrises les Form et les décorators, tu ne nous fournirais pas un petit tuto

  5. #5
    Rédacteur
    Avatar de Bakura
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 386
    Par défaut
    Je maîtrise je maîtrise, c'est un bien grand mot . Tu ne trouves pas la documentation suffisamment claire ? Sinon pourquoi pas pour un article, après j'ai cru comprendre que Zend_Form allait être pas mal remodelé avec ZF 2.0...

    Je vais voir du côté des partials. Si d'autres personnes ont des idées pour ma question sinon...

  6. #6
    Rédacteur
    Avatar de Bakura
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 386
    Par défaut
    Un petit up sur ce sujet qui continue à me pourrir là vie puisque depuis un mois que j'ai écrit ce topic, je n'ai toujours aucune solution valable et qui me plaise... Avec le temps et beaucoup d'énèrvement, je n'arrive plus à voir d'autres solutions et je m'enferme dans mes premières idées qui ne sont visiblement pas bonnes.

    J'ai donc vraiment besoin d'une aide extérieure d'une personne calée niveau architecture . Ca devient vraiment frustrant d'être complètement bloqué à cause de ça...

Discussions similaires

  1. Réponses: 50
    Dernier message: 12/04/2007, 11h04
  2. Architecture d'une application Web
    Par le Daoud dans le forum Développement Web en Java
    Réponses: 7
    Dernier message: 05/10/2006, 11h39
  3. Réponses: 2
    Dernier message: 07/03/2006, 11h52
  4. [Réseau]Architecture d'une appli distribuée
    Par gmonta dans le forum Général Java
    Réponses: 8
    Dernier message: 29/04/2005, 13h24
  5. [FLASH MX2004] Architecture d'une classe
    Par matN59 dans le forum Flash
    Réponses: 6
    Dernier message: 13/05/2004, 08h11

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