Tutorial 1: Hello World

Obiettivo: creare una maschera che contenga il messaggio Hello World.
Scarica l'applicazione

L'applicazione

Creiamo i seguenti oggetti nella cartella applications (le directory sono tra <>):

  • <hello_world>
    • index.php
    • <objects>
      • hello_world.php
      • message.php

I nomi dei files (eccetto index.php) sono liberi, il framework analizza comunque tutto il contenuto di objects, ma quello che conta sono i nomi delle classi.

Il cuore delle applicazioni P4A è la definizione della classe applicazione che eredita dalla classe P4A. Questa poi caricherà la maschera da visualizzare. Nel nostro caso il codice del file hello_world.php sarà:

<?php
 
// La classe applicazione estende sempre la classe p4a del framework
class hello_world extends P4A
{
	// Costruttore della classe
	function hello_world ()
	{
		// La prima cosa da fare, sempre, è lanciare il costruttore
		// della classe p4a
		parent::p4a();
		
		// A seguire il codice da eseguire, tipicamente apre la prima maschera
		$this->openMask("messagges");
	}
}
 
?>

La Maschera ed i Controlli

In P4A, per facilitare la consistenza dei dati, viene aperta una sola maschera alla volta. Per creare una maschera si deve definire una classe che estende la classe P4A_Mask.

Quindi, solitamente nel costruttore, si istanziano i vari controlli da visualizzare (tipicamente un contenitore ed al suo interno una serie di controlli semplici), utilizzando il metodo build della superclasse P4A_Object che consente di creare una relazione tra l’oggetto padre e quello figlio (maschera→contenitore, maschera→controllo). Il metodo torna il puntatore all’oggetto stesso.
Per visualizzare il tutto si posizionano i controlli o il contenitore nell’area main del template; le altre aree presenti nel template default sono menu e top.
Ecco il codice che descrive la maschera con il messaggio da visualizzare:

<?php
 
// Per creare una maschera, viene creata una classe che eredita dalla classe P4A_Mask.
class messaggio extends P4A_Mask
{
	// Costruttore della classe
	function messaggio()
	{
		// Come per l'applicazione per prima cosa si lancia il costruttore del padre
		parent::P4A_Mask();
		
		// Vengono istanziati i widgets da posizionare sulla maschera utilizzando
		// il metodo build della maschera (o meglio della classe P4A_Object da cui
		// tutto deriva).
		
		// L'oggetto box, è un'etichetta di testo non modificabile.
		// Una volta istanziata se ne imposta il testo, formattabile in HTML
		// accedendovi con $this->box
 
		$this->build("p4a_box","box");
		$this->box->setValue("Hello world");
		
		// L'oggetto frame è uno dei tipi di contenitori disponibili che 
		// consente il posizionameto relativo (senza tabelle html) dei widget
		// in questo caso si accede al widget creato usando il puntatore tornato con build
		$frm =& $this->build("p4a_frame","frame");
		$frm->anchorCenter($this->box);
		
		// Infine sivisualizza il contenitore (ed i widget contenuti)
		// in una delle 3 sezioni del template (di default sono top,menu,main)
		$this->display("main", $frm);
	}
}
?>

Avvio applicazione

Per avviare l’applicazione viene creato un file index.php nella radice dell’applicazione stessa, che, include le librerie p4a, istanzia la classe applicazione e ne invoca il metodo main().

<?php
 
// 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("hello_world");
 
// Lancia l'applicazione
$app->main();
 
?>

Gestione degli eventi

Il prossimo passo consiste nel modificare il contenuto dell’etichetta quando si clicca su questo.

P4A gestisce egregiamente gli eventi, sia durante il ciclo di vita degli oggetti (maschera, applicazione, datasource ad esempio), sia gli eventi generati dall’azione dell’utente sull’interfaccia web.

Per assegnare la funzione test_func ad un evento su un controllo test_widg si utilizza il seguente codice:

$this->test_widg->addAction("onClick");
$this->intercept($this->test_widg, "onClick", "test_func");

La prima riga attiva la gestione dell’evento sul widget, la seconda specifica che l’evento viene gestito con la funzione test_func contenuta nella classe $this (la maschera).

Nel nostro caso il box, widget semplice, prevede la gestione dell’evento onClick, quindi per fare in modo che cliccando sull’etichetta, il testo di questa cambi, basta aggiungere nel file message.php, nel costruttore della classe messaggio le seguenti righe:

$this->box->addAction("onClick");
$this->intercept($this->box, "onClick", "change_box");

e sempre nella classe verrà aggiunto il seguente metodo, che cambia il testo dell’etichetta ad ogni click:

function change_box()
{
	if ($this->box->getValue() == "Hello world") {
		$this->box->setValue("Clicca ancora");
	} else {
		$this->box->setValue($this->box->getValue() . ".");
	}
}

Autore

AbiBepo

 
it/tutorials/hello-world.txt · Last modified: 2007/01/26 06:26 by 84.154.53.187
 
Creative Commons License Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki