Visualizzazione risultati 1 fino 2 di 2

Discussione: Classe Template in PHP

  1. #1
    Guest

    Predefinito Classe Template in PHP

    Nelle ultime discussioni si è parlato dell'importanza di dividere il codice html e php(anche se nella realtà non si divide perchè l'html è sempre creato all'interno del php), ho sempre ribadito che per me è molto importante in un progetto avere la cartella con tutti gli html, la cartella con tutti i php e la cartella con tutti i js, dividere i file e mantenere la dinamicità di PHP.Condivido con voi una semplice CLASSE in php che crea l'html, dov'è l'utilità?
    Semplice nella pagina PHP io imposterò tutte le variabili che voglio farò tutti i cicli che voglio sono libero di prendere tutti i valori che voglio, quando ho finito il codice lato server imposterò un template a cui passerò tutti i valori che ho nel PHP, per esempio, come si fa una tabella in php e html, molti di voi sicuramente inseriranno dell'html e dentro l'html aprendo e chiudendo i tag <?php e ?> creeranno le righe, oltre che scomodo non è per niente moderno e dinamico e gestibile scrivere codice in questo modo, mentre nell'esempio che vi mostro è molto semplice creare una tabella tutto da un file php ed eliminando quei fastidiosi print "<input tpe='text'>" nel php che non si possono guardare.
    Si creerà un template che non farà altro che creare la testata della tabella e dentro il foreach ci sarà un altro template che creerà le righe della tabella e poi la chiusura, tutto è diviso tutto e gestibile dal PHP e tutto è dinamico proprio perchè è creato tutto dal PHP, ovviamente in questa metodologia i tag devono essere aperti e chiusi in file html diversi che però nella realtà sono creati tutti dallo stesso file .php quindi bisogna sempre rispettare i tag di apertura e chiusura.
    Sotto la classe ed un esempio di creazione template....Spero sia utile, ovviamente si possono aggiungere n metodi io ho messo solamente la base, è molto semplice da capire, le variabili verranno passati in un array e saranno riprese con il nome all'interno delle parentesi graffe nell'html, basta guardare il codice e si capisce.

    FILE TEMPLATE.PHP
    Codice PHP:
    class Template {


    //IMPOSTIAMO DELLE PROPRIETA'
    var $output;
    var
    $template;
    //var $variabile = array();

    //IL METODO CARICA TEMPLATE USA LA GET CONTENTS LEGGE I CONTENUTI
    function carica($filepath) {

    $this->template = file_get_contents($filepath);

    }
    //SETTIAMO LE VARIBILI SONO UN ARRAY DI VALORI QUINDI FAREMO IL CICLO
    function settaVariabili($array) {

    //$this->variabile = $array;
    $nuovo = $this->template;

    foreach(
    $array as $chiave => $valore)
    {
    $nuovo = str_replace("{".$chiave."}", $valore, $nuovo);
    }
    //QUESTO NON FA ALTRO CHE costruire il template
    if (isset($this->output))
    {
    $this->output .= $nuovo;
    } else {
    $this->output = $nuovo;
    }

    }
    //LO STAMPA E RIPULISCE L'OUTPUT RESETTA TUTTO ALLA FINE DELLA STAMPA
    function procedi() {
    print(
    "$this->output\n");
    $this->output = "";
    }

    }

    Andiamo ad usare la nostra classe, creiamo un file INDEX.PHP

    Codice PHP:

    include "template.php";

    //lE VARIABILI CHE PASSERO' AL TEMPLATE QUESTO E' SOLAMENTE UN ESEMPIO
    $titolo = 'Prova Template';
    $fractalcosmo = 'fractalcosmo';
    $home = "Mio Sito";
    $utente = "Sono io";
    $contatto = "miaEmail@google.com";

    //ISTANZIO LA CLASSE
    $html = new Template();

    //DEFINISCO IL PERCORSO DOVE E' IL MIO FILE HTML E IL NOME DEL FILE, IN QUESTO CASO IN FILE INDEX.PHP
    //E IL FILE PROVA.HTML SONO NELLA STESSA DIRECTORY SE FOSSERO DUE DIRECTORY DIVERSE
    //BASTA IMPOSTARE IL PERCORSO
    $html->carica("prova.html");

    //SETTO LE VARIABILI LE PASSO AL TEMPLATE me sarà ripreso con {me} nell'html casa con {casa} e così via
    $html -> settaVariabili(array(
    "titolo" => $titolo,
    "me" => $fractalcosmo,
    "casa" => $home,
    "utente" => $utente,
    "contatto" => $contatto
    ));
    //Lo stampo e pulisco
    $html -> procedi();
    ob_flush();

    FILE PROVA.HTML


    Codice HTML:
    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="utf-8">
    
      <!-- Always force latest IE rendering engine (even in intranet) & Chrome Frame 
           Remove this if you use the .htaccess -->
      <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    
      <title>{titolo}</title>
      <meta name="description" content="">
      <meta name="{me}" content="{utente}">
    
      <meta name="viewport" content="width=device-width; initial-scale=1.0">
    
      <!-- Replace favicon.ico & apple-touch-icon.png in the root of your domain and delete these references -->
      <link rel="shortcut icon" href="/favicon.ico">
      <link rel="apple-touch-icon" href="/apple-touch-icon.png">
    </head>
    
    <body>
      <div>
        <header>
          <h1>{titolo}</h1>
        </header>
        <div align="center">
        <nav>
          <p><a href="http://fractalcosmo.com">{casa}</a></p>
          <p><a href="http://fractalcosmo.com/blog/contatti/">{contatto}</a></p>
        </nav>
        </div>
    
        <footer>
         <p>&copy; Copyright  by {me}</p>
        </footer>
      </div>
    </body>
    </html>
    Il risultato può essere visto qui, lo terrò un pò online poi la cancello è un pagina di prova.Ciao spero sia utile

    http://fractalcosmo.altervista.org/MvcWebLog/prove.php
    Ultima modifica di fractalcosmo : 05-09-2015 alle ore 16.16.06

  2. #2
    Guest

    Predefinito

    Concludo l'esempio dell'uso dei template con una tabella usando il ciclo foreach per creare le righe utilizzando i template, ovviamente l'html per la tabella potrebbe essere riutilizzato anche per altre tabelle basta solamente passare la chiave nell'array del template con lo stesso nome...Io usando questa metodologia ho sviluppato una pagina dove dinamicamente interrogo il Database e creo delle tabelle con un NOME di testata esempio INDIRIZZO, RECAPITI etc...che mi viene passato dal Database in automatico e dinamicamente il ciclo recupera quel campo e lo utilizza come testata e le righe vengono create in automatico in base al campo testata, ogni volta che cambia la testata cambiano anche le righe relative a quella testata, in questo modo io creo N tabelle(in base a quanti campi di testata ci sono nel Database) con 3 template, possono esserci 10-20 tabelle non mi interessa io uso solamente tre template(testata, riga e chiusura) che dinamicamente valorizzano le tabelle.
    Sotto un esempio conclusivo di come creare la tabella con un bottone finale...Da notare che i tag sono aperti in un file ma ovviamente sono chiusi nell'altro file, l'IDE potrebbe dare dei warning ma nella realtà non sono warning perchè tutto viene letto nel parse PHP e quindi i tag si aprono e si chiudono all'interno della pagina.
    Primo file

    PROVA.PHP

    Codice PHP:

    <?php
    include "view/template.php";

    //lE VARIABILI CHE PASSERO' AL TEMPLATE QUESTO E' SOLAMENTE UN ESEMPIO
    $titolo = 'Prova Template';
    $fractalcosmo = 'fractalcosmo';
    $home = "Mio Sito";
    $utente = "Sono io";
    $contatto = "miaEmail@google.com";

    //ISTANZIO LA CLASSE
    $html = new Template();

    //DEFINISCO IL PERCORSO DOVE E' IL MIO FILE HTML E IL NOME DEL FILE, IN QUESTO CASO IN FILE INDEX.PHP
    //E IL FILE PROVA.HTML SONO NELLA STESSA DIRECTORY SE FOSSERO DUE DIRECTORY DIVERSE
    //BASTA IMPOSTARE IL PERCORSO
    $html->carica("prova.html");

    //SETTO LE VARIABILI LE PASSO AL TEMPLATE me sarà ripreso con {me} nell'html casa con {casa} e così via
    $html -> settaVariabili(array(
    "titolo" => $titolo,
    "casa" => $home,
    "utente" => $utente,
    "contatto" => $contatto
    ));
    //Lo stampo e pulisco
    $html -> procedi();
    ob_flush();

    //ISTANZIO LA CLASSE per la Testata
    $html = new Template();

    $html->carica("provaTabellaTestata.html");
    $html -> settaVariabili(array(
    ));
    //Lo stampo e pulisco
    $html -> procedi();
    ob_flush();

    $arrayAnagrafica = array('Luca'=>'Rossi',
    'Marco'=>'Verdi',
    'Roberto'=>'Cantagirone',
    'Emiliano'=>'Piccolo');

    foreach (
    $arrayAnagrafica as $chiave=>$valore){
    $nome = $chiave;
    $cognome = $valore;

    //ISTANZIO LA CLASSE per la Riga
    $html = new Template();

    $html->carica("provaTabellaRiga.html");
    $html -> settaVariabili(array(
    "nome"=>$nome,
    "cognome"=>$cognome
    ));
    //Lo stampo e pulisco
    $html -> procedi();
    ob_flush();
    }

    //ISTANZIO LA CLASSE per la Chiusura
    $html = new Template();

    $html->carica("provaTabellaChiusura.html");
    $html -> settaVariabili(array(
    "me" => $fractalcosmo,
    ));
    //Lo stampo e pulisco
    $html -> procedi();
    ob_flush();
    ?>

    PRIMO TEMPLATE provaTabellaTestata.html

    (A DIRE IL VERO IL PRIMO HTML È prova.html che trovate nell'esempio del messaggio precedente)

    provaTabellaTestata.html :
    Codice HTML:
    <table name="provaTabella" border="1" id="provaTabella" class="table" >
    	<tr class="tabellaAnagrafica">
    		<th width=5%>Nome</th>
    		<th width=5%>Cognome</th>
    	</tr>

    provaTabellaRiga.html:

    Codice HTML:
    		<tr id="provaTabellaRiga">	
    			<td>{nome}</td>
    			<td>{cognome}</td>
    		</tr>
    provaTabellaChiusura.html

    Codice HTML:
    </table>
    <input type="button" value="Inserisci">
    
        <footer>
         <p>&copy; Copyright  by {me}</p>
        </footer>
      </div>
    </body>
    </html>
    L'esempio può essere visto qui:

    http://fractalcosmo.altervista.org/MvcWebLog/prove.php

    Ps:Spero vivamente che possa essere utile.

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •