Ir para conteúdo

POWERED BY:

Arquivado

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

maike

Data Grid - Busca não funciona

Recommended Posts

Sou iniciante, peguei um exemplo de grid na net e modifiquei pra se adequar ao que eu queria, o resultado é esse : http://www.bma.com.br/suporte/assistec/soaurce/

 

O problema é que a busca não funciona, alguem tem alguma ideia do q possa ser?

 

Php

<?php
include_once("JSON/JSON.php");
$json = new Services_JSON();

mysql_connect("localhost", "user", "senha"); 
mysql_select_db("banco");

$inicio = isset($_POST['start']) ? $_POST['start'] : 0;
$limite = isset($_POST['limit']) ? $_POST['limit'] : 24;

$rs	= mysql_query("SELECT * FROM assis_tec");
$total = mysql_num_rows($rs);
$rs	= mysql_query("SELECT * FROM assis_tec LIMIT $inicio, $limite");

$arr = array();
while($obj = mysql_fetch_object($rs))
{
	$arr[] = $obj;
}

echo $cb . '({"total":"' . $total . '","resultado":' . $json->encode($arr) . '})';

?>

ja coloquei com o where, sem e fica tudo a mesma coisa, nao busca nada

 

o codigo js é esse

 

Ext.onReady(function(){
				Ext.ux.menu.RangeMenu.prototype.icons = {
		  gt: 'img/greater_then.png', 
		  lt: 'img/less_then.png',
		  eq: 'img/equals.png'
				};
	Ext.ux.grid.filter.StringFilter.prototype.icon = 'img/find.png';
	
	
	var	myRecordObj = Ext.data.Record.create([
						{name:'razao_social'}, 
						{name:'numserie'}, 
						{name:'modelo'}, 
						{name:'nfiscal_e'}, 
						{name:'cnpj'},
						{name:'numos'},
						{name:'numosaut'},
						{name:'nfiscal_s'},
						{name:'correio'}
						
	]);

	ds = new Ext.data.GroupingStore({
		proxy: new Ext.data.HttpProxy({
			url:'listar_usuarios.php',
			method: 'POST'
		}),   

		reader: new Ext.data.JsonReader({
			id:   'id',
			totalProperty: 'total',
			root: 'resultado'
		},
		myRecordObj),   
		sortInfo: {field: 'razao_social', direction: 'ASC'},
		remoteSort: false
	});   
	
	var filters = new Ext.ux.grid.GridFilters({filters:[
						{type: 'string',  dataIndex: 'razao_social'},
						{type: 'string',  dataIndex: 'numserie'},
						{type: 'string', dataIndex: 'modelo'},
						{type: 'string',  dataIndex: 'nfiscal_e'},
						{type: 'string', dataIndex: 'cnpj'},
						{type: 'string', dataIndex: 'numos'},
						{type: 'string', dataIndex: 'numosaut'},
						{type: 'string', dataIndex: 'nfiscal_s'},
						{type: 'string', dataIndex: 'correio'}
				]});
				
	var cm = new Ext.grid.ColumnModel([{
					dataIndex: 'razao_social',
					header: 'Razao',
					width: 250
				}, {
				  dataIndex: 'numserie',
				  header: 'Numero de Serie',
				  width: 95
				}, {
				  dataIndex: 'modelo',
				  header: 'Modelo',
				  width: 95
				}, {
				  dataIndex: 'nfiscale',
				  header: 'Nota Fiscal E',
				  width: 85
				}, {
				  dataIndex: 'cnpj',
				  header: 'CNPJ',
				  width: 115
				}, {
				  dataIndex: 'numos',
				  header: 'Numero O.S.',
				  width: 85
				}, {
				  dataIndex: 'numosaut',
				  header: 'Numero O.S. Autorizada',
				  width: 130
				}, {
				  dataIndex: 'nfiscal_s',
				  header: 'Nota Fiscal S',
				  width: 73
				}, {
				  dataIndex: 'correio',
				  header: 'Correio',
				  width: 53  
				}]);
				cm.defaultSortable = true;
				
	var grid = new Ext.grid.GridPanel({
		  id: 'example',
		  ds: ds,
		  cm: cm,
					enableColLock: false,
					loadMask: true,
					view: new Ext.grid.GroupingView(),
					plugins: filters,
					height:560,
					  width:985,
					
					el: 'grid-example',
					
			bbar: new Ext.PagingToolbar({
			store: ds,
			pageSize: 24
		  })
				});
				grid.render();
				
				ds.load({params:{start: 0, limit: 24}});
		});

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso é facil, mas se voce quer fazer a pesquisa via PHP voce precisa mecher no seu codigo, ja se for pesquisar no datagrid só ver onde voce errou

 

