User Page
Codice php:
class UserPage{
private $title= '';
private $xhtml= '';
public function __construct($title,UserView $view){
$this->setTitle($title);
$this->buildHeader();
$this->buildView($view);
$this->buildFooter();
}
private function setTitle($title){
$this->title= ' User Manager '.$title;
}
private function buildHeader(){
$this->xhtml=<<<EOD
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="it" lang="it" dir="ltr">
<head>
<title>{$this->title}</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link type="image/ico" rel="shortcut icon" href="favicon/favicon.ico" />
<link type="text/css" rel="stylesheet" href="css/user-manager.css" />
<script type="text/javascript" src="js/user-manager.js"></script>
</head>
<body>
<div id="container">
<div id="header"><h1>User Manager</h1></div>
<div id="user-manager">
EOD;
}
public function buildView($view){
$this->xhtml.= $view->getView();
}
private function buildFooter(){
$this->xhtml.=<<<EOD
</div>
<div id="footer"><p>www.blogial.net</p></div>
</div>
</body>
</html>
EOD;
}
public function getXhtml(){
return $this->xhtml;
}
final public function __destruct(){
unset($this->xhtml);
}
}
Possiamo definire la classe UserPage, il contenitore delle varie views dello script, ve la presento:
Ho utilizzato la sintassi per le stringhe Heredoc per evitare l'escape delle numerose virgolette.
L'unica cosa degna di nota è, il metodo buildView che ha come parametro un oggetto di tipo UserView, con il quale attraverso il metodo getView aggiungo l'xhtml dei vari moduli al template della pagina.
Ho preferito dotare la classe di un __destruct che verrà chiamato ogni qualvolta il garbage collector di PHP distruggerà l'oggetto, in questo modo avremo una migliore gestione della memoria.
UserView
Codice php:
abstract class UserView{
protected $xhtml= '';
abstract protected function setView();
public function getView(){
return $this->xhtml;
}
}
La classe UserView farà da modello, a tutte le views dei moduli obbligandoli a implementare concretamente il metodo setView.
Conclusioni
Con un semplice template (UserPage) e una serie di views ho dotato la ns. applicazione di una gradevole interfaccia flessibile e completamente modificabile (nello script naturalmente avremo anche un file css)senza ricorrere a complicati template engine.Consiglio per un approfondimento la lettura degli articoli Building Object Oriented Web Pages e Completing a Web Site Template using Inheritance.
Nel prossimo articolo parlerò del Model.
Commenti
Ti consiglio di usare uno strumento per la gestione dei template (esempio smarty). La soluzione da te proposta non mi pare troppo MVC
di alberto - 14 Gennaio 2008
Grazie del commento ;) il primo ! Riguardo smarty ti invito a leggere i links che ho segnalato che riflettono la mia opinione in merito a questo template engine. La mia soluzione vuole essere una alternativa ai template engine (ad esempio il presente blog è sviluppato utilizzando i widgets) e sinceramente non vedo il motivo per cui non la ritieni MVC.
di whisher - 19 Gennaio 2008