Un bravo developer conosce l’importanza di separare la logica dalla presentazione all’interno di un’applicazione web. Come previsto nel pattern MVC, questa separazione, delega al web designer la realizzazione dei templates e della presentazione consentendo al web developer di concentrarsi sulla logica di business. Permette, inoltre, una migliore collaborazione e manutenzione del progetto.
Esistono diversi template engine per PHP, probabilmente, il più famoso è Smarty. Altri apprezzati sono Plates e Dwoo. La decisione di adottare un template engine deve essere presa dopo un’attenta valutazione. Il rischio principale è di peggiorare inutilmente le prestazioni dell’applicazione, in seconda battuta, si dovranno adottare nuove opzioni e sintassi previste dalla libreria scelta.
La realizzazione di un template engine è relativamente semplice: vediamo come realizzarlo con una classe ad-hoc che si occupa di renderizzare le variabili individuabili nel codice HTML grazie a dei marcatori scelti a piacimento.
Per il nostro tutorial, il marcatore scelto per delimitare le variabili, è la doppia parentesi graffa. Questo il nostro codice HTML:
Hi {{name}}, welcome in my personal template engine.
La nostra classe, sostanzialmente, si occupa di caricare il file HTML e sostituire le variabili con la funzione str_replace. Vediamola nel dettaglio:
class Template {
protected $file;
protected $values = array();
public function __construct($file) {
$this->file = $file;
}
public function set($key, $value) {
$this->values[$key] = $value;
}
public function render() {
if (!file_exists($this->file)) {
return "Error loading file: " .$this->file .".";
}
$html = file_get_contents($this->file);
foreach ($this->values as $key => $value) {
$replace = "{{" .$key ."}}";
$html = str_replace($replace, $value, $html);
}
return $html;
}
}
Per poterla utilizzare sarà sufficiente includerla specificando il file da caricare, indicare la variabile presente nel codice con la funzione set e renderizzare il contenuto con la funzione render:
include("template.php");
$template = new Template("file.html");
$template->set("name", "Emanuele");
echo $template->render();
Al prossimo tutorial 😉
Ottimo tutorial!
E’ possibile indicare più variabili con un array?
Ad es.:
$template->set(
[
‘name’ => Emanuele’,
‘surname’ => ‘Rossi’,
‘birthdate’ => ’01/01/1971′
]
);
Grazie.
Ciao Alex,
tutto è possibile (cit.) 😉
Se ci fai caso, i valori da passare alla view, sono già un array.
In effetti, la soluzione è semplice:
public function set($values) {
foreach ($values as $key => $value) {
$this->values[$key] = $value;
}
}
Tutto è possibile (cit. cit.).
Ales
Well done Alex. Il suo utilizzo :
$template->set([
‘name’ => ‘Giuseppe’,
‘surname’ => ‘Rossi’
]);