eu prefiro fazer a pesquisa no banco, dai pra isso voce precisa montar o arquivo php com os dados da pesquisa

 

por exemplo quando voce faz uma pesquisa ele envia os campos:

 

dir

filter

limit

sort

start

 

o filter é um array com os seguintes itens:

 

filtro[]["data"]["comparison"]

filtro[]["data"]["type"]

filtro[]["data"]["value"]

filtro[]["field"]

 

o campo comparison tem as seguintes opções

 

'GT' => '>'

'LT' => '<',

'GTE' => '>=',

'LTE' => '<=',

'EQ' => '=',

'NEQ' => '!=',

'LIKE' => 'LIKE',

'IN' => 'IN',

'NOTIN' => 'NOT IN'

 

por isso o arquivo php vai ficar um pouco complicado, mas se quiser eu te ajudo a montar ele

 

qualquer duvida pode postar que de EXTjs eu entendo bem.

Compartilhar este post


Link para o post
Compartilhar em outros sites

voi precisar de sua ajuda sim, acho q entendi como funciona, o problema é montar esse php agora

 

opa, achei dois codigos aqui

 

DatabaseFilter

<?php


final class Direction {
	const ASC = 0;
	const DESC = 1;
}

final class Comparison {
	
public static function GT(){return new Comparison(">");}
public static function LT(){return new Comparison("<");}
public static function GTE(){return new Comparison(">=");}
public static function LTE(){return new Comparison("<=");}
public static function EQ(){return new Comparison("=");}
public static function NEQ(){return new Comparison("!=");}
public static function LIKE(){return new Comparison("LIKE");}
public static function IN(){return new Comparison("IN");}
public static function NOTIN(){return new Comparison("NOT IN");}

	
	private $sql;
	public function __construct($sql){
		$this->sql = $sql;
	}
	
	
	public static function valueOf($string){
		
		$methods = array('GT', 'LT', 'GTE', 'LTE', 'EQ', 'NEQ', 'LIKE', 'IN', 'NOTIN');
		$string = strtoupper($string);
		if(in_array($string, $methods))
			return Comparison::$string();
		
		throw new Exception("comparison ".$string." not found");
	}
	
	public function __toString(){
		return $this->sql;
	}
}

abstract class WhereClause {
	public $field;
	public /*Comparison*/ $comparison;
	public $value;
	
	public function __construct($field, $value, Comparison $comparison) {
			$this->field	  = $field;
			$this->value	  = $value;
			$this->comparison = $comparison;
	}
		
	public abstract function setFieldValue(Statement $stmt, $paramOffset);	
}


class ListWhereClause extends WhereClause {
		public function __construct($field, Array $value, $inclusive){
			parent::__construct($field, $value, $inclusive ? Comparison::IN() : Comparison::NOTIN());
		}
		
		public function __toString(){
			if(count($this->value) > 0){
				
				$string = "";
				$string.= $this->field;
				$string.= ' ';
				$string.=$this->comparison;
				$string.=" (";
				for($i=0, $len=count($this->value); $i<$len; $i++){
					$string.= "?";
					
					if($i < $len - 1)
						$string.=',';
				}
				$string.=')';
				
				return $string;
			} else {
				return "0";
			}
		}
		
