Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Gestione e localizzazione dei template delle view

In questo capitolo affronteremo il tema della gestione e della localizzazione dei template delle view nel nostro e-commerce basato su PHP.
In questo capitolo affronteremo il tema della gestione e della localizzazione dei template delle view nel nostro e-commerce basato su PHP.
Link copiato negli appunti

Una view nel pattern MVC possiede un template di riferimento per poter generare l’output da inviare al browser. In questo capitolo affronteremo il tema della gestione e della localizzazione dei template delle view.

Nelle nostre classi dobbiamo introdurre un nuovo componente che andrà a gestire i template delle view. Questo componente dovrà:

  1. individuare se il client è desktop o mobile ed inviare una classe CSS specifica da usare nei template.
  2. Caricare il file contenente la localizzazione delle stringhe del frontend (nel nostro caso le lingue sono italiano e inglese).
  3. Gestire i file delle view passandogli i dati ottenuti dinamicamente dal database all’interno di un metodo di un controller.

La nostra classe si presenta così:

namespace PHPEcommerce;
use PHPEcommerce\Session as Session;
class Render {
    public static function getDeviceClass() {
        $ua = $_SERVER['HTTP_USER_AGENT'];
        $class = (stristr($ua, 'mobile') !== false ) ? 'mobile' : 'desktop';
        return $class;
    }
    public static function getLocale($var = '') {
        $path = ABSPATH . 'core/src/locales/';
        if(empty($var)) {
            return $path . LOCALE . '.php';
        } else {
            $lang = strtolower($var) . '_' . strtoupper($var) . '.php';
            if(file_exists( $path . $lang )) {
                return $path . $lang;
            } else {
                return $path . LOCALE . '.php';
            }
        }
    }
    public static function view($template, $vars) {
        $lang_src = (Session::hasItem('lang')) ? self::getLocale(Session::getItem('lang')) : self::getLocale();
        extract($vars);
        $template_path = ABSPATH . 'views/' . $template . '.php';
        $deviceClass = self::getDeviceClass();
        include($lang_src);
        if(!isset($title)) {
            $title = $locale['pages'][$template]['title'];
        }
        if(file_exists($template_path)) {
            include($template_path);
        }
    }
}

Il primo metodo non fa altro che verificare la presenza della sottostringa mobile nello User-Agent che ci indica in modo approssimativo se il browser è di tipo desktop o mobile.

Il secondo metodo carica uno dei due file PHP contenenti la variabile globale $locale ossia un array associativo con le traduzioni delle stringhe utilizzate nel frontend. Se il file locale esiste, viene caricato quello specificato, altrimenti viene caricato quello predefinito (italiano).

Il terzo metodo è quello più importante. Il parametro $template è il nome di uno dei file PHP contenuti nella directory /views mentre $vars è un array associativo di variabili che verranno introdotte nello scope corrente dalla funzione extract() che, come si può notare, deve sempre precedere l’inclusione dei file ottenuta tramite la direttiva include().

Spieghiamo meglio questo meccanismo. Supponiamo di avere un metodo test() nel controller e una view chiamata test.php. Avremo quindi:

public function test() {
    $vars = ['author' => 'Gabriele', 'items' => ['A','B','C']];
    Render.view('test', $vars);
}
Quindi nella view test.php:
<p><?= $author; ?></p>
<ul>
<?php foreach($items as $item): ?>
  <li><?= $item; ?></li>
<?php endforeach; ?>
</ul>
L’output inviato al browser sarà:
[code lang=html]<p>Gabriele</p>
<ul>
  <li>A</li>
  <li>B</li>
  <li>C</li>
</ul>

Il titolo (ossia l’elemento title) della pagina può essere sia definito dinamicamente aggiungendo la voce title all’array associativo $vars oppure in modo statico usando quello del file della localizzazione:

$locale = [
    'pages' => [
			'test' => [ 'title' => 'Test' ]
     ]
];

L’array $locale mantiene un’identica struttura sia per l’italiano (it_IT.php) che per l’inglese (en_EN.php). A cambiare sono unicamente le stringhe dei valori delle voci.

Conclusione

In questo capitolo abbiamo affrontato il passaggio dai dati all’output inviato al browser. Abbiamo visto come passare variabili alle view e come queste creino di fatto le pagine visualizzate dagli utenti.

Ti consigliamo anche