PHP-ből Extjs-be [MEGOLDVA]

Üdv!

A problémám a következő van nekem egy html oldalam, ahol van egy ext-js script ami, egy gridbe megjelenít egy adatbázist. A lépések ugye úgy jönnek hogy elkezd betöltődni a html oldal a script lefut, intéz egy kérést, kap egy eredményt, megjeleníti. Konkrétan itt megy el a kérés


 var store = new Ext.data.JsonStore({
		totalProperty: 'total',
		root: 'results',
    	        url: 'data.php',
    	        remoteSort: true,
                fields: [
           {name: 'nk'},
           {name: 'name'},
           {name: 'state'},
        ]
    });
    store.setDefaultSort('name', 'ASC');


    store.load({params:{start:0, limit:25}});

data.php


<?php
	$conn = mysql_connect("localhost", "user", "pw") or die (mysql_error ());
	$db = mysql_select_db ("database_db") or die (mysql_error ());
 
	$num_result = mysql_query ("SELECT * FROM students") or die (mysql_error());
	$totaldata = mysql_num_rows($num_result);
	
	$result=mysql_query ("SELECT * FROM students ORDER BY ".$_POST['sort']." ".$_POST['dir']." LIMIT ".$_POST['start'].", ".$_POST['limit']."" )       or die (mysql_error ());
 
	$data = array();
 
	while ($row=mysql_fetch_object($result))
	{
		$data [] = $row;
	}
 
	//echo json_encode($data);
	echo '({"total":"'.$totaldata.'","results":'.json_encode($data).'})';
	
?>

Ez így eddig rendben is van, működik szépen. Amit viszont szeretnék most az az, hogy legyen egy szűr.php oldalam ahol egy formot kitöltve egy saját select állítható össze. Ugye a formnak meg kell adni, hogy hova menjen a $_POST. Na és itt van a probléma, hogy nem tudom hogy lehetne megoldani hogy a form-al legyártott selectet ugyanígy meg tudjam jeleníteni a html oldalam gridjébe.

Csináltam egy móricka rajzot is (angolul mert máshol is feltettem a kérdést): http://jani.uw.hu/extjs_form.png

Várom az ötleteket!

MEGOLDÁS:
Lehet nem a legszebb megoldást találtam meg, de működik. Szóval list.php-ban vagy egy form az action=listed.php a listed.php ban van egy ilyen sor


<script>  
var pass_form = "<?php echo $_POST['name']; ?>"; 
</script> 

Ezzel ugye "JavaScriptesítettük" a $_POST tartalmát, nah most jön az extjs rész ahol visszadobjuk a $_POST al amit az előbb átadtunk és voálá. :D
Így néz ki:


 var store = new Ext.data.JsonStore({
		totalProperty: 'total',
		root: 'results',
    	        url: 'data.php',
    	        remoteSort: true,
                fields: [
           {name: 'nk'},
           {name: 'name'},
           {name: 'state'},
        ]
    });
    store.setDefaultSort('name', 'ASC');


   <strong> store.load({params:{name: pass_form}}); </strong>

És innentől már gyerek játék:
data.php


	$result=mysql_query ("SELECT * FROM students where name like '".$_POST['name']."'" )   or die (mysql_error ());
 
	$data = array();
 
	while ($row=mysql_fetch_object($result))
	{
		$data [] = $row;
	}
 
	//echo json_encode($data);
	echo '({"total":"'.$totaldata.'","results":'.json_encode($data).'})';

És az utolsó sorral megint vissza dobjuk a JS-nek az adatot de immáron a form által szűrt adatot.

ui: Ez csak egy részlet, a megvalósításból. Természetesen jobb az egész form-ot tömbként átpasszolni és ugyanúgy a params-nál is tömböt visszadobni a data.phpnak

Hozzászólások

A példaalkalmazások között van egy olyan, hogy filterezés, annak van adatbázis része, ami teljesen használható.

Bemásolva:

// collect request parameters
$start = isset($_REQUEST['start']) ? $_REQUEST['start'] : 0;
$count = isset($_REQUEST['limit']) ? $_REQUEST['limit'] : 20;
$sort = isset($_REQUEST['sort']) ? $_REQUEST['sort'] : '';
$dir = isset($_REQUEST['dir']) ? $_REQUEST['dir'] : 'ASC';
$filters = isset($_REQUEST['filter']) ? $_REQUEST['filter'] : null;

// GridFilters sends filters as an Array if not json encoded
if (is_array($filters)) {
$encoded = false;
} else {
$encoded = true;
$filters = json_decode($filters);
}

// initialize variables
$where = ' 0 = 0 ';
$qs = '';

// loop through filters sent by client
if (is_array($filters)) {
for ($i=0;$i
$filter = $filters[$i];

// assign filter data (location depends if encoded or not)
if ($encoded) {
$field = $filter->field;
$value = $filter->value;
$compare = isset($filter->comparison) ? $filter->comparison : null;
$filterType = $filter->type;
} else {
$field = $filter['field'];
$value = $filter['data']['value'];
$compare = isset($filter['data']['comparison']) ? $filter['data']['comparison'] : null;
$filterType = $filter['data']['type'];
}

switch($filterType){
case 'string' : $qs .= " AND ".$field." LIKE '%".$value."%'"; Break;
case 'list' :
if (strstr($value,',')){
$fi = explode(',',$value);
for ($q=0;$q
$fi[$q] = "'".$fi[$q]."'";
}
$value = implode(',',$fi);
$qs .= " AND ".$field." IN (".$value.")";
}else{
$qs .= " AND ".$field." = '".$value."'";
}
Break;
case 'boolean' : $qs .= " AND ".$field." = ".($value); Break;
case 'numeric' :
switch ($compare) {
case 'eq' : $qs .= " AND ".$field." = ".$value; Break;
case 'lt' : $qs .= " AND ".$field." < ".$value; Break;
case 'gt' : $qs .= " AND ".$field." > ".$value; Break;
}
Break;
case 'date' :
switch ($compare) {
case 'eq' : $qs .= " AND ".$field." = '".date('Y-m-d',strtotime($value))."'"; Break;
case 'lt' : $qs .= " AND ".$field." < '".date('Y-m-d',strtotime($value))."'"; Break;
case 'gt' : $qs .= " AND ".$field." > '".date('Y-m-d',strtotime($value))."'"; Break;
}
Break;
}
}
$where .= $qs;
}

// query the database
$query = "SELECT * FROM users_view WHERE ".$where;
if ($sort != "") {
if ($sort=='v0') $query .= " ORDER BY abs(".$sort.") ".$dir;
else
$query .= " ORDER BY ".$sort." ".$dir;
}
$query .= " LIMIT ".$start.",".$count;

$rs = mysql_query($query) or die($query);
$total = mysql_query("SELECT COUNT(*) FROM users_view WHERE ".$where);
$total = mysql_result($total, 0, 0);

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

echo '{"total":"'.$total.'","data":'.json_encode($arr).'}';

Az elvet nem értem..
Ez mondjuk egy valami.php ben van amit a javascript fog meghívni és vissza kapja cserébe ezt:
echo {"total":"'.$total.'","data":'.json_encode($arr).'}';

De nekem mikor el kűldöm a $_POST-ot a szűr.php-ból még nincs semmilyen kérésem, azt se tudom hogy az actiont hova irányítsam...