Impossible à comprendre comment faire un composant

Réduire
X
 
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • [Problème] Impossible à comprendre comment faire un composant

    Bonjour,

    Je me présente je suis thomas32, je suis sous joomla 1.7 et mon but à terme est de créer un composant joomla qui permettra de faire de la réservation de bateaux.

    Enfin de me faciliter le travail, on m'a donné un composant plus simple a réaliser la premiere semaine. EN effet je dois créer un composant qui consisterai à un formulaire coté admin et texte rentré serait affiché coté page d'accueil.

    Je sais qu'il y a des tutos partout. Je les ai tous lu...

    N'empeche est que je ne comprends toujours pas. Plusieurs intérrogations, je bloque sur le modéle MVC et les JController, Jview, Jmodel ,...

    De plus je n'arrive pas à comprendre le raisonnement des composants ...

    Si quelqu'un pourrait m'expliquer en détail les principes du composant...ainsi que les étapes pour en créer un .


    Merci beaucoup

    PS : d'autres questions ce soir quand je rentre ..

    thomas32.

  • #2
    Re : Impossible à comprendre comment faire un composant

    Bonjour,

    Et bienvenue sur le forum.

    Le modèle MVC de Joomla! n'est qu'une des mises en oeuvre de la logique MVC classique: http://fr.wikipedia.org/wiki/Mod%C3%...ontr%C3%B4leur

    Les classes JController, JModel et JView sont les classes de base de l'implémentation Joomla! de cette logique.

    N'hésites pas à poser des questions plus précises
    Pas de demande de support par MP.
    S'il n'y a pas de solution, c'est qu'il n'y a pas de problème (Devise Shadok)

    Commentaire


    • #3
      Re : Impossible à comprendre comment faire un composant

      D'accord donc j'ai des soucis avec tous les MVC vue que j'en ai jamais fait

      J'ai reussi a faire un affichage de hello world avec un composant.
      Mais apres va falloir taper sur une BDD et là je n'ai aucune idée comment faire.. Disons que je sais comment faire mais je ne sais pas le faire en MVC

      Merci de ta rep rapide

      Commentaire


      • #4
        Re : Impossible à comprendre comment faire un composant

        Envoyé par thomas32 Voir le message
        D'accord donc j'ai des soucis avec tous les MVC vue que j'en ai jamais fait
        MVC est une logique applicative. On découple l'objet métier (le composant en terminologie Joomla!) en 3 couches:
        1. le Model (modèle): description des tables de la base de données, et leur manipulation.
        2. les Views (vues) la partie affichage, qui ne se préocuppe pas du reste mais présente les données traitées par le Model et le(s) controllers
        3. le(s) controllers (contrôleurs) qui contiennent la logique métier et réalisent le traitement logique des opérations, et selon les besoins appellent tel ou tel Model et envoient les résultats à telle ou telle vue. Le controller est le centre de contrôle des diverses options du composant. C'ets lui qui contient la logique opératoire.

        Envoyé par thomas32 Voir le message
        Mais apres va falloir taper sur une BDD et là je n'ai aucune idée comment faire.. Disons que je sais comment faire mais je ne sais pas le faire en MVC
        Le modèle MVC permet de s'abstraire partiellement de la base physique, via des éléments logiques (aussi souvent appelés CRUD http://fr.wikipedia.org/wiki/CRUD) qui permettent de simplifier et surtout abstraire pas mal de choses dans la gestion.

        Le très gros avantage est que tu peux modifier les views (donc la présentation des éléments) sans rien toucher ni aux requêtes de la base de données, ni à la logique métier. De la même manière, lorsque tu étends ta logique métier, tu le fais de manière modulaire, sans avoir besoin de retoucher 100% du code.

        Le plus difficile à acquérir dans cette logique n'est pas le codage, mais la philosophie de la chose
        Pas de demande de support par MP.
        S'il n'y a pas de solution, c'est qu'il n'y a pas de problème (Devise Shadok)

        Commentaire


        • #5
          Re : Impossible à comprendre comment faire un composant

          D'accord encore merci pour tes réponses vraiment rapide

          Mais ne crois pas en avoir fini avec moi , j'ai encore des questions

          Qu'entend tu par s'abstraire de la base physique ? tu parles aux niveaux de la " liaison" avec la BDD ?

          Aurait tu a tout hasard un exemple de communication avec la BDD ?

          En fait j'ai aussi du mal en POO, La POO je l'ai vue en C++ mais pas en php, voilà pourquoi je dois être aussi perdu
          Et là d'apres ce que j'ai compris il y a que des héritages ... Donc pour communiquer avec la BDD dois je faire une classe? utiliser une classe déja existante ? ou utiliser directement les fonctions mysql ?

          Commentaire


          • #6
            Re : Impossible à comprendre comment faire un composant

            tu asla liste des classes disponibles ici......http://api.joomla.org/ .....
            pour ce qui est de la bdd, regardes tu as des sujets avec des exemples ici...utilise la foncton de recherche....

            Commentaire


            • #7
              Re : Impossible à comprendre comment faire un composant

              Envoyé par thomas32 Voir le message
              Mais ne crois pas en avoir fini avec moi , j'ai encore des questions
              Le forum est fait pour ça, tant qu'on reste sur Joomla! Si ça en sort, mon site perso est plus orienté programmation en général

              Envoyé par thomas32 Voir le message
              Qu'entend tu par s'abstraire de la base physique ? tu parles aux niveaux de la " liaison" avec la BDD ?
              La notion d'abstraction à la base de données physique remonte au milieu des années 80. En bref, il s'agit de déléguer au pilote (et aux models) de régler les problèmes de syntaxe. On evoie par exemple une requête GET sur un certain nombre d'enregistrement, charge étant pour le Model de traduire ça dans le dialecte SQL correspondant

              Envoyé par thomas32 Voir le message
              Aurait tu a tout hasard un exemple de communication avec la BDD ?
              Regardes dans le code Joomla!, par exemple le composant com_content, le code est assez significatif

              Envoyé par thomas32 Voir le message
              En fait j'ai aussi du mal en POO, La POO je l'ai vue en C++ mais pas en php, voilà pourquoi je dois être aussi perdu
              Le concept POO de PHP5 est très proche de celui de C++, avec une petite différence, le typage de données est très strict en C++ et dynamique avec PHP. Hormis ce détail, les 2 sont très proches.

              Envoyé par thomas32 Voir le message
              Et là d'apres ce que j'ai compris il y a que des héritages ... Donc pour communiquer avec la BDD dois je faire une classe? utiliser une classe déja existante ? ou utiliser directement les fonctions mysql ?
              Tu n'utilises pas directement des appels MySQL, mais JFactory::getDBO() (get Database Object)

              Cette logique est très proche de celle de la lib Qt en C++.
              Pas de demande de support par MP.
              S'il n'y a pas de solution, c'est qu'il n'y a pas de problème (Devise Shadok)

              Commentaire


              • #8
                Re : Impossible à comprendre comment faire un composant

                Envoyé par lefabdu51 Voir le message
                tu asla liste des classes disponibles ici......http://api.joomla.org/ .....
                pour ce qui est de la bdd, regardes tu as des sujets avec des exemples ici...utilise la foncton de recherche....

                Merci du site



                Peux tu m'en dire plus que la requete GET ?



                Le concept POO de PHP5 est très proche de celui de C++, avec une petite différence, le typage de données est très strict en C++ et dynamique avec PHP. Hormis ce détail, les 2 sont très proches.

                ==> Ok ca me rassure car c'est pas évident d'y mettre les mains dans joomla, alors qu'on est "récent" dans le PHP . ( php appris il y a quelques semaines spécialement pour le stage )



                D'accord donc les fonctions mysql_connect, mysql_select_db, mysql_query,... Ne sont plus utile alors si je comrpends bien ?

                Commentaire


                • #9
                  Re : Impossible à comprendre comment faire un composant

                  Le site api.joomla.org reste la référence pour les apis Joomla!
                  Envoyé par thomas32 Voir le message
                  Peux tu m'en dire plus que la requete GET ?
                  Là on quite Joomla! pour le HTTP.

                  Basiquement, il y a 3 types de requêtes: GET, POST et FILES.
                  L'api Joomla! permet de déterminer les types, et les valeurs des éléments de chaqye requête, mais également de les filtrer, pour éviter, autant que faire se peut les injections de code malicieux et les injections SQL malicieuses.

                  Envoyé par thomas32 Voir le message
                  Le concept POO de PHP5 est très proche de celui de C++, avec une petite différence, le typage de données est très strict en C++ et dynamique avec PHP. Hormis ce détail, les 2 sont très proches.

                  ==> Ok ca me rassure car c'est pas évident d'y mettre les mains dans joomla, alors qu'on est "récent" dans le PHP . ( php appris il y a quelques semaines spécialement pour le stage )
                  PHP connait les classes, les classes dérivées (et depuis PHP 5.3 les classes de type FINAL non extensibles...)
                  Et il connait également les classes abstraites (devant être dérivées) et les classes modles (devant être implémentées). Les classes modèles permettant d'avoir en quelque sorte l'héritage multiple au sens SmallTalk du terme.

                  Envoyé par thomas32 Voir le message
                  D'accord donc les fonctions mysql_connect, mysql_select_db, mysql_query,... Ne sont plus utile alors si je comrpends bien ?
                  Les fonctions MySQL ne devraient JAMAIS être appelées directement, mais uniquement via l'API JDatabase (qui depuis les dernières versions du framework ne concernent plus que MySQL, mais aussi PostgreSQL ou MSQQL)...
                  Pas de demande de support par MP.
                  S'il n'y a pas de solution, c'est qu'il n'y a pas de problème (Devise Shadok)

                  Commentaire


                  • #10
                    Re : Impossible à comprendre comment faire un composant

                    excuse pour ma question bete...mais connais tu le principe d'un framework?

                    Commentaire


                    • #11
                      Re : Impossible à comprendre comment faire un composant

                      Grace a vos réponses j'ai réussi a commencer

                      Mais un probleme survient. Peut être suis je bête ...
                      En fait j'ai un petit probleme j'ai une table dans la BDD contenant 2 colonne ( Id et Texte)
                      Donc en fait ma table donne ceci :

                      1 "Hello world"
                      2 "bonjour monde"
                      3 " Hola mundos"

                      => Quelquechose du genre...

                      Le probleme est le suivant :
                      les appels aux fonctions LoadResult, LoadAssoc ( dans une boucle ou pas d'ailleurs, j'ai éssayé les 2 ) donne que hello world et pas les autres entrées de la table.

                      Je dois avoir une erreur dans la communication avec la BDD.

                      S'il vous plait pouvez m'expliquer comment afficher les 3 textes respectivement...

                      Merci


                      Ps : voila l'exemple type :

                      Array ( [0] => Array ( [greeting] => Hello, World! ) [1] => Array ( [greeting] => Hello, World! ) [2] => Array ( [greeting] => Hello, World! ) )


                      On voti bien que c'est toujours la même ligne lue :/
                      Dernière édition par thomas32 à 22/05/2012, 10h02

                      Commentaire


                      • #12
                        Re : Impossible à comprendre comment faire un composant

                        Bonjour,

                        La documentation de JDatabase indique:
                        LoadAssoc: renvoie le premier enregistrement du result set
                        LoadAssocList: renvoie un tableau avec tous les enregistrements du result set (donc un tableau contenant un tableau par enregistrement)

                        LoadObject: renvoie le premier enregistrement sous forme d'un objet StdClass
                        LoadObjectList: renvoiie un tableau d'objets, chaque élément du tableau étant un objet résultat

                        LoadResult: renvoie le premier enregistrement sous forme mixed

                        LoadRow: renvoie le premier enregistrement sous forme d'un tableau à index numérique
                        LoadRowList: Renvoie tous les enregistrement sous forme d'un tableau de tabeaux
                        Pas de demande de support par MP.
                        S'il n'y a pas de solution, c'est qu'il n'y a pas de problème (Devise Shadok)

                        Commentaire


                        • #13
                          Re : Impossible à comprendre comment faire un composant

                          merci c'est bon j'ai reussi c'est plus clair,

                          Je m'atais trompé , il fallait mettre un tableau à 2 dimensions ..

                          Commentaire


                          • #14
                            Re : Impossible à comprendre comment faire un composant

                            Voilà je l'avais dit d'autres questions arrivent

                            1ere:
                            Pour faire le "backend" d'un composant , c'est le fichier hello.php ( pour moi ) situé dans administrator/component/moncomposant/...
                            qui va gérer la partie backend ?
                            Ou je dois refaire la même MVC pour le back end aussi .

                            2eme :

                            Voilà donc j'ai une fonction getgreeting qui permet de récupérer un "texte" de la BDD
                            Maintenant je veux faire un formulaire puis quand on met envoyer cela s'ajoute dans la meme BDD ( Table composé d'1 ID et d'une variable VARCHAR => greeting )

                            Donc je rajoute cette méthode dans la classe HelloModelHello :


                            class HelloModelHello extends JModel
                            {

                            function getGreeting
                            {
                            // pas la peine de vous la montrer
                            }
                            function addGreeting($texte)
                            {
                            $db =& JFactory::getDBO();

                            $query = 'INSERT INTO `bddsgtm`.`#__hello` (`greeting`) VALUES ("$texte")';
                            $db->setQuery( $query );
                            //$db->insertObject("#__hello", )

                            }

                            Plusieurs problemes se posent : j'ai vu qu'il y avait une focntion insertObject pour insérer un objet . Je ne comprends pas les paramètres.

                            Apres j'appelles donc toutes ces méthodes depuis :

                            class HelloViewHello extends JView
                            {
                            function display($tpl = null)
                            {
                            $model = &$this->getModel();
                            $greeting = $model->getGreeting();
                            $model->addGreeting($_POST['entree']);
                            echo "LALALALALALALALALALAL";
                            echo $_POST['entree'];

                            $this->assignRef( 'greeting', $greeting );

                            parent::display($tpl);
                            }
                            }


                            les 2 echo sont juste des tests.
                            Là le "greeting" devrait s'ajouter à la BDD ... Mais rien ne se passe.

                            Je vous montre le code du formulaire aussi :

                            <form action="index.php?option=com_hello" method="post">
                            <input type="text" name="entree" id="entree" size="32" maxlength="250" />


                            Il y a peut être un soucis au niveau de la variable $texte qui devrait être un attribut de la classe, j'ai éssayé comme un attribut mais en vain.


                            Si quelqu'un pourrait me dire pourquoi cela ne focntionne pas, quels sont mes erreurs ?

                            le probleme ne vient pas de l'acces à la BDD puisque je peux afficher la variable "greeting", je ne peux pas en rajouter .


                            Voila merci
                            Dernière édition par thomas32 à 22/05/2012, 14h26

                            Commentaire


                            • #15
                              Re : Impossible à comprendre comment faire un composant

                              Bonjour,
                              Envoyé par thomas32 Voir le message
                              1ere:
                              Pour faire le "backend" d'un composant , c'est le fichier hello.php ( pour moi ) situé dans administrator/component/moncomposant/...
                              qui va gérer la partie backend ?
                              Ou je dois refaire la même MVC pour le back end aussi .
                              Joomla! se compose d'un framework de d'applications. Par défaut, il y a 3 application: site, administrator et installation (qui n'est utilisée qu'une fois).
                              Chaqueapplication devrait respecter l'API et évidemment le MVC.

                              Envoyé par thomas32 Voir le message
                              function addGreeting($texte)
                              {
                              $db =& JFactory::getDBO();

                              $query = 'INSERT INTO `bddsgtm`.`#__hello` (`greeting`) VALUES ("$texte")';
                              $db->setQuery( $query );
                              //$db->insertObject("#__hello", )

                              }
                              Ta méthode prépare bien la requête le setQuery, mais celle-ci n'est jamais exécutée..
                              Code PHP:
                              public function addGreeting($texte)
                              {
                                  
                              $db =& JFactory::getDBO();

                                 
                              $query "INSERT INTO `#__hello` (`greeting`) VALUES ('$texte')";
                                 
                              $db->setQuery$query );
                                 if ( !
                              $db->query() ) {
                                    
                              // traitement de l'erreur...
                                  
                              }

                              Tu ne dois pas donner le nom de ta base de données dans la requête, getDBO() te ramenant la base à laquelle affectée à ton Joomla! Il s'agit donc de la base par défaut de cette connexion. Si tu donnais le nom de la base, lors de l'installation du composant sur un serveur doistant, avec une autre base de données, tu aurais de très gros problèmes de nommage.

                              Puis l'ID est implicite, je présume que ta table a son champ id en auto_increment (condition sine qua non pour que le fonctionnement soit correct).

                              InsertObject s'utilise si on travaille avec une objet StdClass auquel on affecte en tant que variables d'instance aux noms des champs les valeurs de chaque champ.

                              Tes autres problèmes dérivent simplement du fait d'un non enregistrement des valeurs dans la base.
                              Pas de demande de support par MP.
                              S'il n'y a pas de solution, c'est qu'il n'y a pas de problème (Devise Shadok)

                              Commentaire

                              Annonce

                              Réduire
                              Aucune annonce pour le moment.

                              Partenaire de l'association

                              Réduire

                              Hébergeur Web PlanetHoster
                              Travaille ...
                              X