template engine semplice

Jerry6565

Nuovo Utente
17 Giu 2008
3
0
0
Salve a tutti,

Sono nuovo in questo forum ma ho fatto un po' di ricerche prima di porre i miei quesiti. Piacere a tutti sono Ivo ^^

Volevo chiedere se qualcuno conosce un template engine, semplice e lineare e di poche righe che permetta giusto di sostituire variabili, creare loops, ed includere altri template attraverso ad una sintassi occhiabile...

Creai al suo tempo una classe, che mi è risultò davvero utile per diversi progetti, ma ora proprio non riesco ad implementarci alcune nuove funzioni che adesso ritengo fondamentali.

PHP:
class template {
private $__file;
    function __construct($f){ // $f => file
        $this->__file = file_get_contents($f);
    }
    function set($t) { // $ => tag (array[tag] = valore)
        foreach($t as $tag => $valore) {
            $this->__file = str_replace("{".$tag."}", $valore, $this->__file);
        }
    }
    function display() {
        return $this->__file;
    }
    function __destruct() {
        unset($this->__file);
    }
}

Ho pensato giustamente di muovermi verso le regExp, ma dopo diversi tentativi mi arrendo :( con sola farina del mio sacco non ci reisco :confused:

Potete darmi qualche dritta x aiutarmi creare una classe di questo tipo? vi ringrazio tantissimo.
 

jan267

Utente Attivo
6 Mar 2003
1.950
2
38
35
Milano
twitter.com
Ciao,
io ho creato una mia classe per il template, ma per ora preferisco non renderla pubblica, anche perchè è ancora in fase alpha di testing.
Però posso darti qualche suggerimento per quanto riguarda le espressioni regolari.
Le tre che ti passo servono per sostituire le variabili, per creare loop e per gli if.
PHP:
$tpl = preg_replace('#\{([a-zA-Z0-9\._]+)\}#seU', 'classe::funzione_1("\1")', $tpl);
$tpl = preg_replace('#\{loop name\=\"(.*)\"\}(.*)\{\/loop\}#seU', 'classe::funzione_2("\1", \'\2\')', $tpl);
$tpl = preg_replace('#\{if exp\=\"(.+)\"\}(.*)\{else\}(.*)\{\/if\}#seU', 'classe::funzione_3("\1", "\2", "\3")', $tpl);
E rispettivamente funziano così:

Variabile normale
Codice:
{nome}

Variabile array
Codice:
{array.valore.2.bla} [COLOR="DarkOrange"]// equivale a $array['valore'][2]['bla'][/COLOR]

Loop
Codice:
{loop name="person"}
    Nome: {person.name}
    Età: {person.age}
{/loop}
[COLOR="DarkOrange"]/*
Equivale a:
$array = array(
    array('name' => 'Jacopo', 'age' => '19'),
    array('name' => 'Holly', 'age' => '29'),
); ecc...
*/[/COLOR]

Controllo (if)
Codice:
{if exp="variabile == true"}
    operazione 1
{else}
    operazione 2
{/if}

Ti dò un suggerimento: usa una variabile di classe per aggiungere tutte le variabili dalla funzione set(). Tipo così: classe::set('person', $array);
Lavoraci un pò su...

Comunque sia, se vuoi una classe molto scarna ma che alla fine ho letto ingiro che fa un buon lavoro guarda quì. Su questa però non saprò darti aiuto anche perchè non l'ho mai utilizzata!
 

Jerry6565

Nuovo Utente
17 Giu 2008
3
0
0
Grazie per avermi risposto :) non è che magari posso contattarti via MP o altro per avere ulteriori delucidazioni in merito? sono nuovo nel forum xD non saprei nemmeno come fare!
 

Jerry6565

Nuovo Utente
17 Giu 2008
3
0
0
Ho iniziato a stendere qualche cosa... ma quando arrivano i loop mi blocco :p non so come mai ma non riesco ad andare avanti... diciamo che mi perdo MI MANCA IL CONCETTO :crying:

vi faccio vedere cio' che fin ora ho scritto (nel poco tempo che ho):
PHP:
class template
{
	
	public	$__file,
			$__tags = array();
			
	
	function __construct($file = null)
	{
		$this->__file ='<html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
						<title>{$header.title}</title>
						</head>
						<body>
						<h2>{$header->autor} <font size="2">[{$header-time}]</font></h2>
						<div style="border:dashed 1px #6C6C6C;">{$user.nome}</div>
						<h3>{$foo}</h3>
						</body>
						</html>';
		# da fare : if file exitst...
	}
	
