Callback ?!!?!?

Ciao a tutti,

Sapete dirmi come si richiama una funzione callback presente in una classe??  :tichedoff:

class test{
    function Panel() {
        // Records per pagina
        $recordsperpage = 20;
        // Creazione dell'oggetto della griglia per referenza
        $datagrid =& new Structures_DataGrid($recordsperpage);
        
        // Connessione al db, query e recupero del dataset
        $arrOptions = array('dsn' => 'mysql://'.$GLOBALS['configuration']['user'].':'.$GLOBALS['configuration']['pass'].'@'.$GLOBALS['configuration']['host'].'/'.$GLOBALS['configuration']['db']);
        $Query = "select * from users";
        $dataSet = $this->Connect($Query);
        
        // Aggiunta delle colonne. Nota: Se viene omessa questa gestione delle colonne il sistema crea delle colonne in base alla struttura della query passata alla classe
        $datagrid->addColumn(new Structures_DataGrid_Column('Name', 'name', 'name', null, null, 'format_text($field=name)')); 
        $datagrid->addColumn(new Structures_DataGrid_Column('Surname', 'surname', 'surname', null, null, 'format_text($field=surname)')); 
        //$datagrid->addColumn(new Structures_DataGrid_Column('Lastname', 'lastname', 'lastname', null, null, 'printLink($field=lastname)')); 
        
        // Unione dei dati con la griglia
        $retval = $datagrid->bind($dataSet, $arrOptions);
        
        $datagridformatted = new Structures_DataGrid_Renderer_HTMLTable($datagrid);
        $datagridformatted->setTableHeaderAttributes(array('bgcolor' => 'CCCCCC'));
        $datagridformatted->setTableEvenRowAttributes(array('bgcolor' => '#FFFFFF'));
        $datagridformatted->setTableOddRowAttributes(array('class' => 'datagrid_tr_odd'));
        $datagridformatted->setTableAttribute("class", "datagrid_table");
        $datagridformatted->sortIconASC = '⇑';
        $datagridformatted->sortIconDESC = '⇓';
        $datagridformatted->setAutoFill("N/A");
        
        //Controllo se la renderizzazione è andata a buon fine 
        if (PEAR::isError($datagridformatted)) {
            echo $datagridformatted->getMessage(); 
            return false;
        }
        $htmltable = $datagridformatted->toHTML(); 
        $htmlpaging = $datagrid->renderer->getPaging(null, null, null, null, null, array('class' => 'datagrid_paging'));
        $result = $htmltable . $htmlpaging;
        return $result;
    }

function printLink($params)
{
    extract($params);
    return '<a href="' . $record['name'] . '">' . $record['name'] . '</a>';
}
}
inviato 10 anni fa
ulisse
X 0 X

Cosa intendi per "funzione callback"? C'è un nesso con il codice che hai riportato?

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Per funzione di calback intendo la funzione printlink() che trovi nel codice riportato. Fai click qua http://pear.php.net/manual/en/package.structures.structures-datagrid.formatter.php

Ecco l'esempio! Non riesco a richiamare la funzione perché si trova all'interno di una classe.

$datagrid->addColumn(new Structures_DataGrid_Column('Lastname', 'lastname', 'lastname', null, null, 'printLink($field=lastname)'));

Grazie

 :bye:

risposto 10 anni fa
ulisse
modificato 10 anni fa
X 0 X

Per lanciare una funzione presente in una classe (chiamata comunemente "metodo") bisogna prima creare un oggetto (istanziare) da quella classe:

$oggetto = new test();

a questo punto puoi lanciare il metodo così:

$oggetto->printlink();

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Sono già dentro un oggetto non devo istanziarlo...non credi!? Io vorrei richiamare la funzione printlink() presente all'interno della classe.

Se dai un occhio alla sintassi noterai che ci sono degli apici.

$datagrid->addColumn(new Structures_DataGrid_Column(...., 'printLink($field=lastname)'));

ho provato anche così:

$datagrid->addColumn(new Structures_DataGrid_Column(...., '$this->printLink($field=lastname)'));

ma niente da fare  :tichedoff:

Idee?!?!

 :bye:

risposto 10 anni fa
ulisse
X 0 X

Scusami, non avevo capito  :buck:

All'interno di una classe, l'oggetto corrente si chiama $this, quindi $this->printlink();

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Scusa Gianni volevo solo farti notare che avevo detto che anche facendo in quel modo non funziona, grazie tante dell'aiuto magari conosci un altro modo per creare delle griglie?!

Grazie

 :bye:

risposto 10 anni fa
ulisse
X 0 X

Hai ragione  :crazy:

prova con 'test::printLink($field=lastname)'

 :bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Grazie mille ora funziona!

 O0  :bye:

risposto 10 anni fa
ulisse
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda