Quick links: Content - sections - sub sections
EN FR
Quick Search Advanced search
 
Page

  [Opened] jForms

Posted by Jihel on 09/25/2008 09:51

Bonjour à tous, et grand merci aux géniteurs et collaborateurs de cet excellent outil que j'apprécie de jour en jour !

Je poursuis ma découverte de Jelix en néophyte que je suis, et attaque maintenant la création de formulaires pour une appli de gestion de stock. L'héritage de mon expérience sur mini-ordinateur fait que conceptuellement, j'affichais un champ CODE par exemple qui permettait, une fois validé, de tester si ce code existait déjà en base de données, si non, j'offrais de quoi le créer, si oui, j'affichais le contenu des champs de la table pour modification éventuelle.

Je tente de faire la même chose avec Jelix (bien que je ne sois pas persuadé qu'il s'agisse du meilleur moyen avec cet outil, auquel cas merci de bien vouloir me faire savoir comment procéder) et ai créé 2 formulaires, le premier (f_art) avec le seul champ CODE, et le second (f_art2) qui ré-affiche le CODE et affiche les éléments de la table concernée.

Dans un controleur formCtrl, l'action <f_art> teste la présence du code dans la table, et si oui je voudrais alimenter <f_art2> avec les champs extraits de la table. C'est là que ça coince, mon formulaire reste désespérement blanc !

Voici les codes :

form~f_art :

      function f_art(){
      $rep = $this->common();
      // recupère les données du formulaire
      $form = jForms::fill($rep->main);
      $_SESSION['mess']="";
      $form->setData('mess','');
      switch($form->getData('submit')){
        case 'KO':
            $rep= $this->getResponse("redirect");
            $rep->action="default:bdd";
            $form->setData('mess','');
            break;
        case 'OK':
            $_SESSION['code']=$form->getData('code');
            if($_SESSION['code']>""){
              $rep= $this->getResponse("redirect");
              $rep->action="form:show";
              $_SESSION['main']='action~f_art2';
            }else{
              $rep= $this->getResponse("redirect");
              $rep->action="form:show";
              $_SESSION['main']='action~f_art';
              $_SESSION['mess']="Le code ARTICLE doit être renseigné !";
            }
        default:
      }
      return $rep;
   }

form~f_art2 :

      function f_art2(){
      $rep = $this->common();
      // recupère les données du formulaire
      $form = jForms::fill($rep->main);
      switch($form->getData('submit')){
        case 'KO':
            $rep= $this->getResponse("redirect");
            $rep->action="form:show";
            $_SESSION['main']='action~f_art';
            $_SESSION['mess']='';
            break;
        case 'OK':
            $_SESSION['code']=$form->getData('code');
            if($_SESSION['code']>""){
              $maFactory = jDao::get("rdc~art");
              $conditions=jDao::createConditions();
              $conditions->addCondition('code','=',$_SESSION['code']);
              $liste = $maFactory->findBy($conditions);
              $nb=0;
              $form->setData('code',$_SESSION['code']);
              foreach($liste as $record){
                $nb++;
                $form->setData('descr',$record->descr);
                $form->setData('descrmat',$record->descrmat);
                $form->setData('descrfam',$record->descrfam);
                $form->setData('refc',$record->refc);
              }
              if($nb==0){
                $_SESSION['mess']="Code INEXISTANT";
                $rep->main="action~f_art";
              }else{
                $_SESSION['mess']="";
                $rep->main="action~f_art2";
              }
              $form->setData('mess',$_SESSION['mess']);
              $rep->body->assignzone('MENU', $rep->menu, array('choix'=>$rep->choix));
              $rep->body->assignzone('NAV', $rep->nav, array('choix'=>$rep->choix));
              $rep->body->assignZone('HEAD', $rep->head, array('titre'=>$rep->titre, 'titre2'=>$rep->titre2));
              $rep->body->assignZone('MAIN',$rep->main, array('form'=>$form));
            }else{
              $rep= $this->getResponse("redirect");
              $rep->action="form:show";
              $_SESSION['main']='action~f_art';
              $_SESSION['mess']="Le code ARTICLE doit être renseigné !";
            }
            break;
        default:
      }
      return $rep;
   }