	public function set($nome, $variabile)
	{
		if(is_array($variabile))
		{
			foreach($variabile as $k => $v)
				$this->__tags[$nome][$k] = $v;		
		}
		else if(is_object($variabile))
		{
			$variabile = get_object_vars( $variabile );
			foreach($variabile as $k => $v)
				$this->__tags[$nome][$k] = $v;
		}
		else
			$this->__tags[$nome] = $variabile;
	}
	
	public function display()
	{	
		$this->__file = preg_replace('#\{\$([a-zA-Z0-9\.\-\>_]+)\}#seU', 'self::phrase("\1")', $this->__file);
	}
	
	private function phrase($code)
	{
		$code = preg_split('/\.|\-\>|\-/', $code);
		
		if (count($code) == 1)
			return $this->__tags[$code[0]];
		else
		{
			$temp = $this->__tags[$code[0]];
			for ($i = 1; $i < count($code); $i++)
				$temp = $temp[$code[$i]];
			return $temp;
		}
	}	

}
 
Discussioni simili
Autore Titolo Forum Risposte Data
F creare un semplice template engine.. PHP 4
A Consigli sul Template Engine Smarty PHP 2
G Grid e proprietà grid-template-areas HTML e CSS 3
G download di un template HTML e CSS 1
felino [Wordpress] Modifica main color del template WordPress 8
C Offro Installazione Wordpress Gratis! + Template Offerte e Richieste di Lavoro e/o Collaborazione 0
S A PAGAMENTO cerco per installazione template joomla Offerte e Richieste di Lavoro e/o Collaborazione 2
R [WordPress] Inserire campi aggiuntivi ad un Submit Form già dato dal template (front-end) WordPress 0
B Vendo Temi per Wordpress e template html5 Altri Annunci 0
felino [Wordpress] Immagine di sfondo (sotto il template) WordPress 8
M [Joomla] Inserimento wow.js in template Joomla 4
D [HTML] Sito con template scaricabili HTML e CSS 3
fabiodisconzi Miglior template bootstrap 4 admin? CMS (Content Management System) 1
D [HTML] Cerco facsimile di questo template con modalità responsive HTML e CSS 1
D [HTML] template trasformarlo in adattabile per dispositivi mobili HTML e CSS 3
B [HTML] Problema main box di un template HTML e CSS 2
T [HTML] Aiuto col template di blogger CMS (Content Management System) 1
marco95OP Creare template per Themeforest Discussioni Varie 0
G [VENDO]Realizzo Template Per il vostro sito web. Altri Annunci 0
L Offro retribuzione per lo sviluppo di un template grafico Offerte e Richieste di Lavoro e/o Collaborazione 7
Fuego2806 [Joomla] Problema di login con il nuovo template Joomla 0
K [Joomla] Visualizzazione anteprima diversa dalla demo del template Joomla 0
ecosito [PHP] Attivare il form mail di un template PHP 2
xone [Offro] Realizzazione template html5 css3 creati da zero Offerte e Richieste di Lavoro e/o Collaborazione 0
Max 1 Realizzo template (temi) per WordPress, Blogger, Joomla, Drupal e DotNetNuke Altri Annunci 1
Fuego2806 [PHP] Icone template - index.php PHP 2
ecosito [HTML ][PHP] rendere attivo il modulo contatti di un template HTML e CSS 9
T [VENDO] Web Template Altri Annunci 1
T [WordPress] Le modifiche al template non vengono apportate WordPress 1
T modificare un template html5 HTML e CSS 6
A Aiuto template html e dreamweaver HTML e CSS 1
fabiodisconzi Spunti per template responsive ma capace di accettare adv Webdesign e Grafica 2
A Modificare un template html5 Webdesign e Grafica 1
G Creare pagine generiche che non rispondano al template hierachy WordPress 1
G Funzioni Template Tags WordPress 1
G Scelta template per iniziativa editoriale WordPress 5
L nuova pagina template WordPress 2
C mixare 2 template Joomla 1
L rimuovere una sezione nel frontpage di template start point WordPress 2
J Consiglio template fluido HTML e CSS 2
M Come scrivere CSS da un template in Photoshop(.PSD)? HTML e CSS 5
asevenx Ripristinare template e-commerce a pagamento WordPress 6
Z Template gratuiti e penalizzazione SEO SEO e Posizionamento 1
M Usare template creato con muse con wordpress WordPress 5
R Vertex Template (jommla2.5): cambiare colore dell'header Joomla 12
R Modifica Template Joomla 1
R Alcune info su Versione Joomla e Template adatto Joomla 5
G [GRATUITO]Cercasi webdesigner (per realizzare template) Offerte e Richieste di Lavoro e/o Collaborazione 7
L Framework per Template Responsive HTML e CSS 0
felino [Virtuemart] Modifica del template dell'ordine inviato dopo l'acquisto Joomla 0

Discussioni simili