Fabyo 66 Denunciar post Postado Novembro 6, 2008 nao precisa de view nesse caso view é quando você tem alguma coisa pra mostrar na tela, no caso de enviar dados via json você so usa o controller Compartilhar este post Link para o post Compartilhar em outros sites
Leandro Barral 1 Denunciar post Postado Novembro 6, 2008 Então como ficaria? eu desabilito o layout para o zend nao pedir uma view e....? todos os exemplos q eu vi ele printa na tela o json.. agora.. o formato como está saindo o json está correto? da para utilizar dessa maneira os dados para jogar no grid? Att, Leandro Barral []'.. Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Novembro 6, 2008 é o certo você so pode mandar os dados json, se tiver qualquer coisa a mais ou tags html isso da problema dai você so desativa a view e manda o json via controller $this->_helper->removeHelper('viewRenderer'); $this->_helper->layout->disableLayout(); Compartilhar este post Link para o post Compartilhar em outros sites
Leandro Barral 1 Denunciar post Postado Novembro 6, 2008 Ok fiz isso.. só estou printando por enquanto para ver o resultado gerado por ele.. está correto assim ou da maneira como está nao dá para ser usado? pois vi que em seus exemplos está sendo retornado diferente.. Abraço. Se puder me ajudar nisso.. tipo, eu pego rapido as coisas, porém preciso conseguir fazer pelo menos uma vez.. Att, Leandro Barral []'.. Compartilhar este post Link para o post Compartilhar em outros sites
Smr 0 Denunciar post Postado Novembro 6, 2008 O, baseado nos scripts que você mando, eu acho que é +/- isso: public function modfuncaoAction() { $this->_helper->removeHelper('viewRenderer'); $this->_helper->layout->disableLayout(); $tblFuncao = new Funcao(); // cria tabela $return = array(); $return['total'] = "2"; //simulação while($pegaDados = $tblFuncao->fetchAll()) { $return[] = $pegaDados;//Aqui eu não sei se vai funcionar, porque não sei se esse fetchAll retorna os campos como objeto. Mais se retornar da certo. } $json = Zend_Json::encode($return); echo $json; } Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Novembro 6, 2008 Uma dica para entender o grid baixe o exemplo e faça funcionar do jeito que ta sem auteraçoes dai você começa a entender e depois crie um seu do seu jeito mas sobre o json você so precisa passar nesse padrao echo '({"total":"'.$total.'","dados":'.json_encode($arr).'})'; onde dados no extjs: reader: new Ext.data.JsonReader({ root: 'dados' }, Compartilhar este post Link para o post Compartilhar em outros sites
Leandro Barral 1 Denunciar post Postado Novembro 6, 2008 Agora fiz assim: $return = array(); $i = 1; $total = "2"; //simulação foreach($this->dados as $dados) { $return['id'] = $dados->ID; $return['funcao'] = utf8_encode($dados->Funcao); $return['salario']= $dados->Salario; $i++; } $json = '({"total":"'.$total.'","dados":'.Zend_Json::encode($return).'})'; print_r($json); me retorna assim: ({"total":"2","dados":{"id":"2","funcao":"Ajudante Geral","salario":"570,27"}}) beleza pura.. só que só aparece o ultimo registro rodado no foreach se eu usar o incremento assim: $return = array(); $i = 1; $total = "2"; //simulação foreach($this->dados as $dados) { $return[$i]['id'] = $dados->ID; $return[$i]['funcao'] = utf8_encode($dados->Funcao); $return[$i]['salario']= $dados->Salario; $i++; } $json = '({"total":"'.$total.'","dados":'.Zend_Json::encode($return).'})'; print_r($json); me retorna assim: ({"total":"2","dados":{"1":{"id":"1","funcao":"Aux. de Conferente","salario":"598,16"},"2":{"id":"2","funcao":"Ajudante Geral","salario":"570,27"}}}) colocando esses numeros do incremento também.. (em negrito) ta dificil ehauehaue Compartilhar este post Link para o post Compartilhar em outros sites
Leandro Barral 1 Denunciar post Postado Novembro 6, 2008 Eu queria que retornasse assim: ({"total":"2","dados":{"id":"1","funcao":"asdasd","salario":"100,00"},{"id":"2","funcao":"Ajudante Geral","salario":"570,27"}}) Compartilhar este post Link para o post Compartilhar em outros sites
Leandro Barral 1 Denunciar post Postado Novembro 12, 2008 Será que alguém me desvenda esse mistério? ehaueha Abraço. Att, Leandro Barral []'.. Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Novembro 12, 2008 Entao mas é o certo mesmo do jeito que você quer, mas no proprio exemplo que você mostra eu testei aqui e funciona assim estranho estar ficando separado Compartilhar este post Link para o post Compartilhar em outros sites
Leandro Barral 1 Denunciar post Postado Novembro 12, 2008 aqui sai com os numeros do incremento separando.. ta dificil chegar no resultado: ({"total":"2","dados":{"id":"1","funcao":"asdasd","salario":"100,00"},{"id":"2","funcao":"Ajudante Geral","salario":"570,27"}}) =/ Compartilhar este post Link para o post Compartilhar em outros sites
Leandro Barral 1 Denunciar post Postado Novembro 12, 2008 opa! no forum do extjs consegui a solução, só para constar.. no controlador está assim: class JsonController extends Zend_Controller_Action { public function indexAction() { $this->_redirect('/index'); } public function modfuncaoAction() { $this->_helper->layout()->setLayout('layoutjson'); $tblFuncao = new Funcao(); $pegaDados = $tblFuncao->fetchAll(); $this->view->dados = $pegaDados; } } e na view assim: <?php $total = "2"; //simulação de total de resultados $retorno = array( 'total'=>$total, 'dados'=>$this->dados->toArray() ); $json = Zend_Json::encode($retorno); print($json); ?> agora estou tendo o resultado esperado: {"total":"2","dados":[{"ID":"1","Funcao":"Aux. de Conferente","Salario":"598,16"},{"ID":"2","Funcao":"Ajudante Geral","Salario":"570,27"}]} Agradeço a todos pela paciência e ajuda! Agora vou começar a postar as duvidas com o grid! xD Abraço. Att, Leandro Barral []'.. Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Novembro 13, 2008 Como ja tinha falado no caso de mandar dados via json com Zend nao precisa usar a view a view é quando você tem algo a mostrar para o usuario, agora você so ta transferindo dados entre paginas pra isso que serve isso $this->_helper->removeHelper('viewRenderer'); quando nao precisa usar a view. t+ Compartilhar este post Link para o post Compartilhar em outros sites
Leandro Barral 1 Denunciar post Postado Novembro 13, 2008 entao eu coloco esse código que atualmente está na view, no controller certo? (tirando apenas o print ali) porem fiz isso e utilizei o exemplo 2 do post, fazendo as adaptações necessárias para as minhas colunas e dados, e nem sequer aparece o grid... se quiser eu posto o código que estou utilizando.. Abraço. Att, Leandro Barral []'.. Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Novembro 13, 2008 pode postar testa ai: public function modfuncaoAction() { $this->_helper->removeHelper('viewRenderer'); $tblFuncao = new Funcao(); $pegaDados = $tblFuncao->fetchAll(); $total = "2"; //simulação de total de resultados $retorno = array( 'total'=>$total, 'dados' => $pegaDados->toArray() ); $json = Zend_Json::encode($retorno); $this->getResponse()->clearBody(); $this->getResponse()->setHeader('Content-Type', 'text/x-json'); $this->getResponse()->setBody($json); } Compartilhar este post Link para o post Compartilhar em outros sites
Leandro Barral 1 Denunciar post Postado Novembro 13, 2008 Fiz oque você falou com o código acima.. na view onde eu quero que apareça o gridEstou fazendo assim: <script type="text/javascript"> Ext.onReady(function(){ Ext.QuickTips.init(); function formatDate(value){ return value ? value.dateFormat('M d, Y') : ''; }; var fm = Ext.form; var cm = new Ext.grid.ColumnModel( [ { id: 'ID'; header: "Funcao", dataIndex: 'Funcao', width: 220, sortable: true, editor: new Ext.grid.GridEditor( allowBlank: false ) } }, { header: "Salario", dataIndex: 'Salario', width: 220, sortable: true, editor: new Ext.grid.GridEditor(new Ext.form.TextField( { allowBlank: false } )) } ] ); cm.defaultSortable = true; ds = new Ext.data.Store({ proxy: new Ext.data.HttpProxy({ url: '/cadsys/json/modfuncao/', method: 'POST' }), reader: new Ext.data.JsonReader({ root: 'dados', id: 'ID' }, [ {name: 'Funcao'}, {name: 'Salario'} ] ) }); var grid = new Ext.grid.EditorGrid('grid', { ds: ds, cm: cm, enableColLock:false }); grid.render(); ds.load(); }); </script> <div id="grid"></div> mas fica vazio, não aparece nada! Alguma sugestão?? Att, Leandro Barral []'.. Compartilhar este post Link para o post Compartilhar em outros sites
Fabyo 66 Denunciar post Postado Novembro 13, 2008 Entendi é que você ta usando a view do mesmo jeito quando você usa $this->_helper->removeHelper('viewRenderer'); ele nao renderiza a view o que eu faço geralmente é isso numa index eu chamo a pagina que ira me retornar os dados em json dai no seu caso você pode criar um metodo do controller e chamar ele assim nao vai ter erros Compartilhar este post Link para o post Compartilhar em outros sites
Leandro Barral 1 Denunciar post Postado Novembro 13, 2008 Não sei como proceder.. ja que não tem view.. como vou passar os dados? =S estou confuso nisso... Compartilhar este post Link para o post Compartilhar em outros sites
Smr 0 Denunciar post Postado Novembro 13, 2008 É só dar um "echo". Compartilhar este post Link para o post Compartilhar em outros sites
Leandro Barral 1 Denunciar post Postado Novembro 13, 2008 como o fabyo disse, nao utilizarei a view.. eu postei o js ali em cima.. e estou usando o ultimo código postado pelo fabyo.. nao retorna erro e nem mostra nada.. será que poderia me dar alguma solução baseada nos códigos que postei? (se não for pedir demais) Att, Leandro Barral []'.. [msn: leandro.barral@yahoo.com.br] Compartilhar este post Link para o post Compartilhar em outros sites