f_art.tpl :

 {form $form, 'form:f_art'}
 <fieldset>
 <legend><u>Table <b>f_art</b></u></legend>
  
 {formcontrols array('code')}
     <div>{ctrl_label}</div><div>{ctrl_control}</div>
 {/formcontrols }
 {formcontrols}
     <div id="mess">{ctrl_label}</div><div id="mess">{ctrl_control}    </div>
 {/formcontrols}
 
 <div class="valid">{formsubmit}</div>
 </fieldset>
 {/form}

f_art2.tpl :

 {form $form, 'form:f_art2'} 
 
 <fieldset>
 <legend><u>Table <b>f_art2</b></u></legend> 
 
 {formcontrols array('code')}
     <div>{ctrl_label}</div><div>{ctrl_control}</div>
 {/formcontrols}
 <br />
 {formcontrols array('descr','descrmat','descrfam','refc')}
     <div>{ctrl_label}</div><div>{ctrl_control}</div>
 {/formcontrols}
 {formcontrols array('mess')}
     <div id="mess">{ctrl_label}</div><div id="mess">{ctrl_control}    </div>
 {/formcontrols}
 
 <div class="valid">{formsubmit}</div>
 </fieldset>
 {/form}

Aussi, si l'un d'entre vous pouvait m'apporter quelques précisions sur la façon de faire et/ou quelle erreur je commets à ce niveau, je vous en serais très reconnaissant. Merci d'avance de votre aide et votre compréhension Très cordialement JiheL

  [Opened] Re: jForms

Reply #1 Posted by laurentj on 09/25/2008 17:28

Salut,

je ne comprends pas trop cette histoire de code.

  [Opened] Re: jForms

Reply #2 Posted by Jihel on 09/30/2008 08:38

Bonjour Laurent, désolé pour la réponse tardive et merci pour ta lecture. J'ai cassé tout ce que j'avais écrit auparavant car je me suis rendu compte de la complexité (et surtout l'inutilité) de ce code.

Aussi, sans vouloir abuser de ton temps (comme de celui des autres participants), je voudrais t'exposer brièvement ce que je souhaite réaliser.

1) saisir un code article dans un formulaire avec un seul champ input, lequel est destiné à vérifier ou non l'existence de l'article dans la BDD. 2) si existant, afficher dans un formulaire les données existantes pour modification éventuelle. 3)si non existant, proposer la création de l'article saisi.

Ma question : tout cela est-il réalisable avec un seul formulaire dont on conditionnerait l'affichage ou non des parties nécessaires ? Quelle est la méthode la plus adaptée, la plus usitée, dans un tel contexte ?

4) si le code saisi en 1) est partiel, je voudrais faire un 'like' et afficher dans un menulist toutes les entrées correspondantes pour sélection. Ex: je saisi 'joi' et j'affiche tous les joints. J'ai essayé avec un dao, mais il m'affiche systématiquement toute la table. J'ai lu qu'on pouvait alimenter un menulist manuellement, mais je n'ai pas compris comment. Alors voila. Si tu pouvais m'aiguiller sur la voie à suivre pour réaliser cette partie, je t'en (vous en) serais reconnaissant.

Encore merci pour tout ce temps que vous consacrez tous à l'élaboration de ce produit, et au 'débourrage' des newbies comme moi dont l'apprentissage de cette belle mécanique est loin d'être au point !

Très cordialement JiheL

  [Opened] Re: jForms

Reply #3 Posted by laurentj on 09/30/2008 15:13

Quelle est la méthode la plus adaptée, la plus usitée, dans un tel contexte ?

  • un formulaire pour la saisie du code
  • un formulaire pour la saisie du reste (en create ou update)

J'ai essayé avec un dao, mais il m'affiche systématiquement toute la table

dans le dao, fait une methode avec une condition like

J'ai lu qu'on pouvait alimenter un menulist manuellement

C'est dans le manuel.

merci pour tout ce temps que vous consacrez tous à l'élaboration de ce produit

merci

 
Page
  1. jForms