Comment utiliser la classe "JForm"

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

  • Comment utiliser la classe "JForm"

    Bonjour,

    j'essaye d'utiliser la classe JForm pour générer un formulaire.
    J'ai beau tourenr la question dans tous les sens et regarder tous les tutoriels que je trouve,
    j'ai toujours la même erreur

    Code HTML:
    <?php
    jimport( 'joomla.form.form' );
    		$pathFormXMLFile =  JPATH_COMPONENT . DS . 'models' . DS .  'forms' . DS . 'publiannonce.xml';
    		echo  $pathFormXMLFile;
    		
    		$form = JForm::getInstance('myform', $pathToMyXMLFile);
    
    ?>
    en front -> bookmark périmé
    en back -> 500 - Une erreur s'est produite
    en fait la même erreur

    où est donc mon erreur ?

    Merci pour vos lumières...

    Pi

  • #2
    Re : Comment utiliser la classe &quot;JForm&quot;

    Alors en l'absence de réponse, j'avance (un peu)

    M'appuyant sur le composant contact, j'ai trouvé ça
    dans le modele
    - class TerrainModelTerrain extends JModelForm
    à la place de :
    - class TerrainModelTerrain extends JModel

    ce qui évite l'erreur précédente,
    donc on trouve apparemment classe et méthodes.

    Cependant ça fonctionne toujours pas.
    Si je récupère cette ligne du composant contact :
    - $form = $this->loadForm('com_contact.contact', 'contact', array('control' => 'jform', 'load_data' => true));
    var_dump ( $form ) affiche false
    alors que la même ligne dans le composant contact affiche un object(JForm)[149]

    Personne n'utilise la classe JForm pour générer des formulaires et pourrait me débloquer ?
    Pi

    Commentaire


    • #3
      Re : Comment utiliser la classe &quot;JForm&quot;

      Toujours pas de réponse !!! j'ai connu ce forum plus actif (et réactif)
      Donc comme ça ça marche (mieux) :

      public function getForm($data = array(), $loadData = true)
      {

      $form = $this->loadForm ('com_terrain.terrain', 'terrain', array('control' => 'jform', 'load_data' => true));
      }

      avec le fichier components/com_terrain/models/forms/terrain.xml décrivant le formulaire

      En revanche ça devrait lancer la méthode
      protected function loadFormData() {
      }

      qui récupérerait les données pour peupler le formulaire (il me semble)
      En tout cas ça déclenche bien sur le composant "contact"

      Mais chez moi la méthode ne déclenche pas (pourtant il me semble vraiment avoir fait pareil)
      Donc c'est où que ça devrait déclencher (ou que ça le fait pas)

      J'ai vraiment rien trouvé sur le sujet dans toutes les docs du monde
      Personne pour m'aider, ou alors ?
      Pi

      Commentaire


      • #4
        Re : Comment utiliser la classe &quot;JForm&quot;

        Bonjour,

        Il y a eu il y a peu une très longue discussion sur le groupe Joomla genéral (google groups) concernant la classe JForm. Je pense que dans cette discussion, tu devrais trouver les réponses, pas toujours évidentes, cette classe étant parfois usine à gaz.
        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 : Comment utiliser la classe &quot;JForm&quot;

          Merci pour cette piste,
          Pour l'instant j'ai pas trouvé ma réponse
          Je la mettrai ici ( si je la trouve)

          Je pensais pas que c'était si obscure
          Moi qui voulais utiliser plus rationnellement le FrameWork de Joomla

          En attendant je maintient mon appel
          pour trouver comment déclencher loadFormData()

          Pi

          Commentaire


          • #6
            Re : Comment utiliser la classe &quot;JForm&quot;

            JForm est une des classes les plus complexes de Platform, et une des moins bien documentées. Elle est destinée à la création de formulaires conformes W3C, et quelques composants l'utilisent, tous restant quelque peu complexes à décortiquer.

            Je tente de l'utiliser sur un développement spécifique client, je mettrai un tuto une fois le dev terminé
            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


            • #7
              Re : Comment utiliser la classe &quot;JForm&quot;

              Bon, le sujet a presque un an, mais il est bien référencé sur Google, donc je pose une soluce pour ceux que ça intéresse.... Du QUICK AND DIRTY JFORM...

              REMARQUE :
              L'idéal est de respecter le modèle MVC, en répartissant chacune des tâches entre le modèle, la vue, et le contrôleur Pour apprendre ça en détail, utilisez le tuto de création de composant MVC du site officiel de Joomla! (anglais)


              1. Le fichier XML
              Soit un composant com_foo, avec un fichier xml com_foo/models/forms/bar.xml
              Ce fichier contient 2 champs de formulaire, regroupés en un fieldset :

              <?xml version="1.0" encoding="utf-8"?>
              Code:
              <form>
                  <fieldset name="primaryfieldset">
                      <field 
                          name="the_file" 
                          type="file" 
                          label="COM_FOO_FILE" 
                          description="COM_FOO_FILE_DESC" 
                          size="10"
                      />        
                      
                      <field 
                          name="a_check_box" 
                          type="checkbox" 
                          label="COM_FOO_A_CHECK_BOX" 
                          description="COM_FOO_A_CHECK_BOX_DESC" value="1" 
                      />
                  </fieldset>
              </form>

              vous trouverez ici une liste de tout les types de champs que vous pouvez utiliser dans un formulaire Joomla, certains sont très utiles comme l'éditeur WYSIWYG :




              2. Affichage des éléments du formulaire


              Pour afficher ce formulaire n'importe où en un seul bloque de lignes (c'est mal, il faut faire du MVC )

              Code PHP:
              <?php 
                              jimport
              'joomla.form.form' ); 
                              
              $form JForm::getInstance('com_foo.bar''bar');
                              foreach(
              $form->getFieldset('primaryfieldset') as $field)
                              {
                                  echo 
              $field->label;
                                  echo 
              $field->input
                              }
                          
              ?>
              Voilà ! Les éléments de votre formulaire s'affichent !


              3. Entête du Formulaire

              Pour la balise du formulaire elle-même, c'est à vous de la coder, en fonction du contrôleur auquel vous voulez envoyer les infos du formulaire. Par exemple, pour l'envoyer au sous-contrôleur 'bar' de votre composant (fichier : com_foo/controllers/bar.php) :

              Code PHP:
              <form action="<?php echo JRoute::_('index.php?option=com_foo&view=bar' ?>" method="post" name="adminForm">

              4. Choix de la méthode du contrôleur
              Pour appeler la méthode bar::save() de votre sous-contrôleur, ajouter un input hidden nommé task dans votre formulaire :

              Code HTML:
              <input type="hidden" name="task" value="bar.save" />
              5. Récapitulatif
              Au final, le snippet que vous pouvez copier/coller n'importe où ( c toujours mal... ) donne :
              Code PHP:
              <form action="<?php echo JRoute::_('index.php?option=com_foo&view=bar' ?>" method="post" name="adminForm">
                  <input type="hidden" name="task" value="bar.save" />
                      <ul>
                       <?php 
                              jimport
              'joomla.form.form' ); 
                              
              $form JForm::getInstance('com_foo.bar''bar');
                              foreach(
              $form->getFieldset('primaryfieldset') as $field)
                              {
                                  echo 
              '<li>'.$field->label.$field->input.'</li>'
                              }
                          
              ?>
                      </ul>
              </form>
              Ce formulaire appellera la méthode save() du contrôleur com_foo/controllers/bar.php lors de sa soumission .

              Commentaire

              Annonce

              Réduire
              Aucune annonce pour le moment.

              Partenaire de l'association

              Réduire

              Hébergeur Web PlanetHoster
              Travaille ...
              X