Ü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
- 1343 megtekintés
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).'}';
- A hozzászóláshoz be kell jelentkezni
Ne haragudj de nem értem, hogy az általad bevágott kód hogyan segít az általam felvázolt problémán...
- A hozzászóláshoz be kell jelentkezni
dehogynem, csak kicsit át kéne írnod.
- A hozzászóláshoz be kell jelentkezni
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...
- A hozzászóláshoz be kell jelentkezni