création composant

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

  • [RÉGLÉ] création composant

    Bonjour

    Je suis entrain de créer un composant pour joomla mais j'ai un petit problème
    sur ma page default.php j'ai la variable (je sais pas si ça ce nomme comme ça) JFactory qui fonctionne trés bien.
    Dans cette même page j'envois un formulaire a un fichier js qui a pas besoin de JFactory et lui me renvois a une page php qui lui a besoin de JFactory mais je me trouve face a mon problème. J'ai un message d'erreur qui me dit
    Fatal error: Class 'JFactory' not found in C:\wamp\www\joomla\components\com_graph\views\grap h\tmpl\choix.php on line 3
    Donc ma question est comment je dois faire pour ne plus avoir ce problème
    Merci d'avance
    Dernière édition par gandalf91 à 13/09/2011, 11h05

  • #2
    Re : création composant

    Peux-tu poster le début de ton fichier choix.php et comment ton fichier .js fait appel à ce fichier ?

    J'ai l'impression que tu adresses immédiatement le fichier choix.php sans même passer par index.php càd sans même passer par Joomla ==> pas de Joomla ==> pas de framework Joomla ==> pas de JFactory.
    Christophe (cavo789)
    Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be
    Logiciel gratuit de scan antivirus : https://github.com/cavo789/aesecure_quickscan (plus de 45.000 virus détectés, 700.000 fichiers sur liste blanche)​

    Commentaire


    • #3
      Re : création composant

      Bonjour désoler pour le retard

      voila pour le moment mon fichier choix.php

      Code:
      <?php
      header('Content-type: text/html; charset=iso-8859-1');
      $user = &JFactory::getUser();
      echo $_SERVER['SCRIPT_NAME'].'<br/>';
      echo $_REQUEST['numChoix'].'<br/>';
      ?>
      Voila mon fichier js
      Code:
      function getXhr(){
          var xhr = null;
              if(window.XMLHttpRequest){ 
                 xhr = new XMLHttpRequest(); 
              }
              else if(window.ActiveXObject){ 
                 try {
                          xhr = new ActiveXObject("Msxml2.XMLHTTP");
                  } catch (e) {
                          xhr = new ActiveXObject("Microsoft.XMLHTTP");
                  }
              }
              else { 
                 alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest..."); 
                 xhr = false; 
              } 
          return xhr;
      }
      
      function choix() {
          for(i=0;i<3;i++){
              if(document.forms.choixRad.choixAff[i].checked==true){
                  var valueRadio=document.choixRad.choixAff[i].value;
                  if(valueRadio==1){
                      document.getElementById('choix1').style.display="block";
                      document.getElementById('choix2').style.display="none";
                      document.getElementById('choix3').style.display="none";
                      document.getElementById('cmdChoisi').style.display="block";
                      checkCmd();
                  } else if(valueRadio==2) {
                      document.getElementById('choix1').style.display="none";
                      document.getElementById('choix2').style.display="block";
                      document.getElementById('choix3').style.display="none";
                      document.getElementById('cmdChoisi').style.display="none";
                  } else if(valueRadio==3) {
                      document.getElementById('choix1').style.display="none";
                      document.getElementById('choix2').style.display="none";
                      document.getElementById('choix3').style.display="block";
                      document.getElementById('cmdChoisi').style.display="none";
                  }
                  break;
              }
          }
      }
      
      function checkCmd() {
          var xhr = getXhr();
          xhr.onreadystatechange = function(){
              if(xhr.readyState == 4 && xhr.status == 200){
                  di = document.getElementById('cmdChoisi');
                  di.innerHTML = xhr.responseText;
              }
          }
      
          xhr.open("POST","../../"+<?php echo $_SERVER['DOCUMENT_ROOT']; ?>+"joomla/components/com_graph/views/graph/tmpl/choix.php",true);
          xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
          numChoix = document.getElementById('numChoix').value;
          xhr.send("numChoix="+numChoix);
      }
      ET oui tu a raison je passe pas par index pour appeler mon fichier faut dire que je ne sais pas comment je dois faire
      Merci pour votre raiponce

      Commentaire


      • #4
        Re : création composant

        Envoyé par gandalf91 Voir le message
        ET oui tu a raison je passe pas par index pour appeler mon fichier
        Faut pas chercher plus loin. Dans le modèle MVC, toutes requêtes doit passer par le controlleur et donc par le fichier index.php. (ok, il existe de très rares exceptions mais dans ces cas-là, on n'utilise pas le framework de Joomla).

        Lis ce post : http://forum.joomla.fr/showthread.ph...AJAX-Mootools&
        Christophe (cavo789)
        Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be
        Logiciel gratuit de scan antivirus : https://github.com/cavo789/aesecure_quickscan (plus de 45.000 virus détectés, 700.000 fichiers sur liste blanche)​

        Commentaire


        • #5
          Re : création composant

          Re J'ai bien lu tout les articles
          Mais je n'arrive pas a les mettre en œuvre pouvez vous me donner le début pour me débloquer
          Merci pour votre raiponces et pour la suite

          Commentaire


          • #6
            Re : création composant

            Je ne peux rien faire de plus que dire "Courage!". Je t'ai filé un tutoriel; tout y est expliqué mais c'est vrai qu'il faut s'accrocher au début afin de comprendre.
            Christophe (cavo789)
            Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be
            Logiciel gratuit de scan antivirus : https://github.com/cavo789/aesecure_quickscan (plus de 45.000 virus détectés, 700.000 fichiers sur liste blanche)​

            Commentaire


            • #7
              Re : création composant

              bon je refait une fois de plus ce que j'ai trouver,
              j'ai rajouter a mon code du fichier default.php ce si (ce qui est en gras)
              Code:
              <?php
              // No direct access to this file
              defined('_JEXEC') or die('Restricted access');
              ?>
              <?php
              /* test */
              ?>
              [B]<?php
                  JHTML::_('behavior.mootools'); /* to load mootools */
                  $ajax = "
                  /* <![CDATA[ */
                 window.addEvent('domready', function() {
                      $('start_ajax').addEvent('click', function(e) {
                          e.stop();    
                          var url = 'index.php?option=com_graph&view=graph&task=updateAjax&format=raw';
                          var x = new Request({
                              url: url, 
                              method: 'post', 
                      onSuccess: function(responseText){
                          document.getElementById('ajax_container').innerHTML = responseText;
                      }
                          }).send();      //  To pass values :    }).send('country_id=' + document.getElementById('country_id').value );
                      });
                  })
                  /* ]]> */
                  " ;
                   $doc = & JFactory::getDocument();
                  $doc->addScriptDeclaration( $ajax );
              ?>
              
              <div><a id="start_ajax" href="#">Click here</a> to start Ajax request</div>
              <div id="ajax_container">
                  Here is the ajax output
              </div>[/B]
              
              <?php
              /* test */
              ?>
              <script type="text/javascript" src="components/com_graph/views/graph/tmpl/fonction.js"></script>
              <script type="text/javascript" src="components/com_graph/views/graph/tmpl/jquery-1.6.2.min.js"></script>
              <h3>
              Gestion des commandes
              </h3>
              <form name="choixRad" method="POST" action="">
                  <label><input type="radio" hidden name="choixAff" value="1" onChange="choix()" /> Dix dernières commandes  </label>
                  <label><input type="radio" hidden name="choixAff" value="2" onChange="choix()" /> 30 dernier jours  </label>
                  <label><input type="radio" hidden name="choixAff" value="3" onChange="choix()" /> Période  </label>
              </form>
              <?php
              $user = &JFactory::getuser();
              $db = &JFactory::getDBO();
              $query = "SELECT * FROM #__users WHERE id=".$user->id;
              $db->setQuery($query);
              $row = $db->loadObjectList();
              $dossier = array();
              
              foreach ($row as $r) {
                  $dossier[] = $r->dossier ;
              }
              
              $requet = "SELECT * FROM #__commande WHERE id_user=".$user->id;
              $db->setQuery($requet);
              $resultat = $db->loadObjectList();
              $listCmd = array();
              $a = "SELECT count(id_user) FROM #__commande WHERE id_user=".$user->id;
              $db->setQuery($a);
              $b = $db->loadResult();
              ?>
              <div id="choix1" style="display: none">
              <h4>Liste de vos 10 dérnières commandes : </h4><br/>
              <form name="select" action="index.php?option=com_graph&views=graph&format=raw" method="GET">
                  <select name="numChoix" id="numChoix" onChange="checkCmd()">
                      <option value="">Choisir votre commande</option>"
                      <?php
                          $i = 0;
                          foreach ($resultat as $re) {
                              $listCmd[] = $re->id_commande;
                              echo '<option value="'.$listCmd[$i].'">Commande n° '.$listCmd[$i].'</option>';
                              $i++;
                          }
                      ?>
                  </select>
              </form>
              <div id="cmdChoisi" style="display: none">
                  <?php 
                          include_once ('components/com_graph/views/graph/tmpl/choix.php');
                  ?>
              </div>
              </div>
              <div id="choix2" style="display: none">
                  <?php 
                      echo 'Select des 30 derniers jours';
                  ?>
              </div>
              <div id="choix3" style="display: none">
                  <?php 
                      echo 'Select d\'une période';
                  ?>
                  <input type="text" value="31/08/2011"/>  <input type="text" value="01/01/1900"/><br/>
              </div>
              Et a mon fichiet controller.php j'ai mi aussi ce si (ce qui est en gras)
              Code:
              <?php
              // No direct access to the file
              defined('_JEXEC') or die('Restricted access');
              
              // import Joomla controller library
              jimport('joomla.application.component.controller');
              
              /**
               * Graph Component Controller
               */
              class GraphController extends JController {
              [B]    function updateAjax() {
                  //      $country_id=JRequest::getVar('country_id');
                      echo date('Y-m-d D H:i:s');
                  }[/B]
              
                  public function display($cachable = false, $urlparams = false) {
                      // Get document objet.
                      $document = JFactory::getDocument();
                      
                      // set the default view name and format from the resquest.
                      $vName      = JRequest::getCmd('view', 'graph');
                      $vFormat    = $document->getType();
                      $lName      = JRequest::getCmd('layout', 'default');
                      
                      if ($view = $this->getView($vName, $vFormat)) {
                          // Do any specific processing by view.
                          switch ($vName) {
                              case 'fichier':
                                 $model = $this->getModel('Fichier');
                                  break ;
                              case 'utilisateur':
                                  $model = $this->getModel('Utilisateur');
                                  break ;
                              case 'modif':
                                  $model = $this->getModel('Modif');
                                  break ;
                              default :
                                  $model = $this->getModel('Graph');
                                  break ;
                          }
                          $view->setModel($model, true);
                          $view->setLayout($lName);
                          
                          $view->assignRef('document', $document);
                          $view->display();
                      }
                  }
              }
              mais rien ne change toujours le problème je sèche comme un débutant

              Commentaire


              • #8
                Re : création composant

                Salut

                Déjà, pourquoi mettre ton code JS de la sorte dans le php ? Beurk !!!

                Opte pour un fichier .js externe que tu charges. Plus propre, plus simple et plus aisé à géré.

                Pour ta tâche du contrôlleur, as-tu vu mon post : http://forum.joomla.fr/showthread.ph...l=1#post749032. Perso, je fais un mainframe->close();
                Christophe (cavo789)
                Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be
                Logiciel gratuit de scan antivirus : https://github.com/cavo789/aesecure_quickscan (plus de 45.000 virus détectés, 700.000 fichiers sur liste blanche)​

                Commentaire


                • #9
                  Re : création composant

                  Bonjour

                  Mon js est est dans le fichier le temps de tester si ça fonctionnel bien après je le mettrai dans un fichier au propres car la oui ces beurk

                  J'ai bien vu ton post mais je comprend pas comment modifier mon conroleur pour que ma page php s'affiche mieu et que j'ai pas une erreur 500 dans firebug qui me dis que ma page n'existe pas

                  Merci pour votre raiponce

                  Commentaire


                  • #10
                    Re : création composant

                    Je te donne le code de mon contrôleur
                    Code:
                    <?php
                    // No direct access to the file
                    defined('_JEXEC') or die('Restricted access');
                    
                    // import Joomla controller library
                    jimport('joomla.application.component.controller');
                    
                    /**
                     * Graph Component Controller
                     */
                    class GraphController extends JController {
                    
                        public function display($cachable = false, $urlparams = false) {
                            // Get document objet.
                            $document = JFactory::getDocument();
                            
                            // set the default view name and format from the resquest.
                            $vName      = JRequest::getCmd('view', 'graph');
                            $vFormat    = $document->getType();
                            $lName      = JRequest::getCmd('layout', 'default');
                            
                            if ($view = $this->getView($vName, $vFormat)) {
                                // Do any specific processing by view.
                                switch ($vName) {
                                    case 'choix':
                                        $model = $this->getModel('Choix');
                                        break ;
                                    case 'fichier':
                                       $model = $this->getModel('Fichier');
                                        break ;
                                    case 'utilisateur':
                                        $model = $this->getModel('Utilisateur');
                                        break ;
                                    case 'modif':
                                        $model = $this->getModel('Modif');
                                        break ;
                                    default :
                                        $model = $this->getModel('Graph');
                                        break ;
                                }
                                
                                $view->setModel($model, true);
                                $view->setLayout($lName);
                                
                                $view->assignRef('document', $document);
                                $view->display();
                            }
                        }
                    }
                    Tu pourra plus m’orienter merci d'avance

                    Je pense que mon souci vien du fait que mon fichier choix.php est dans le même dossier que celui que graph.php
                    Vu que je fais appel au fichier choix.php par mon fichier fonction.js qui est lui appeler par mon bouton radio du fichier graph.php
                    Es-que le problème ne viendrai pas tous simplement que le fichier choix.php n'est pas au bonne endroits ???
                    Dernière édition par gandalf91 à 05/09/2011, 10h52

                    Commentaire


                    • #11
                      Re : création composant

                      J'ai un peut avancé

                      J'ai maintenant un message :

                      Fatal error: Call to a member function getName() on a non-object in C:\wamp\www\joomla\libraries\joomla\application\co mponent\view.php on line 437
                      Donc le souci vient de mon contrôleur mais où je ne sais pas ???

                      Je commence a avancer mais j'ai encore besoin d'aide
                      Merci d'avance pour votre aide

                      Commentaire


                      • #12
                        Re : création composant

                        Bonjour
                        J'avance encore un petit peut tout les jours mais voila le problème du jour

                        Quand j'execute mon scripte php qui fait appel a ma page de traitement je n'arrive pas a afficher que la parti de la page que j'ai besoin
                        Je fais appel a ma page par l'adresse index.php?option=com_graph&view=traitementUser
                        Mais j'ai toute la page qui s'affiche dans la div et non pas que le bou de page que je veux

                        J'ai lu pas mal de tuto et de doc mais toujours le même souci donc si quelqu'un peut m'aider merci d'avance

                        Commentaire


                        • #13
                          Re : création composant

                          Envoyé par gandalf91 Voir le message
                          Mais j'ai toute la page qui s'affiche dans la div et non pas que le bou de page que je veux
                          Tu dois ajouter &tmpl=component dans l'URL.

                          C'est mentionné dans un post que je t'avais déjà communiqué : http://forum.joomla.fr/showthread.ph...AJAX-Mootools&
                          Christophe (cavo789)
                          Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be
                          Logiciel gratuit de scan antivirus : https://github.com/cavo789/aesecure_quickscan (plus de 45.000 virus détectés, 700.000 fichiers sur liste blanche)​

                          Commentaire


                          • #14
                            Re : création composant

                            Ok merci ****l cela fonctionne
                            mais j'ai un petit souci et oui encore lol
                            quand je fait
                            Code:
                            $userSelect = '';
                            $uresSelect = $_POST["idClient"]; // $_POST["idClient"] = admin il est bien remplis 
                            $user =& JFactory::getUser();
                            $db =& JFactory::getDBO();
                            $sql = "SELECT * FROM #__users WHERE username = ' ".$uresSelect." '";
                            $db->setQuery($sql);
                            $result = $db->loadObjectList();
                            var_dump($result);
                            $clients = array();
                            $i = 0 ;
                            foreach( $result as $rowSelect ) {
                                echo $rowSelect->title ." : ". $rowSelect->description."<br />";
                            }
                            Mon array a la sortie est vide mais quand je fait le select dans phpmyadmin il me retourne des valeur je comprend ou il me pers mes informations

                            Merci pour votre raiponce

                            Commentaire


                            • #15
                              Re : création composant

                              J'ai l'impression que tu ne prends pas assez de temps pour lire... Ni pour débugger.

                              Quel sera le résultat du code suivant ?

                              $sql = "SELECT * FROM #__users WHERE username = ' ".$uresSelect." '";

                              Cela va donner un truc comme

                              SELECT * FROM #__users WHERE username = ' gandalf91 '

                              Est-ce bien comme cela ? Espace gandalf91 espace ?

                              Tu utilises un var_dump; utilise aussi un echo '*'.$sql.'*'; pour voir ton instruction et pour pouvoir la copier/coller dans phpMyAdmin.
                              Christophe (cavo789)
                              Mon blog, on y parle Docker, PHP, WSL, Markdown et plein d'autres choses : https://www.avonture.be
                              Logiciel gratuit de scan antivirus : https://github.com/cavo789/aesecure_quickscan (plus de 45.000 virus détectés, 700.000 fichiers sur liste blanche)​

                              Commentaire

                              Annonce

                              Réduire
                              Aucune annonce pour le moment.

                              Partenaire de l'association

                              Réduire

                              Hébergeur Web PlanetHoster
                              Travaille ...
                              X