Tutorial 2: L'agenda

Introduzione

Iniziamo la gestione dei database con un esempio classico, la rubrica:

  1. Viene istanziata una sorgente dati, come p4a_db_source o pa4_array_source
  2. Nel caso del database vengono impostati i parametri minimi della sorgente con
    • setTable
    • setPk: imposta la chiave primaria
    • setFields: array associativo che specifica quali campi usare della tabella (tabelle in caso siano presenti dei joins) e con quale alias
    • addOrder
  3. Il metodo load dell’oggetto db_source effettua la connessione al database (usando la dsn specificata nel file di configurazione o sovrascritta con la costante P4A_DSN) e crea una collezione di data_field
  4. Con la chiamata alla funzione setSource sull’oggetto maschera viene creata una collezione di controlli fields associata alla maschera
  5. Vengono impostate le proprietà di ogni campo (tipo, label, ... vedere metodi set... della classe p4a_field)
  6. I campi vengono ancorati ad un contenitore e questo viene visualizzato nella maschera

Scarica i file usati per il tutorial 2 e 3.

Il database

Ecco il database di esempio:

# GRANT USAGE ON * . * TO 'database'@'%' 
# GRANT ALL PRIVILEGES ON `database` . * TO "database"@ "%" WITH GRANT OPTION ;
 
CREATE TABLE `agenda` (
`idAgenda` INT NOT NULL ,
`cognome` VARCHAR( 40 ) NOT NULL ,
`nome` VARCHAR( 40 ) NOT NULL ,
`telefono` VARCHAR( 15 ) NOT NULL ,
`email` VARCHAR( 40 ) NOT NULL ,
PRIMARY KEY ( `idAgenda` )
);
 

L'applicazione

Ecco il file index.php usato per avviare l’applicazione:

<?php
// Ridefinisce i parametri della connessione al database per
// questa applicazione
define("P4A_DSN", 'mysql://databaselocalhost/database');

// Carica le librerie del framework
require_once( dirname(__FILE__) . '/../../p4a.php' );

// Istanzia la classe che definisce l'applicazione hello_world.
// La classe si trova nella sottodirectory objects in un file 
// con lo stesso nome della classe
// TODO: testare se i nomi di classe/file sono sensibili alle maiuscole
$app =& p4a::singleton("contatti");

// Lancia l'applicazione
$app->main();

?>

Ed ecco invece il file objects/contatti.php che definisce l’applicazione:

<?php
class contatti extends P4A
{
	// Costruttore della classe
	function contatti()
	{
		parent::p4a();
		$this->openMask("agenda");
	}
}
?>

La maschera per l'agenda

Ecco la base di partenza per la nostra mascheda di accesso alla tabella agenda:

<?php 
class agenda extends P4A_Mask
{
	// costruttore
	function agenda()
	{
		parent::P4A_Mask();
 
		// Definisce la sorgente dati usando l'oggetto p4a_db_source
		// ed indicando quali campi usare, la chiave primaria e 
		// l'ordinamento e il massimo numero di righe caricate alla volta
		$this->build("p4a_db_source", "source");
		$this->source->setFields(array("agenda.*" => "*"));
		$this->source->setTable("agenda");
		$this->source->setPk("idAgenda");
		$this->source->addOrder("cognome");
		$this->source->addOrder("nome");
		$this->source->setPageLimit(10);
		$this->source->load();
 
		// indica che nelle nuove righe questo campo utilizza un
		// autoincremento, secondo le specifiche del tipo di database
		$this->source->fields->idAgenda->setSequence("idAgenda");
 
		// associa la sorgente dati alla maschera e si posiziona
		// sulla prima riga
		$this->setSource($this->source);
		$this->source->firstRow();
 
		//Fieldset (contenitore) con l'elenco dei campi
		$fset=& $this->build("p4a_fieldset", "frame");
		$fset->setTitle("Agenda Contatti");
 		$fset->anchor($this->fields->idAgenda);
		$fset->anchor($this->fields->cognome);
		$fset->anchorLeft($this->fields->nome);
		$fset->anchor($this->fields->telefono);
		$fset->anchor($this->fields->email);
 
		// Frame principale che contiene gli altri contenitori
		$frm=& $this->build("p4a_frame", "frm");
		$frm->setWidth(730);
  		$frm->anchor($fset);
 
		// Visualizzazione
		$this->display("main", $frm);
	}
}
?>

Si noti che specificando l’autoincremento si demanda la gestione del progressivo al framework, non al database stesso.

Strumenti di navigazione

A questo punto veniamo posizionati sul primo record della tabella ma non possiamo ancora eseguire nessuna operazione sul database. Ci viene in soccorso la classica toolbar con gli strumenti classici per la navigazione. E sufficente aggiungere in fondo al costruttore le seguenti righe:

		// Toolbar 
		$this->build("p4a_standard_toolbar", "toolbar");
		$this->toolbar->setMask($this);
		$this->display("top", $this->toolbar);

Per visualizzare una maschera con i classici pulsanti di spostamento, inserimento, salvataggio, cancellazione, ....

Un altro utilissimo strumento di navigazione può essere realizzato con una tabella che riepiloga i record presenti in archivio consentendo un rapido scorrimento e poisizionamento.

Ecco il codice da usare al posto del blocco usato prima nella definizione del frame principale:

		// Tabella riepilogativa: viene associata la tabella alla
		// stessa sorgente dati della maschera, quindi si impostano 
		// le colonne, tra i campi della sorgente, da visualizzare
		$table =& $this->build("p4a_table", "table");
 		$table->setWidth(700);
		$table->setSource($this->source);
		$table->setVisibleCols(array("cognome","nome"));
		//$table->cols->product_id->setLabel("Cod. Product");
 
		// Per consentire il cambio pagina nella tabella si
		// utilizza una speciale barra di navizione già preconfigurata
		$table->showNavigationBar();
 
		// Frame principale
		$frm=& $this->build("p4a_frame", "frm");
		$frm->setWidth(730);
		//$frm->anchorCenter($message);
		$frm->anchor($table);
  		$frm->anchor($fset);

Autore

AbiBepo

 
it/tutorials/agenda.txt · Last modified: 2007/01/08 02:41 by 151.38.151.176
 
Creative Commons License Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki