Per funzionare nella maniera che fa risparmiare in termini di traffico di rete e per avere la possibilità che l' insieme dei suoi dati sia dinamico, possa cioè cambiare ad ogni istante, ErgoDataGrid deve fare affidamento ad un server web Apache e ad un database MySql.
I dati così contenuti nelle tabelle del database vengono trasferiti al client di ErgoDataGrid solo per l' effettivo bisogno in ogni situazione di filtraggio, se un filtro è stato stabilito, di ordinamento e di numero di record visualizzati in ogni istante, e devono seguire la validazione da parte del server, che avviene nel modo qui riportato.
Per il lato client i passi da fare per attivare le funzionalità lato-server sono, nella creazione dell' oggetto Grid:
- impostazione di dataUrl sulla pagina PHP stabilita per il trasferimento dei dati.
Sul server, la pagina PHP con i dati da trasferire al browser deve avere una sintassi uguale a quella dell' esempio riportato in fondo, con le seguenti regole:
- deve includere i file dbutils.php e config.php, quest' ultimo con 4 variabili da settare secondo le impostazioni del server MySql usato:
|
mysql_host per il nome dell' host (nome_host:porta) su cui gira MySql; mysql_db per il nome del database da cui provengono i dati; mysql_user per il nome utente che deve accedere al db; mysql_password per la password di accesso; |
|
$query è la stringa con l' istruzione di SELECT da passare a MySql. è possibile dichiarare anche una variabile $imgPath con il percorso nel quale cercare i file con le immagini per i campi in cui il valore di ArrayGrid [col][2] sul lato client è uguale a I. $ArrayFilter è un array con i nomi dei campi della tabella, presenti nella riga di intestazione passata al browser dal primo comando print, che determinano quali campi usare per il filtro di ogni colonna di ErgoDataGrid (la prima colonna a sinistra determina il filtro in base al campo di quest' array con indice 0, e così via); $ArrayFilterType contiene l' array con la definizione (un carattere) del tipo di campo per ogni elemento di ArrayFilter, con i seguenti valori possibili: S = Stringa N = Numero D = Data I = Immagine $ArraySortAsc è l' array con i nomi dei campi che determinano l' ordinamento di ErgoDataGrid quando il click dell' utente finale sul componente visualizzato dal browser stabilisce che il filtro deve essere crescente, quando cioè dopo il click compare una freccia rivolta verso l' alto vicino al nome della colonna; ArraySortDesc è l' array che stabilisce quali campi determinano l' ordinamento decrescente; si può stabilire che sia uguale a ArraySortAsc; |
|
$isWhere = strstr(strtoupper($query)," WHERE ")!=FALSE; ConvertFilterFields(); //opzionale, serve per l' internalizzazione delle griglie dati. $out = PrintRecordCount("nomeTabella",$isWhere);
|
| $result = mysql_query($query . Filter($isWhere) . OrderBy() . DbPage() ); |
| è opzionale rispettare le regole dell' internazionalizzazione, valutando il valore di $_POST["lang"], che contiene la sigla della lingua scelta dall' utente finale per visualizzare la griglia e i dati. |
<?php
include "../../config.php";
include "../dbutils.php";
$imgPath="cars/";
$ArrayFilter=array("img_url","id","description","displacement","registration","km","power","fuel","price_euro");
$ArrayFilterType=array("I","M","S","N","D","N","N","S","N");
$ArraySortAsc=array("img_url","id","description","displacement","registration","km","power","fuel","price_euro");
$ArraySortDesc=$ArraySortAsc;
$query="SELECT *,UNIX_TIMESTAMP(registration) AS Date2 FROM Cars";
$conversion_value=1.26;
if (isset($_POST["lang"]) && $_POST["lang"]=="it") $lang="it"; else $lang="en";
function ConvertFilterFields() {
global $lang,$conversion_value;
if (!isset($_POST["F"])) return;
$af=split("~",$_POST["F"]);
$i=0;
foreach($af as $ff) {
if ($i<>0) $f.="~";
if ($lang=="en") {
$fi=split("[|]",$ff);
for ($ii=0;$ii<count($fi);$ii++) {
if ($ii<>0) $f.="|";
if ($ii>1) {
if ($fi[0]==5) {
$f.=Round($fi[$ii]*1.609);
} else if ($fi[0]==7) {
if ($fi[$ii]=="Gasoline")
$f.="Benzina";
else
$f.="Diesel";
} else if ($fi[0]==8) {
$f.=Round($fi[$ii]/$conversion_value);
} else
$f.=$fi[$ii];
} else
$f.=$fi[$ii];
}
} else
$f.=$ff;
$i++;
}
$_POST["F"]=$f;
}
$link = mysql_connect($mysql_host, $mysql_user, $mysql_password);
mysql_select_db($mysql_db);
$isWhere=strstr(strtoupper($query)," WHERE ")!=FALSE;
ConvertFilterFields();
$out=PrintRecordCount("Cars",$isWhere);
$result = mysql_query($query . Filter($isWhere) . OrderBy() . DbPage());
$out .= '"table":"Cars","value":[';
while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
if ($lang=="it") {
$k=$row["km"];
$p=$row["price_euro"];
$f=$row["fuel"];
} else {
$k=round($row["km"]/1.609);
$p=round($row["price_euro"]*$conversion_value);
if ($row["fuel"]=="Benzina") $f="Gasoline"; else $f="Diesel";
}
$line= "['". $imgPath. $row["img_url"] . "','"
. $row["id"] . "','"
. $row["description"] . "','"
. $row["displacement"] . "','"
. ConvertDate(Date("l j F Y",$row["Date2"]),$lang) . "','"
. Date("d/m/Y",$row["Date2"]) . "','"
. Group($k) . "','"
. $k . "','"
. $row["power"] . "','"
. $f . "','"
. GroupImport($p);
if ($lang=="it") $line.= " €"; else $line.=" $";
$line.= "','" . $p . "'],";
$out .= $line;
}
$out = preg_replace("/,$/is","", $out);
print "{" . $out . "]}";
if (isset($result)) {
mysql_free_result($result);
}
mysql_close($link);
?>
|