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

  [Opened] Passer tableau au template

Posted by Jihel on 08/20/2008 11:55

Bonjour à tous

Je tente de passer un tableau que j'ai créé au template de mon application, mais cela ne semble pas fonctionner. Il est vrai que néophyte dans la mécanique de ce bel outil qu'est Jelix (j'apprécie de plus en plus son utilisation), je ne comprends pas tout très bien notamment dans l'enchainement des éléments.

Sur les conseils de Yann, pour résoudre mon prob précédent, j'ai créé une classe pour passer la liste des enregistrements d'une table au template afin de l'afficher, et cela fonctionne. Maintenant je veux passer au template un tableau (1ere ligne de la méthode liste du fichier ci-dessous) dont l'affichage sera conditionné par la valeur d'un champ de l'enregistrement :

default.classic.php :

     function liste() {
       $type = array('1'=>'KAR','2'=>'MID','3'=>'TXT');
       $rep = $this->getResponse('html');
       $conditions = jDao::createConditions();
       $conditions->addItemOrder('nom_titre','asc');
       $select = $GLOBALS['gJCoord']->request->getParam('select');
       if($select>""){$conditions->addCondition('nom_titre','like',$select."%");}
       $fact = jDao::get('kok~titre');      
       $liste = $fact->findBy($conditions);
       $rep->bodyTpl = 'kar~main';
       $rep->body->assignzone('CMD', 'cmd');    	
       $rep->body->assignZone('CORPS', 'liste', array('liste'=>$liste));
       $rep->body->assignzone('MENU', 'kok~menu', array('choix'=>'2'));
       return $rep;
     }	

liste.classe.php :

 class listeZone extends jZone{
  protected $_tplname='liste';
  protected function _prepareTpl() {
    $this->_tpl->assign('liste', $this->getParam('liste'));
    $this->_tpl->assign('liste', $this->getParam('type'));
  }
 }

J'ai pensé qu'en dupliquant l'assign de la liste et en mettant le type, cela passerait le tableau au template (?)

liste.tpl :

   {foreach $liste as $data}
     <tr>
       <td class="center">{$type[$data->type_titre]}</td>
       <td class="left">{$data->nom_titre|escxml}</td>
       <td class="left">{$data->nom_interp|escxml}{if $data->prenom_interp<>$data->nom_interp}&nbsp;{$data->prenom_interp|escxml}{/if}</td>
       <td class="left">{$data->file_titre|escxml}</td>
       <td class="center">{$data->code_lang|escxml}</td>
     </tr>
   {/foreach}

mais pour chaque ligne d'enregistrement, j'obtiens ce message :

 [notice 1] Undefined index: type D:\wamp\www\jelix\temp\kok\compiled\templates\modules\kar\liste_html_t.php 18

Bien que je sois persuadé que cela est élémentaire pour vous qui pratiquez Jelix sur le bout des doigts, pourriez-vous une nouvelle fois dépanner le newbie que je suis afin qu'il comprenne mieux les enchainements, je ne dois surement pas faire comme il conviendrait pour obtenir ce résultat, je vous en serai reconnaissant. Un très vif merci d'avance pour votre aide et votre compréhension Cordialement JiheL

  [Opened] Re: Passer tableau au template

Reply #1 Posted by laurentj on 08/20/2008 14:05

Salut

plusieurs erreurs dans ton code

 $rep->body->assignZone('CORPS', 'liste', array('liste'=>$liste));

Tu as oublié de passer la variable type à la zone

   $this->_tpl->assign('liste', $this->getParam('liste'));
   $this->_tpl->assign('liste', $this->getParam('type'));

Forcément, ici, la variable de template liste est écrasé par la valeur donnée à la deuxième assignation (au passage, la valeur est vide puisque tu as oublié de passer le paramètre type à la zone)

Le template semble correcte.

 
Page
  1. Re: Passer tableau au template