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

  [Opened] DAO : Object of class mysqlDbResultSet

Posted by Jihel on 08/12/2008 18:34

Bonsoir à tous et merci d'avance pour votre aide sympathique

J'avance dans mes pérégrinations, j'ai réussi à créer le DAO 'titre.dao.xml' dans le module 'kok'

 <?xml version="1.0" encoding="UTF-8"?>
 <dao xmlns="http://jelix.org/ns/dao/1.0">
     <datasources>
         <primarytable name="titre" realname="titre" primarykey="id" />
     </datasources>
     <record>
     <property name="id" fieldname="id" datatype="autoincrement"/>
     <property name="titre" fieldname="titre" datatype="string" required="yes" maxlength="255"/>
     <property name="id_interp" fieldname="id_interp" datatype="int" required="yes"/>
     <property name="id_lang" fieldname="id_lang" datatype="int" required="yes" default="1"/>
     <property name="id_creat" fieldname="id_creat" datatype="int" default=""/>
     <property name="id_pack" fieldname="id_pack" datatype="int" default=""/>
     <property name="file" fieldname="file" datatype="string" required="yes" maxlength="255"/>
     <property name="type" fieldname="type" datatype="string" required="yes" default="1"/>
     </record>
 </dao>

dans mon controleur 'defaultClassic.php' du module 'kar'

     function liste() {
       $rep = $this->getResponse('html');
       $fact = jDao::get('kok~titre');
       $liste = $fact->findAll();
       $rep->body->assign('CORPS', $liste);  		
       $rep->body->assignzone('MENU', 'kok~menu', array('choix'=>'2'));
       return $rep;
     }	

j'instancie la factory ($fact) puis récupère tous les records ($liste) et j'assigne le tout à la zone CORPS (c'est ce que j'ai compris du tutoriel et du manuel) J'obtiens alors le message suivant :

 [error 1] Object of class mysqlDbResultSet could not be converted to string
   D:\wamp\www\jelix\temp\kok\compiled\templates\modules\kok\main_html_t.php 10

main_html_t.php :

 <?php 
 function template_meta_95c1531096621532313cecf24bf218a0($t){
 
 }
 function template_95c1531096621532313cecf24bf218a0($t){
 ?><div id="page">
 <?php echo $t->_vars['HEAD'];  echo $t->_vars['MENU']; ?>
 <div id="left"></div>
 <div id="right"></div>
 10<?php echo $t->_vars['CORPS'];  echo $t->_vars['FOOT']; ?>
 </div><?php 
 }
 ?>

Alors c surement pour moi aussi une question débile voire inutile mais à votre avis que signifie ce message ? Cette table contient bien des données. Merci grandement de votre aide Bonne soirée à tous Très cordialement JiheL

  [Opened] Re: DAO : Object of class mysqlDbResultSet

Reply #1 Posted by laurentj on 08/13/2008 00:40

Salut,

dans $liste, tu as une liste. Mais on n'affiche pas une liste avec un simple {$liste}. Faudrait peut être boucler dessus, en récupérer les élements etc... ;-)

  [Opened] Re: DAO : Object of class mysqlDbResultSet

Reply #2 Posted by Jihel on 08/14/2008 12:19

Bonjour Laurent, et merci vivement pour ton aide sympathique

J'vais y arriver, j'vais y arriver...!!! Faut que j'm'infuse la mécanique du produit et pour ça faut que j'mette de l'ordre dans mes neurones...

Blague à part, je me suis inspiré de l'exemple du tutoriel principal 'utilisation d'un dao) sauf que dans mon cas, je dois alimenter la variable CORPS du template MAIN avec la zone 'liste' du module 'kar'. C'est dans celui-ci que je boucle sur la liste $liste, amis ça coince.

 [notice 1] Undefined index: liste D:\wamp\www\jelix\temp\kok\compiled\templates\modules\kar\liste_html_t.php 7
 [warning 1] Invalid argument supplied for foreach() D:\wamp\www\jelix\temp\kok\compiled\templates\modules\kar\liste_html_t.php 7

Mon controleur 'default.classic.php' du module 'kar' :

     function liste() {
       $rep = $this->getResponse('html');
       $fact = jDao::get('kok~titre');
       $liste = $fact->findAll();
       $rep->body->assignzone('CORPS', 'kar~liste');
       $rep->body->assignzone('MENU', 'kok~menu', array('choix'=>'2'));
 
       return $rep;
     }	

mon fichier 'liste.tpl' appelé par 'liste.zone.php' du module 'kar'

 <div class="main"><br />Liste KaraOkés<br />
   {foreach $liste as $data}
     <tr>
       <td>{$data->titre|escxml}</td>
       <td>{$data->file|escxml}</td>
       <td>{$data->type|escxml}</td>
     </tr>
   {/foreach}
 </div>

Je suis désolé de solliciter ainsi ton aide, mais y a encore quelque chose qui m'échappe dans l'enchainement des éléments. Quand je pense aux autres éléments comme jForms auxquels je vais devoir m'atteler, ça m'inquiète ! Pourtant plus j'en apprends plus j'apprécie ce super outil, c'est vraiment cool d'utilisation... quand on a pigé la logique, bien sur ! Merci d'avance pour ta compréhension et ton aide, si j'abuse, n'hésites pas à me le faire savoir Cordialement JiheL

  [Opened] Re: DAO : Object of class mysqlDbResultSet

