Attenzione: cambiamento dalla versione 1.6 alla 2.0.1
per la versione attuale del framework i file corretti
sono i seguenti:
il file examples/login.php
Codice PHP:
<?php
require_once('../framework/prado.php');
pradoGetApplication('login/login.spec')->run();
?>
il file examples/login/login.spec
Codice PHP:
<?xml version="1.0" encoding="UTF-8"?>
<application ID="Login">
<request default="Login" />
<alias name="Pages" path="." />
<using namespace="System.Web.UI.WebControls" />
<using namespace="Pages" />
</application>
scusate per l'inconveniente
Innanzitutto e' sbagliato definire prado php.net, poiche' Questa non e' l'implementazione
per il framework di microsoft, ma bensi un framework per php5 che permette di programmare
in maniera simile a chi programma gia' in asp.net.
Prado e' un framework per PHP5 ,in questa pillola trattero la versione 1.6 che e' quella che ho io,
e' probabile che esistano versioni piu' recenti della libreria.
[infatti adesso esiste la 2.0.1 al sito http://www.xisc.com/download/ ]
Installiamo Prado:
scarichiamo il file l'archivio compresso e decomprimiamolo nella DocumentRoot del nostro WebServer,
dovrebbe generarsi la nuova cartella Prado
(per chi utilizza Wamp e' sotto Wamp/www ,Invece i linuxiani non dovrebbero aver problema a trovare la DocumentRoot
di Apache probabilmente /var/www) ora proviamo a vedere se il nostro sistema supporta prado:
puntiamo firefox [o chi per lui] all' indirizzo http://localhost/prado/requirements.php
dovremo vedere qualcosa di simile
codice:
PRADO REQUIREMENTS CHECKER $Revision: 1.1 $ $Date: 2004/10/25 02:36:40 $
--------------------------------------------------------------
* phpversion > 3..........................................[ok]
* phpversion > 5..........................................[ok]
* SPL Module exists.......................................[ok]
* SimpleXML Module exists.................................[ok]
* Clone Objects check.....................................[ok]
--------------------------------------------------------------
* Fix all the blocking requirements.
* Fix all the musthave requirements.
* Try to fix all the shouldhave requirements.
Finished!
Perfetto! il nostro Sistema e' Prado-compatibile,ora possiamo iniziare a sviluppare qualcosa.
volendo si puo' dare un occhiata agli esempi gia' forniti :
ricordo che si puo' accedervi puntando il browser a http://localhost/prado
dove e' linkata anche la documentazione.
Iniziamo con un po di concetti (tratti direttamente dal tutorial fornito)
Componenti:
i componenti sono tutti quelle classi che discendono da TComponent o da un suo discendente,
un componente si caratterizza per il fatto che ha proprieta' che lo definiscono ed eventi associati
normalmente un componente viene definito in due file, un file .php con lo stesso nome del componente,che contiene
la logica del componente stesso, e se la classe ha nuovi eventi o proprieta
un file .spec in formato XML per definirle,anch' esso avra' lo stesso nome del componente.
e gli eventi del componente, questo file e' in formato XML.
Controlli:
un controllo non e' nient' altro che un componente con assegnatogli un interfaccia ,ogni controllo ha
un padre e diversi figli,tranne page che non ha padre
i legami padre-figlio vengono stabiliti da un template, che non e' altro che una pagina Html con
all'interno dei Tag Particolari(esattamente come in ASP.NET)
i template avranno un estensione .tpl e si chiameranno come il componente associato.
un componente puo' venir istaniziato direttamente nel template adottando questa sintassi:
codice:
<com:NomeComponente ID="MioID123_" Proprieta="..." Evento="...">
....contenuto....
</com:NomeComponente>
dove NomeComponente,MioID123_,Proprieta e Evento verranno sostituiti con i valori opportuni.
oppure puo venir istanziato via codice, con l'apposita funzione TApplication::createComponent($NomeComponente).
Cominciamo a sviluppare qualcosa; per iniziare direi di partire da un componente semplice,
assemblato tanto per capire il funzionamento del framework;
il primo esempio sara' una pagina di login, con una textbox,un bottone e una label..
iniziamo con il sviluppare il nostro template:
codice:
<html>
<head>
<title>Log IN!</title>
</head>
<body>
<h3 style="display:inline;"><center><font color="#96c0dc">Login Page</font></center></h3>
</p>
<com:TForm ID="mioForm">
<center>
<com:TPanel ID="Panel1" Style="border:1px silver solid;background-color:#ececec;width:80%;height:80px;">
<com:TTextBox ID="miaPass" TextMode="Password" />
<com:TButton Text="Convalida" OnClick="convalida" />
<com:TLabel ID="Label1"></com:TLabel>
</p>
</com:TPanel>
</center>
</com:TForm>
</body>
</html>
come potete vedere e' una semplice pagina con alcuni tag speciali che cominciano per com:
qui troviamo TForm,TPanel,TTextbox,TButton,TLabel come potete vedere ho assegnato a ciascuno un ID per
poter accerdervi poi via codice, se usate Javascript la procedura vi sembrera' simile;
[da notare che il bottone richiama una funzione convalida che dopo dovremo implementare]
creiamo quindi una directory login sotto prado/examples,salviamo con il nome prado/examples/login/login.tpl
poi creiamo un file .spec ,ispiriamoci a quello di examples/helloworld e scriviamo:
codice:
<?xml version="1.0" encoding="UTF-8"?>
<application default-page="login" cache-path="">
<alias name="Pages" path="." />
<using namespace="System.Web.UI.WebControls" />
<using namespace="Pages" />
</application>
salviamolo in prado/examples/login/login.spec
senza entrare troppo nello specifico questo file che abbiamo appena creato non sarebbe necessario,
visto che non abbiamo dichiarato metodi o attributi, ma in esso abbiamo messo le direttive using che
caricano i giusti namespace.
ora passiamo al codice php vero e proprio, creiamo il file prado/examples/login/login.php
e scriviamoci il suddetto codice:
Codice PHP:
<?php
//Creiamo una nuova classe per il nostro componente
class login extends TPage
{
//implementiamo la funzione convalida
function convalida($sender,$param)//$sender e $param sono due parametri che vengono passati a tutti gli eventi
{
//Se la Password inserita e' "pippo"
if($this->mioForm->Panel1->miaPass->getText()=="pippo"){
$this->mioForm->Panel1->Label1->setText("OK!"); //scrivi OK!
$this->mioForm->Panel1->Label1->setForeColor("green"); //di verde
}else{
$this->mioForm->Panel1->Label1->setText("PassWord Errata!"); //dai un messaggio d'errore
$this->mioForm->Panel1->Label1->setForeColor("red"); //rosso!
}
}
}
?>
bene! il nostro componente e' pronto! non resta altro che richiamarlo in una pagina php
creiamo la pagina prado/examples/login.php [e scopiazziamo da helloworld],
il codice sara':
Codice PHP:
<?php
require_once(dirname(__FILE__).'/../framework/TApplication.php');
$app=TApplication::getInstance('login/login.spec');
$app->run();
?>
vi sembra troppo complicato per una semplice operazione come questa?
vi sembra di aver perso tempo fino ad adesso per aver letto queste righe per niente?
vi sentite un po Guidoz?
continuate a leggere e non ve ne pentirete..ora proviamo ad estemdere il componente, per esempio visualizzando
la data in alto a destra, e validando il controllo in maniera tale per cui sia indispensabile inserire
la password altrimenti si generera' un errore.
modifichiamo quindi il tenplate
codice:
<html>
<head>
<title>Log IN!</title>
</head>
<body>
<div align="right"><%= date('Y-M-d',time()) %></div>
<h3 style="display:inline;"><center><font color="#96c0dc">Login Page</font></center></h3></p>
<com:TForm ID="mioForm"><center>
<com:TPanel ID="Panel1" Style="border:1px silver solid;background-color:#ececec;width:80%;height:80px;">
<com:TTextBox ID="miaPass" TextMode="Password" />
<com:TButton Text="Convalida" OnClick="convalida" />
<com:TLabel ID="Label1"></com:TLabel>
<com:TRequiredFieldValidator
ControlToValidate="miaPass"
ErrorMessage="Devi inserire una PassWord!" />
</p>
</com:TPanel></center>
</com:TForm>
</body>
</html>
Fatto! provate ad rieseguire il codice e noterete le differenze, il codice in neretto e' quello che ho aggiunto
in particolar modo con <%= %> si puo' inserire un espressione php da valutare, mentre tra i short tag <% %> si puo' scrivere vario codice php direttamente all'interno del template
e il RequiedFieldValidator evitiamo di scrivere righe e righe di codice in javascript per eseguire una funzione classica,
bene la pillola sta' diventando un po' lunghina, se piacera' magari ci sara' una secona parte dove spieghero'
il concetto di postback e vedremo con quale semplicita' si puo' gestire un htmlarea.
per ora rimando alla documentazione fornita col framework,dove c'e' la descrizione di tutti i componenti,
raccomando soprattutto la lettura del pdf che spiega molte cose.
inoltre ho appena visto un tool (tale pm-1.0) per la creazione dei componenti alla pagina download, non ho ancora avuto occasione di provarlo, ma di certo semplifichera' un bel po la vita..
Arrivedervelo!