Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1 2
Oula qu'est-ce que c'est que cette adresse...
http://127.0.0.1/norc2/public/ <= là il vaudrait mieux faire un VHost qui pointe directement là dessus (même si ce n'est pas forcément un problème, vous risquez d'avoir des erreurs d'affichage des choses se trouvant dans /public.
perimetre/get-data/format/json <= là je suis d'accord
?_search=false&nd=1329468227069&rows=10&page=1&sidx=Num_Perimetre&sord=asc <= c'est quoi ? Avec le routeur par défaut, les routes sont les suivantes :
- :module/:coontroller/:action/*
- :controller/:action/*
L'étoile signifie que vous pouvez ajouter /paramName/paramValue autant de fois que vous voulez à la fin de l'url.
http://127.0.0.1/norc2/public/perimetre … e/sord/asc
Ceci dit normalement ça devrait aussi fonctionner avec les paramètres suivant le ?
Avez vous essayé de vous rendre sur http://127.0.0.1/norc2/public/perimetre … ormat/json ?
Hors ligne
J'ai l'erreur suivante :
Message: Action "getData" does not exist and was not trapped in __call()
Hors ligne
Vous n'avez pas créé getDataAction() dans PerimetreController ?
Hors ligne
j'avais fait une faute de frapper maintenant j'ai une autre erreur
Fonction getDataAction()
[lang=php] public function getDataAction() { $this->_helper->layout->disableLayout(); $page=$this->_request->getParam("page",1); $limit=$this->_request->getParam("rows"); $sidx=$this->_request->getParam("sidx",1); $sord=$this->_request->getParam("sord"); $tabela = new Application_Model_DbTable_Perimetre(); $perimetre = $tabela->fetchAll(); $count = count( $perimetre ); if( $count >0 ) { $total_pages = ceil($count/$limit); } else { $total_pages = 0; } if ($page > $total_pages) $page = $total_pages; $perimetre = $tabela->fetchAll(null, "$sidx $sord", $limit, ($page*$limit-$limit)); $responce->page = $page; $responce->total = $total_pages; $responce->records = $count; $i=0; foreach($perimetre as $row) { $responce->rows[$i]['id']=$row->Num_Perimetre; $responce->rows[$i]['cell']=array( $row->Num_Perimetre, $row->Num_Paire, $row->Assignation, $row->Localisation ); $i++; } $this->view->donnees = $responce; }
et j'ai une autre erreur :
Exception information:
Message: SQLSTATE[42S22]: Column not found: 1054 Unknown column '1 ' in 'order clause'
Stack trace:
#0 C:\Program Files\Zend\ZendServer\share\ZendFramework\library\Zend\Db\Statement.php(300): Zend_Db_Statement_Pdo->_execute(Array)
#1 C:\Program Files\Zend\ZendServer\share\ZendFramework\library\Zend\Db\Adapter\Abstract.php(479): Zend_Db_Statement->execute(Array)
#2 C:\Program Files\Zend\ZendServer\share\ZendFramework\library\Zend\Db\Adapter\Pdo\Abstract.php(238): Zend_Db_Adapter_Abstract->query(Object(Zend_Db_Table_Select), Array)
#3 C:\Program Files\Zend\ZendServer\share\ZendFramework\library\Zend\Db\Table\Abstract.php(1529): Zend_Db_Adapter_Pdo_Abstract->query(Object(Zend_Db_Table_Select))
#4 C:\Program Files\Zend\ZendServer\share\ZendFramework\library\Zend\Db\Table\Abstract.php(1344): Zend_Db_Table_Abstract->_fetch(Object(Zend_Db_Table_Select))
#5 C:\Program Files\Zend\Apache2\htdocs\norc2\application\controllers\PerimetreController.php(30): Zend_Db_Table_Abstract->fetchAll(NULL, '1 ', NULL, 0)
#6 C:\Program Files\Zend\ZendServer\share\ZendFramework\library\Zend\Controller\Action.php(516): PerimetreController->getDataAction()
#7 C:\Program Files\Zend\ZendServer\share\ZendFramework\library\Zend\Controller\Dispatcher\Standard.php(295): Zend_Controller_Action->dispatch('getDataAction')
#8 C:\Program Files\Zend\ZendServer\share\ZendFramework\library\Zend\Controller\Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
#9 C:\Program Files\Zend\ZendServer\share\ZendFramework\library\Zend\Application\Bootstrap\Bootstrap.php(97): Zend_Controller_Front->dispatch()
#10 C:\Program Files\Zend\ZendServer\share\ZendFramework\library\Zend\Application.php(366): Zend_Application_Bootstrap_Bootstrap->run()
#11 C:\Program Files\Zend\Apache2\htdocs\norc2\public\index.php(25): Zend_Application->run()
#12 {main}
Hors ligne
On dirait bien que $sidx vaut 1, or il faudrait que ce soit une string correspondant à un nom de colonne de ta table...
D'ailleurs la séparation des données et des controlleurs est moyenne ici...
Ceci dit, tu peux utiliser des Zend_Debug::dump($value); pour afficher tes valeurs, éventuellement suivi d'un vieux exit; pour ne pas passer au rendering de la vue Ca te permettrait de voir si tes valeurs sont bien affectées !
Hors ligne
Tu ne connaîtrais pas un tutoriel qui pourrait m'éclaircir car là je suis perdu.
Hors ligne
Non, mais de toutes façons là c'est ton algo qui est pas bon, donc il ne peux pas y avoir de tutoriel pour ce point...
Tu es d'accord que tu as des paramètres passés en url à ton action.
Quand tu les récupères, tu leur assigne une valeur par défaut si ils ne sont pas passés. Cette valeur est à 1 pour sidx : $sidx=$this->_request->getParam("sidx",1);
Or, quelques lignes plus bas, tu utilises le paramètre order de ton fetchAll : $sidx $sord. Cette clause est de la form column ASC|DESC. On est d'accord ?
Si $sidx est égal à 1, on a 1 et sord n'a pas de valeur par défaut. Donc au lieu de column ASC|DESC on a seulement 1...
Il faut donc changer tes valeurs par défaut
Hors ligne
j'ai remplacé par ceci
[lang=php] $this->_helper->layout->disableLayout(); $page=$this->_request->getParam("page",1); $limit=$this->_request->getParam("rows",10); $sidx=$this->_request->getParam("sidx",'Num_Perimetre'); $sord=$this->_request->getParam("sord",'ASC'); $tabela = new Application_Model_DbTable_Perimetre(); $perimetre = $tabela->fetchAll();
Plus d'erreur mais rien se s'affiche
Hors ligne
Fait un Zend_Debug::dump($perimetre); exit; de sorte à voir si tu as des résultats dedans.
Tu peux aussi le tester sur responce après. Par contre enlève les bien une fois le test effectué.
Sinon, tu as quoi dans la vue associée ?
Hors ligne
$responce et $perimetre sont remplies avec mes valeurs
Dans mon controller :
[lang=php] <?php class PerimetreController extends Zend_Controller_Action { public function indexAction() { } public function getDataAction() { $this->_helper->layout->disableLayout(); $page=$this->_request->getParam("page",1); $limit=$this->_request->getParam("rows",10); $sidx=$this->_request->getParam("sidx",'Num_Perimetre'); $sord=$this->_request->getParam("sord",'ASC'); $tabela = new Application_Model_DbTable_Perimetre(); $perimetre = $tabela->fetchAll(); //echo Zend_Debug::dump($page); //echo Zend_Debug::dump($limit); //echo Zend_Debug::dump($sidx); //echo Zend_Debug::dump($sord); //echo Zend_Debug::dump($perimetre); $count = count( $perimetre ); if( $count >0 ) { $total_pages = ceil($count/$limit); } else { $total_pages = 0; } if ($page > $total_pages) $page = $total_pages; $perimetre = $tabela->fetchAll(null, "$sidx $sord", $limit, ($page*$limit-$limit)); $responce->page = $page; $responce->total = $total_pages; $responce->records = $count; $i=0; foreach($perimetre as $row) { $responce->rows[$i]['id']=$row->Num_Perimetre; $responce->rows[$i]['cell']=array( $row->Num_Perimetre, $row->Num_Paire, $row->Assignation, $row->Localisation, ); $i++; } // echo Zend_Debug::dump($responce); $this->view->donnees = $responce; echo Zend_Debug::dump($this->view->donnees); } }
Dans view/scripts/index.phtml
[lang=phtml] <?php echo $this->jQuery(); echo $this->headLink()->prependStylesheet($this->baseUrl().'/css/ui-lightness/jquery-ui-1.8.17.custom.css'); ?> <table id="tbl-perimetre"></table> <div id="pg-perimetre"></div> <script type="text/javascript"> $("#tbl-perimetre").jqGrid({ url:'<?php echo $this->url(array('action'=>'get-data', 'format'=>'json')); ?>', datatype: "json", mtype: 'GET', colNames:['Num_Perimetre','Num_Paire','Assignation','Localisation','Zone_Unope','Region','Province_UP2011','Province','Cercle','Commune','Douar','DPA','Centre','Com_Historique','Com_Sondage','Data_Agri2010','Data_Org2010'], colModel:[ {name:'Num_Perimetre',index:'Num_Perimetre', width:75, sorttype:"int", align:"center"}, {name:'Num_Paire',index:'Num_Paire', width: 100, editable: true,align:"center"}, {name:'Assignation',index:'Assignation', width: 100, align:"center", editable: true}, {name:'Localisation',index:'Localisation', width: 100, editable: true,align:"center"}, ], rowNum:10, rowList:[10,20,30], pager: '#pg-perimetre', sortname:"Num_Perimetre", viewrecords: true, sortorder: "ASC", caption:"Perimetre" }); $("#tbl-perimetre").jqGrid('navGrid','#pg-perimetre',{edit:true,add:true,del:true,search:true}); </script>
et dans le view/scripts/get-data.phtml
[lang=phtml] <?$this->json($this->donnees);?>
Dernière modification par audrey (17-02-2012 10:52:41)
Hors ligne
Il faudrait mettre un echo devant l'aide de vue, car celle-ci renvoi une chaine, elle ne peut pas afficher les données par elle même !
[lang=phtml]<?php echo $this->json($this->donnees);?>
Prennez l'habitude d'utiliser correctement la balise PHP et de ne pas utiliser les short tags (<?php au lieu de <?), car certains hébergeurs (notamment mon serveur personnel) ont la directive short tags à off...
Hors ligne
Ah les données s'affiche merci pour le temps accordé.
Hors ligne
Je te conseille de faire un résumé des différentes étapes utilisées, voir faire un tutoriel que tu pourrais poster ici pour les prochains !
Hors ligne
Il me reste plus qu'à faire fonctionner les boutons et c'est tout bon.
Hors ligne
Par contre mon tableau ne s'affiche pas correctement, les en-tete ne sont pas aligné avec mes colonne est-ce normal ?
Hors ligne
Je n'ai jamais utilisé le plugin jquery que vous avez choisi, je n'en sais donc rien...
Sur les exemples du site, tout est bien aligné... Es-tu sur que ton tableau est bien formé (même nombre de colonnes et d'entêtes...) ?
As-tu la possibilité de mettre le site en ligne pour que je puisse le débugger facilement ?
Hors ligne
Non je travaille en local.
Hors ligne
Après là ça reste du HTML/JS on ne peut plus classique, vous devriez être à même de vous débrouiller...
Juste pour info, vous bossez où là ? Vous êtes en stage ? Vous avez fait quoi comme études ?
Hors ligne
Je suis en apprentissage mais c'est la première fois que j'utilise un framework et du Jquery.
Hors ligne
On apprends vite, là c'est le début donc c'est un peu violent, mais ça viendra progressivement
Hors ligne
j'espère bien.
Hors ligne
Bonjour Audrey, je ne vais pas pouvoir t'aider sur la partie javascript par contre je suis surpris de voir l'url que tu remontes.
Pour te simplifier les choses pourquoi ne pas modifier ton fichier hosts pour y affecter un domain local du genre : monapplication.local
Et dans ta configuration apache ajouter un virtualhost sur le nom de domaine : monapplication.local et le faire directement pointer sur le dossier public de ton application.
Du coup dans ton navigateur, monapplication.local sera équivalent à 127.0.0.1/norc2/public/
Hors ligne
Pages: 1 2