Reply #3 Posted by Yann.L on 08/14/2008 13:51

tu n'assigne pas $liste a ton template liste.tpl

Essai de faire qqch dans ce style, je pense que ça fonctionne :

 function liste(){
  $rep = $this->getResponse('html');
  $fact = jDao::get('kok~titre');
  $liste = $fact->findAll();
  $tpl = new jTpl();
  $tpl->assign('liste', $liste);
  $rep->body->assignzone('CORPS', tpl->fetch('kar~liste'));
  $rep->body->assignzone('MENU', 'kok~menu', array('choix'=>'2'));
  return $rep;
 }

  [Opened] Re: DAO : Object of class mysqlDbResultSet

Reply #4 Posted by Jihel on 08/14/2008 15:34

Bonjour Yann, et grand merci pour cette réponse rapide !

C'est toujours navrant de solliciter l'aide des 'ainés' car cela doit être rébarbatif de répéter la même chose aux 'newbies', mais c'est un produit tellement sympa (malgré les écueils rencontrés) que je serai navré de rester bloqué sur un point surement bénin, mais quand la compréhension n'est pas présente...?

Ceci dit, j'ai purement et simplement copié ta suggestion, et après ajout du $ devant le tpl->fetch, j'ai du mieux, mais avec une erreur, je vois apparaitre le contenu html du template avec les titres renseignés de la table :

 [error 1] (10)Syntax du sélecteur "<div class="main"><br />Liste Fichiers<br />  
 <tr><td>Donne</td><td>2Be3 - Donne.kar.mid</td><td>1</td></tr>
 <tr><td>Don't Say Goodbye</td><td>2Be3 - Don't Say Goodbye.kar.mid</td><td>1</td></tr>
 <tr><td>La Salsa</td><td>2Be3 - La Salsa.kar.mid</td><td>1</td></tr> <tr><td>Partir un jour</td><td>2Be3 - Partir un jour.kar.mid</td><td>1</td></tr>
 <tr>  <td>Toujours là pour toi</td><td>2Be3 - Toujours là pour toi.kar.mid</td><td>1</td></tr>
 <tr><td>Stand by me</td><td>4_the_cause - Stand by me[GB].kar.mid</td><td>1</td></tr>
 <tr><td>Aquarius</td><td>5th_Dimension_(The) - Aquarius [GB].kar.mid</td><td>1</td></tr>
 <tr><td>Du Fric</td><td>6-9_(Le) - Du Fric.kar.mid</td><td>1</td></tr>
 </div>" 
 invalide (type=zone)D:\wamp\www\jelix\lib\jelix\core\jSelector.class.php 118

Encore un souci entre les zones et les templates je pense, j'avoue que je pêche un peu de ce côté-là, pourtant élémentaire... Merci d'avance de bien vouloir prendre le temps de m'éclairer davantage Je te souhaite un bon week-end prolongé Cordialement JiheL

  [Opened] Re: DAO : Object of class mysqlDbResultSet

Reply #5 Posted by Yann.L on 08/14/2008 16:23

Je viens de lire la doc sur jZone, et je pense que tu devrais créer une classe liste qui hérite de jZone dans le répertoire de ton module kar

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

Dans la propriété $_tplname tu indique le nom du template a utiliser. Tu surcharge la méthode _prepareTpl(). Cette méthode est chargée d'initialiser l'objet jTpl instancié automatiquement par jZone et stocké dans la propriété _tpl. Le $this->getParam('liste')); te permet de récupérer le paramètre passer à la zone dans ton contrôleur par => $rep->body->assignZone('MAIN', 'liste', array('liste'=>$liste));

Ensuite dans ton contrôleur liste() de default.classic.php

 function liste(){
 
   $rep = $this->getResponse('html');
   $fact = jDao::get('kok~titre');
   $liste = $fact->findAll();
   $rep->bodyTpl = 'tontemplateprincipale';
   $rep->body->assignZone('MAIN', 'liste', array('liste'=>$liste));
   $rep->body->assignzone('MENU', 'kok~menu', array('choix'=>'2'));
   return $rep; 
 
 }

Et normalement ton template liste.tpl doit être bon

  [Opened] Re: DAO : Object of class mysqlDbResultSet

Reply #6 Posted by Jihel on 08/14/2008 16:37

Mille mercis Yann, ça fonctionne au poil !

Je vais garder ta réponse de côté, car j'avoue ne pas tout bien saisir pour l'instant, mais le résultat est là et je t'en remercie. Puis-je me permettre de te demander ce qui t'as fait penser à créer une classe pour obtenir le résultat ? Y a-t-il quelque chose de particulier que je voulais faire qui n'entre pas dans la logique de jelix ? Je suis curieux, mais c comme ça qu'on progresse... ENcore mreci pour ton aide cordiale Passe un bon week-end et au plaisir Cordialement JiheL

 
Page
  1. DAO : Object of class mysqlDbResultSet