I datasource sono una collezione di classi PHP create per gestire i dati ossia leggere, modificare, inserire ed eliminare dati da una determinata fonte, per ogni tipologia di sorgente dati esiste una classe dedicata. Il datasource può essere considerato come una sorta di interfaccia tra la fonte di dati e gli oggetti, lo scopo principale è quello di rendere trasparente al controllo l'interazione con la fonte di dati.
Per poter utilizzare i datasource bisogna:

  • Creare una stringa di connessione nel file conf/conn.inc.php con relativi parametri di connessione, per dettagli clicca qui
  • Istanziare la classe tramire l'oggetto ds come mostrato
<idtag typeobj="ds" conn="conn6" dsdefault="jamp" dstable="partite" dskey="id" />

Un attributo importante e comune a tutte le diverse tipologie di datasource è dssavetype(Tipo di salvataggio), tramite questo attributo è possibile stabilire la politica con la quale gestire il salvataggio dei dati, i valori possibili sono:

  • table: salva tutti i dati della tabella.
  • row: salva solo il record corrente.
  • live: salva automaticamente i dati ad ogni cambiamento del record.

LEGARE UN OGGETTO AD UN DATASOURCE

Per legare un oggetto ad un datasource in generale lo si fa specificando nell'oggetto gli attributi dsobj e dsitem. Per l'attributo dsitem contenete il nome del campo sono ammissibili caratteri speciali.


Esempio:
<idtag typeobj="label" label="\nLabel:" dsobj="dsname" dsitem="fieldname" />

Il valore visualizzato nella label sarà il primo valore restituito dal datasource, per spostarsi tra i record o per generiche operazioni di modifica(inserimento, cancellazione, salvataggio) si può utilizzare l'oggetto dsnav

ACCESSO AL DATASOURCE LATO SERVER

Per poter accedere al datasource lato server è possibile inserendo nella pagina PHP gli eventi, nell'esempio sotto mostra come sia possibile accedere al datasource chiamato ds1 subito dopo che esso è stato istanziato per mezzo dell'evento data_select_before il quale ha come parametro della funzione l'oggetto datasource stesso:

<?php
function data_select_before($ds
{
    global 
$xml;
    if (
$ds->getPropertyName("id") == "ds1"
    {
        
$result = array();
        
$result[0]["field1"] = "value1";
        
$result[0]["field2"] = "value2";
        
$result[1]["field1"] = "value3";
        
$result[1]["field2"] = "value4";
        
$ds->setProperty("xml"$xml->dataJSON($result));    // se output dei datasource è JSON(attributo out della pagina)        
       //$ds->setProperty("xml", $xml->dataXML($result));    // dati restituiti in formato XML
        
return false;                            // interrompe l'esecuzione del codice
    
}
}(
?>

Tale esempio serve a popolare partendo da zero il datasource, il risultato del datasource restituito dalla pagina sarà:

<?xml version="1.0" encoding="utf-8"?>
<data>
<script>
<![CDATA[
$('ds1').DSresult = [
{field1:"value1",field2:"value2"},
{field1:"value3",field2:"value4"}];
AJAX.setDsJSON('ds1',0,0,2,0);
]]
>

</script>
</data>

Se invece non si vuole popolare il datasource partendo da zero, ma si deve modificare qualche suo valore in base a determinate condizioni, si utilizza l'evento data_select_after, in questo caso il datasource oltre ad essere stato instanziato e anche stato popolato con i dati secondo quanto specificato nel datasource stesso:

<?php
function data_select_after($ds
{
    global 
$xml;
    
$i=0;
    
$result = array();
    while(
$ds->ds->dsGetRow())
    {
        
$result[$i]['field1'] = $ds->ds->property["row"]->field1;
        
$result[$i]['field2'] = $ds->ds->property["row"]->field2;
        if (
$result[$i++]['field1']=="value1"$result[$i]['field3'] = "YES";
        else 
$result[$i++]['field3'] = "NO";
    }
    
$out $xml->dataJSON($result);
    
$ds->setProperty("xml"$out);
}
?>

In questo caso il datasource non viene completamente ricreato ma viene aggiunto un campo ai due originariamente presenti.

<?xml version="1.0" encoding="utf-8"?>
<data>
<script>
<![CDATA[
$('ds1').DSresult = [
{field1:"value1",field2:"value2", field3:"YES"},
{field1:"value3",field2:"value4", field3:"NO"}];
AJAX.setDsJSON('ds1',0,0,2,0);
]]
>

</script>
</data>

ACCESSO AL DATASOURCE LATO CLIENT

Altrettanto utile è poter accedere alle proprietà ed attributi del datasource anche lato client ossia tramite javascript.

$('ds1').DSresult[row][fieldname]    // array bidimensionale contenente i dati
$('ds1').DSchange                        // indica se i campi del DS sono stati modificati dall'utente flag(true|false)
$('ds1').DSMultipos                        // Multi selezione di record(esempio nella gridds quando clicco sui più record tenendo premuto SHIFT)
$('ds1').DSpos                            // posizione cursore di record
$('ds1').DSsearch                        // Permette di impostare un filtro
$('ds1').DSpre                            // Posizione cursore record prededente
$('ds1').DSrow                        // Numero totale di righe(comprese anche quelle non restituite perchè impostato il dslimit)
$('ds1').DSlimit                        // Equivale all'attributo dslimit impostato nel XML(se non modificato dinamicamente)
$('ds1').DSstart                        // Posizione primo record
$('ds1').DSend                        // Posizione dell'ultimo record
$('ds1').p.DSaction                        // Pagina di destinazione della richiesta
$('ds1').p.DSengine                        // Tipo di engine(es. mysql, xml, ldap, ecc)
$('ds1').p.DSkey                        // Nome campo chiave
$('ds1').p.DSorder                        // Nome campo/i per l'ordinamento
$('ds1').p.DSreferences                    // Nome del ds padre
$('ds1').p.DSreferenceskey                // Nome del campo del ds padre relazionato con ds corrente
$('ds1').p.DSforeignkey                    // Nome del campo del ds corrente relazionato con ds padre
$('ds1').p.DSsavetype                    // moldalità di salvataggio row, table, live
$('ds1').p.typeObj                        // tipo di oggetto ds