loader

Codeigniter: Template Engine o Template Parser

Salve a tutti, dopo aver commentato la funzione dei controller e dei model non resta che parlare delle view, o come meglio definiti Template Engine o Template Parser.

Codeigniter non ha un vero e proprio Template Engine, ma sfrutta una classe nativa chiamata Template Parse, che si comporta in tutto e per tutto allo stesso modo, con alcune limitazioni.

Possiamo notare sin da subito che il nostro framework mette tutto a nostra disposizione non appena lo installiamo, infatti per piccoli progetti non serve configurare quasi nulla, anzi abbiamo tutto pronto e funzionante.

Differenze tra Template Engine e Template Parser

Come già anticipato CI (codeigniter), utilizza una classe che emula un TplEngine ma assolutamente non è la stessa cosa, permette di avere output simili, l’output sarà uguale ma a livello di logica è molto diverso.

Premessa:

Tutti i file di View, ossia output della nostra applicazione, dovranno essere aggiunti nella directory “APPPATH.’views/’ per separare le logiche dell’app e delle viste.

Il template parser di CI sostanzialmente è solo ed esclusivamente una semplice sostituzione di testo con attivatori delle pseudo-variabili, il che significa: “Carichiamo un file e sostituiamo il contenuto di determinate parole”.

Un piccolissimo esempio dalla Doc. Ufficiale:

<html>        <head>                <title>{blog_title}</title>        </head>        <body>                <h3>{blog_heading}</h3>        {blog_entries}
                <h5>{title}</h5>                <p>{body}</p>        {/blog_entries}
        </body></html>

Per poter avere il nostro output compilato non resta che utilizzare questa sintassi all’interno di un controller:

$data = array(
        'blog_title' => 'My Blog Title',
        'blog_heading' => 'My Blog Heading'
);
$this->parser->parse('blog_template', $data);

Vediamo subito che altro non è che una semplice sostituzione di testo, e più specificatamente attraverso la funzione “strtr” che da documentazione definisce:

CI Parser Library

Sintesi

Il concetto chiave per il passaggio dei dati da un controller ad una view è il seguente: passando un array del tipo array associativo, la view caricherà i dati interagendo con la variabile $qualcosa ($array[‘qualcosa’]). Nell’esempio, $data[’blog_title’] diventa $blog_title all’interno della vista.

Quindi riassumento il flusso: la vista mostra i dati elaborati dal controller; il controller a sua volta accede ai dati attraverso un modello come fortemente consigliato dal pattern MVC.

Alcuni consigli

É buona (soprattutto consigliata) prassi suddividere un’applicazione web complessa in “Componenti” ossia:

  • Head
  • Header
  • Content
    • Main
    • Sidebar (qualora esistesse)
  • Pre-Footer
  • Footer

Ogni componente sarà autonomo ed indipendente.

Il limite (solo per una questione di facilità e compattezza del codice) dell’utilizzo della Libreria nativa di codeigniter è che si devono richiamare tutte le viste per costruire l’output completo, che non è proprio il massimo.

Immaginiamo di dover creare l’output di una pagina web ed utilizziamo il concetto espresso sopra. Per facilità utilizziamo Header – Content – Footer, la chiamata dal controller sarà la seguente:

$this->load->view('header');
$this->load->view('content', $data);
$this->load->view('footer');

Quindi ad ogni controller dobbiamo richiamare tutte le view per poter costruire il nostro output.

Avendo questa Lib in modo nativo, si potrebbe aggirare l’ostacolo semplicemente creando un file Helper contenente le parti statiche della nostra app, passando solo la parte variabile, funzionerà, anche se non perfettamente ottimizzato; RICORDIAMO CHE ABBIAMO QUESTA LIB A COSTO ZERO…

Perchè utilizzare un Template Engine?

Anche se le due soluzioni si eguagliano, un template engine permette di scrivere in modo più naturale le nostro viste, permettendoci di estendere alcune funzionalità con dei plugin creati ad-hoc.

Un breve excursus qui.