Bonjour,
Je voudrais créer un tableau Json dans ma requete du model au lieu du tableau normal.
Cmt faire ?
Version imprimable
Bonjour,
Je voudrais créer un tableau Json dans ma requete du model au lieu du tableau normal.
Cmt faire ?
Il faudrait utiliser la fonction json de php : http://www.php.net/manual/fr/function.json-encode.php
Par exemple dans votre classe row_ de votre table par exemple row_article
ajoutez une méthode getJson()
Code:
1
2
3
4 public function getJson(){ return json_encode($this); }
Note: il y a également une base de donnée "nosql" qui stoque les donnees en json ;)
En fait je voudrais utiliser la jquery dataTables,
pour les js de jquery c ok je les aient mis dans template1 de public.
Le but est de créer un tableau Json pour lister les enregs en dynamique en mettant dans le <script> sAjaxSource: "le nom du tableau"
Dans le model row de account
-----------------
public function getJson(){
return json_encode($this);
}
Dans le main de account
-----------------------
public function _listJson(){
$oAccount=model_account::getInstance()->getJson();
}
Dans le listJson
--------------
il faut mettre quoi dans sAjaxSource ?
il devrait avoir le tableau Json
<script>
$(document).ready(function() {
var oTable = $('#example').dataTable( {
"bProcessing": true,
"sAjaxSource": "?????"
} );
} );
</script>
<div id="dynamic">
<table cellpadding="0" cellspacing="0" border="0" class="display" id="example">
<thead>
<tr>
<th width="20%">Id</th>
<th width="25%">Login</th>
<th width="25%">Pass</th>
<th width="15%">Groupe</th>
</tr>
</thead>
<tbody>
</tbody>
<tfoot>
<tr>
<th>Id</th>
<th>Login</th>
<th>Pass</th>
<th>Groupe</th>
</tr>
</tfoot>
</table>
</div>
Ce que j'indiquait c'était pour convertir un enregistrement (objet) en json
Ce que vous souhaitez vous c'est transformer tout le tableau en json
Dans ce cas la, faites votre methode "requete" qui vous retournera vos enregistrements (coté controller: dans le fichier main.php)
Par exemple dans votre methode _list()
Code:
1
2
3
4
5
6
7
8
9 public function _listJson(){ //on recupere normalement le tableau d'enregistrements $tAccount=model_account::getInstance()->findAll(); $oView=new _view('votreModule::laVue'); $oView->sJsonAccount=json_encode($tAccount); }
Et dans votre vue: votreModule/view/laVue.php
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 <script> $(document).ready(function() { var oTable = $('#example').dataTable( { "bProcessing": true, "sAjaxSource": "<?php echo $this->sJsonAccount?>" } ); } ); </script> <div id="dynamic"> <table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> <thead> <tr> <th width="20%">Id</th> <th width="25%">Login</th> <th width="25%">Pass</th> <th width="15%">Groupe</th> </tr> </thead> <tbody> </tbody> <tfoot> <tr> <th>Id</th> <th>Login</th> <th>Pass</th> <th>Groupe</th> </tr> </tfoot> </table> </div>
je n 'ai pas d"erreur mais j'ai une page blanche !!!
il existe des en regs dans ma table
manquait le $this->oLayout->add('main',$oView);
mais avec un <?php echo $this->sJsonAccount?>
j'obtiens cela : [{},{}]
il existe 2 enregs mais la chaine est vide
En regardant la documentation, vous pouvez faire ainsi:
Par exemple dans votre methode _list()
Code:
1
2
3
4
5
6
7
8
9 public function _listJson(){ //on recupere normalement le tableau d'enregistrements $tAccount=model_account::getInstance()->findAll(); $oView=new _view('votreModule::laVue'); $oView->tAccount=$tAccount; }
Et dans votre vue: votreModule/view/laVue.php
[/QUOTE]Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 <script> $(document).ready(function() { $('#dynamic').dataTable(); } ); </script> <div id="dynamic"> <table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> <thead> <tr> <th width="20%">Id</th> <th width="25%">Login</th> <th width="25%">Pass</th> <th width="15%">Groupe</th> </tr> </thead> <tbody> <?php foreach($this->tAccount as $oAccount):?> <tr> <td><?php echo $oAccount->champId?></td> <td><?php echo $oAccount->champLogin?></td> <td><?php echo $oAccount->champPass?></td> <td><?php echo $oAccount->champGroupe?></td> </tr> <?php endforeach;?> </tbody> <tfoot> <tr> <th>Id</th> <th>Login</th> <th>Pass</th> <th>Groupe</th> </tr> </tfoot> </table> </div>
c n'est pas terrible, le tri et pagination ne marche pas.
si je fais un print_r de $this->account :
Array ( [0] => row_account Object ( [sClassModel:protected] => model_account [_bChooseUpdate:abstract_row:private] => 1 [_tProperty:protected] => Array ( [id] => 3 [login] => admin [pass] => 9d4e1e23bd5b727046a9e3b4b7db57bd8d6ee684 [groupe_id] => 2 ) [_tPropertyToUpdate:protected] => ) [1] => row_account Object ( [sClassModel:protected] => model_account [_bChooseUpdate:abstract_row:private] => 1 [_tProperty:protected] => Array ( [id] => 4 [login] => login1_r [pass] => 9d4e1e23bd5b727046a9e3b4b7db57bd8d6ee684 [groupe_id] => 1 ) [_tPropertyToUpdate:protected] => ) ) 1
pk il exsite un array'0) avec row_account Object ( [sClassModel:protected] ?
le json doit etre formaté comme cela: exemple
{ "aaData": [
{
"id": "1",
"login": "login1",
"pass": "pass1",
"groupe_id": "1"
},
{
"id": "2",
"login": "login2",
"pass": "pass2",
"groupe_id": "2"
}
] }
2 choses:
Dans la classe modèle
Code:
1
2 remplacez findMany par findManySimple
Dans le fichier main:
Code:
1
2
3
4
5
6
7
8
9 public function _listJson(){ //on recupere normalement le tableau d'enregistrements $tAccount=model_account::getInstance()->findAll(); $oView=new _view('votreModule::laVue'); $oView->sJsonAccount=json_encode(serialize($tAccount)); }
Les enregs ne s'affichent pas.
avec echo $this->sJsonAccount, j'ai ajouté le aaData
{ "aaData": "a:2:{i:0;O:8:\"stdClass\":4:{s:2:\"id\";s:1:\"3\";s:5:\"login\";s:5:\"admin\";s:4:\"pass\";s:40:\"9d4e1e23bd5b727046a9e3b4b7db57bd8d6ee684\";s:9:\"groupe_id\";s:1:\"2\";}i:1;O:8:\"stdClass\":4:{s:2:\"id\";s:1:\"4\";s:5:\"login\";s:8:\"login1_r\";s:4:\"pass\";s:40:\"9d4e1e23bd5b727046a9e3b4b7db57bd8d6ee684\";s:9:\"groupe_id\";s:1:\"1\";}}" }
pk il ajoute des stdClass et des \ ?
c'est une serialisation d'objets simple: et stdclass c'est le nom de la classe simple créé par pdo
En regardant la documentation de database jquery: "sAjaxSource" doit contenir l'adresse d'une page retournant le json
J'ai testé la solution qui consiste à creer le tableau en php/html "normalement" puis d'appeler simplement
Code:
1
2
3
4
5
6 <script> $(document).ready(function() { $('#example').dataTable(); } ); </script>
et ça fonctionne très bien ;)
Et c'est ce que fait la page de demonstration: http://datatables.net/release-datata...ro_config.html
En regardant le code source, ils ont écrit tout le tableau en html contenant toutes les lignes, puis ils appellent la fonction jquery pour le rendre interactif
Par contre, attention: il faut bien mettre en id example et non dynamic (je me suis trompé précédemment)
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 <script> $(document).ready(function() { $('#example').dataTable(); } ); </script> <div id="dynamic"> <table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> <thead> <tr> <th width="20%">Id</th> <th width="25%">Login</th> <th width="25%">Pass</th> <th width="15%">Groupe</th> </tr> </thead> <tbody> <?php foreach($this->tAccount as $oAccount):?> <tr> <td><?php echo $oAccount->champId?></td> <td><?php echo $oAccount->champLogin?></td> <td><?php echo $oAccount->champPass?></td> <td><?php echo $oAccount->champGroupe?></td> </tr> <?php endforeach;?> </tbody> <tfoot> <tr> <th>Id</th> <th>Login</th> <th>Pass</th> <th>Groupe</th> </tr> </tfoot> </table> </div>
super merci, bonne soirée
Pas de soucis, à votre dispo si d'autres questions ;)