Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Fabyo

DataGrid completo

Recommended Posts

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

é 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.