		public function setFieldValue(Statement $stmt, $paramOffset) {
			foreach($this->value as $val)
				$stmt->setString($paramOffset++, $val);			
			return $paramOffset;
		}
	}

	
  class NumericWhereClause extends WhereClause {
		public function __construct($field, $value, Comparison $comp){
			parent::__construct($field, $value, $comp);
		}
		
		public function __toString(){
			return $this->field . " " . $this->comparison . " ?"; 
		}
		
		public function setFieldValue(Statement $stmt, $paramOffset){
			$stmt->setFloat($paramOffset++, $this->value);			
			return $paramOffset;
		}
	}


class StringWhereClause extends WhereClause{
		public function __construct($field, $value, Comparison $comparison) {
			parent::__construct($field, $value, $comparison);
		}
		
		public function __toString(){
			return $this->field . " " . $this->comparison . " ?"; 
		}
		
		public function setFieldValue(Statement $stmt, $paramOffset) {
			$stmt -> setString($paramOffset++, '%' . $this->value . '%');			
			return $paramOffset;
		}
	}
	
	
class DateWhereClause extends WhereClause {
		public function __construct($field, $value, Comparison $comp){
			parent::__construct($field, $value, $comp);
		}
		
		public function __toString(){
			switch($this->comparison->__toString()){
				case ">": case ">=":
				case "<": case "<=":
					return "TIMESTAMPDIFF(DAY, ?, " . $this->field . ") " . $this->comparison . " 0";
				case "=":
					return "DATE_FORMAT(" . $this->field . ", '%Y-%m-%d') = DATE_FORMAT(?, '%Y-%m-%d')";
				default:
					throw new RuntimeException("Invalid comparison type for date field: " . $comparison);
			}
		}
		
		public function setFieldValue(Statement $stmt, $paramOffset)  {
			$stmt -> setDate($paramOffset++, $this->value);			
			return $paramOffset;
		}
	}
	
	
class BooleanWhereClause extends WhereClause {
		public function __construct($field, $value) {
			parent::__construct($field, $value, Comparison::EQ());
		}
		
		public function __toString(){
			return $this->field . " = ?";
		}
		
		public function setFieldValue(Statement $stmt, $paramOffset)  {
			$stmt->setBoolean($paramOffset++, $this->value);			
			return $paramOffset;
		}
	}
	
class NullWhereClause extends WhereClause {
		public function __construct($field, $isNull) {
			parent::__construct($field, $isNull, Comparison::EQ());
		}
		
		public function __toString(){
			return $this->value ? $this->field . " IS NULL" : " IS NOT NULL";
		}
		
		public function setFieldValue(Statement $stmt, $paramOffset)  {
			return $paramOffset;
		}
	}	

	
 class DatabaseFilter {
		
	public /*List<WhereClause>*/ $where;
	public /*String*/	$orderField;
	public /*Direction*/ $orderDir;
	public $offset;
	public $limit;
	
}
?>

 

ExtTableFilter

<?php


class ExtTableFilter extends DatabaseFilter {
	//private static final DateFormat DF = SimpleDateFormat.getDateInstance(DateFormat.SHORT);
	
	public function __construct(Request $request, $offsetParam="start", $limitParam="limit", $sortParam="sort", $sortDirParam="dir", $filtersParam="filters")  {
		$this->offset	 = $offsetParam != null && $request->getParameter($offsetParam) != null ? intval($request->getParameter($offsetParam)) : -1;
		$this->limit	  = $offsetParam != null && $request->getParameter($limitParam) != null ? intval($request->getParameter($limitParam)) : -1;
		
		$this->orderField = $request->getParameter($sortParam);
		$this->orderDir   = $request->getParameter($sortDirParam) != null ? $request->getParameter($sortDirParam) : null;		
		$this->parseWhereClause($request);
	}

