Codeigniter: Template Engine o Template Parser

22 Oct 2019 | M.A.D.R.

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:

/**
* @param string $str The string being translated.
* @param array $replace_pairs The replace_pairs parameter may be used as a substitute for to and from in which case it's an array in the form array('from' => 'to', ...).
* @return string A copy of str, translating all occurrences of each character in from to the corresponding character in to.
*/

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.

Codeigniter VS Laravel: chi vince la sfida?

22 Oct 2019 | M.A.D.R.

Oggi l'evoluzione dei linguaggi sono sempre più orientate verso la&nbsp;semplificazione del codice, l’ottimizzazione delle funzionalità e la velocità di esecuzione. Codeigniter il nonno di tutti i framework, riesce ancora a tener testa al gio...

Codeigniter Migration: Versioning Database

22 Oct 2019 | M.A.D.R.

Per “migration” s'intende le gestione delle varie versioni di un database. Grazie al concetto di migration possiamo effettuare tutte le operazioni sul database che abitualmente effetuiamo con strumenti come&nbsp;phpMyAdmin,&nbsp;Toad,&nbsp;MySQL...

Codeigniter CLI: Eseguiamo lavori da linea di comando.

22 Oct 2019 | M.A.D.R.

Come tutti sapranno un framework che si rispetti mette a disposizione la CLI (command line interface), la quale permette di richiamare comandi più o meno complessi. A cosa servono? Per semplicità soffermiamoci solo ad alcuni principali utili...

Codeigniter: Estendiamo il framework con gli HOOKS

22 Oct 2019 | M.A.D.R.

Spesso i dev hanno necessità di modificare il comportamento ed il flusso dell'applicazione, codeigniter mette a disposizione gli HOOKS. Lavorare con un framework, anche se molto semplice, spesso induce ad errori comuni e poco sicuri, basti pensa...

Codeigniter: Profilazione dell'applicazione

22 Oct 2019 | M.A.D.R.

Seguendo l'articolo del Banchmark, per completare le operazioni di performance del nostro codice, Codeigniter permette la creazione di una profilazione dettagliata dell'esecuzione del nostro codice. La classe Profiler visualizzerà i risultati de...

CodeIgniter: Analizziamo le performance del nostro codice

22 Oct 2019 | M.A.D.R.

Ogni programmatore ad un certo punto dello sviluppo del codice, ha necessità di analizzare le performance della propria applicazione/funzione/metodo, infatti CodeIgniter ha una classe di gestione Benchmark sempre attiva, che consente di calcolare ...

Codeigniter: Template Engine o Template Parser

22 Oct 2019 | M.A.D.R.

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 nat...

Codeigniter: Interazione con i database

22 Oct 2019 | M.A.D.R.

Continuiamo questa piccola avventura: CodeIgniter può interagire con i database attraverso un model (ma non è obbligatorio) o attraverso un controller (altamente sconsigliato). Cosa significa interagire con un database? Possiamo recuperare ...

CodeIgniter: Flussi di funzionamento "Router"

22 Oct 2019 | M.A.D.R.

Quello che uno sviluppatore, abituato a interagire con i files php, deve capire la centralità del file index.php, ossia il cuore di un progetto Framework, ed in questo caso Codeigniter router. Non esistono altre pagine all’infuori di index.ph...

Installazione CodeIgniter: prime impressioni

22 Oct 2019 | M.A.D.R.

Abbiamo già citato nell'articolo precedente alcune caratteristiche di questo Framework CodeIgniter. Piccola premessa obbligata... Oggi passeremo al setaccio la procedura d'installazione dello stesso e cercheremo di orientarci nella struttura ...

CodeIgniter - Un framework di tutto rispetto

22 Oct 2019 | M.A.D.R.

Arriva un momento, nel percorso lavorativo di un programmatore Php, nel quale si avverte la mancanza di un framework che possa semplificare la gestione di flussi più o meno complessi. I così detti framework contengono metodi e funzioni in rispo...

Soluzioni complete per ogni esigenza