	private function parseWhereClause(Request $request)  {
		
		$this->where = array();
				
		
		$i = 0;
		$filters = $request->getParameter("filter");
		if(count($filters) > 0){
			while(isset($filters[$i]) && isset($filters[$i]['field'])){
				$filter = $filters[$i];
				
				
				$field = $filter['field'];
				$type  = isset($filter['data']['type'])?$filter['data']['type']:null;
				$value = isset($filter['data']['value'])?$filter['data']['value']:null;
				
				if("string" == $type){
					$this->where[]= (new StringWhereClause($field, $value, Comparison::LIKE()));
				} 
				else if("list" == $type){
					
					$value = explode(',', $value);
					

					$this->where[]= (new ListWhereClause($field, $value, true));
				}
				else if("numeric" == ($type)) {
					$comp = Comparison::valueOf(strtoupper($filter['data']['comparison']));
					$this->where[]= (new NumericWhereClause($field, floatval($value), $comp));
				} else if("date" == $type){
					$comp = Comparison::valueOf(strtoupper($filter['data']['comparison']));
					$this->where[]= (new DateWhereClause($field, $value, $comp));
				} else if("boolean" == ($type)){
					$this -> where[]= (new BooleanWhereClause($field, intval($value)==1 || $value == 'true'));
				} else if("null" == ($type)){
					$this -> where[]= (new NullWhereClause($field, intval($value)==1));
				}
				
				
				$i++;
			}
		}
	}
}
?>

agora oq eu devo fazer?

Compartilhar este post


Link para o post
Compartilhar em outros sites

isso mesmo esses arquivos ja estao prontos pra usar se voce pegou um exemplo do datagrid pronto

só editar os dados do banco e montar as colunas nao tem segredo e ira funcionar tudo de acordo, só tome cuidado pra nao errar em alguma coisa, que ira funcionar seguindo o exemplo

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas nao entendo direito, dessa forma ele nao precisa das strings de conexão? você nao teria algum exemplo do php montado pra eu me basear?

 

obrigado

Compartilhar este post


Link para o post
Compartilhar em outros sites

Precisa sim, só baixar o phpFilters.zip e ver os exemplos das paginas PHP

 

ele nao precisa de string de conexao quando ele pesquisa nas paginas ja carregadas do datagrid

 

mas como as vezes um banco de dados tem muitos registros fica inviavel carregar tudo via javascript, fica muito pesado

 

entao o certo é carregar um pouco e pesquisar o resto via PHP/Mysql

Compartilhar este post


Link para o post
Compartilhar em outros sites

então mas nos exemplos não tem a string de conexão, devo adiciona-la? no meu js eu devo chamar os dois php? você tem msn?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entao os exemplos que passei, estao completos e funcionando certo, basta tomarem cuidado na hora de trocar o banco e os campos, pois se rodarem o exemplo do jeito que ele foi baixado verao que ele ta funcionando certo

 

 

Entao os exemplos que passei, estao completos e funcionando certo, basta tomarem cuidado na hora de trocar o banco e os campos, pois se rodarem o exemplo do jeito que ele foi baixado verao que ele ta funcionando certo

Compartilhar este post


Link para o post
Compartilhar em outros sites

então, instalei aqui o grid-php pra testar e ver se tava tudo funcionando mesmo, ele só busca na página ativa, nao busca no banco, oq eu to fazendo errado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

então fabyo, mudei pra false e agora ele não faz a busca nem na página ativa

 

this.filters = new Ext.ux.grid.GridFilters({
				local:true,
				filters:[
					{dataIndex: primaryKey,   type: 'numeric'},
					{dataIndex: 'razao_social', 	  type: 'string'},
					{dataIndex: 'numserie', 	  type: 'numeric'}
				]
			});

Compartilhar este post


Link para o post
Compartilhar em outros sites

Entao agora só debugar e ver o que ta acontecendo

 

com o firebug, voce ve se os campos estao sendo enviados, e o que o datagrid ta recebendo de retorno da pesquisa

 

se tiver como você colocar o seu exemplo online eu consigo debugar pra você, senao você vai ter que achar o erro ai

Compartilhar este post


Link para o post
Compartilhar em outros sites

filter[0][data][type] string

filter[0][data][value] alcoa

filter[0][field] company

limit 10

start 0

task readStock

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.