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

Creazione dei file statici

PHP, FTP e file statici: impariamo creare e gestire i template per le pagine HTML per poi pubblicare i contenuti così realizzati tramite upload.
PHP, FTP e file statici: impariamo creare e gestire i template per le pagine HTML per poi pubblicare i contenuti così realizzati tramite upload.
Link copiato negli appunti

In precedenza abbiamo stabilito che i nostri contenuti dovranno essere statici. Per quello che riguarda le pagine del nostro sito, dovranno essere normali file HTML. In questo capitolo vedremo come generare tali contenuti.

Template HTML

Un template HTML è un normale file HTML che contiene una pagina completa. Nel nostro caso, dato che non possiamo usare un linguaggio di templating dinamico come Twig o Blade, dovremo ricorrere a dei segnaposto (placeholder) come {{variabile}} che useremo con la funzione str_replace() di PHP.

Questa funzione è di gran lunga più performante dell'uso di espressioni regolari che nel nostro caso risulterebbero ridondanti in quanto le sostituzioni da effettuare sono elementari.

Quindi definiamo un template per i nostri post che chiameremo post.html e che avrà questa struttura.

<!DOCTYPE html>
<html lang="it">
<head>
<title>{{title}}</title>
<meta charset="UTF-8">
<meta name="description" value="{{description}}">
<!-- CSS del sito -->
</head>
<body>
  <main>
          <!-- Header del sito -->
          <article>
              <header>
                  <h1>{{title}}</h1>
                  <p><time>{{date}}</time></p>
              </header>
              <div class="content">
                  {{content}}
              </div>
          </article>
          <!-- Footer del sito -->
  </main>
</body>
</html>

Abbiamo quattro segnaposto che rappresentano il titolo, la descrizione SEO (o anche il riassunto), la data ed il contenuto di ciascun post. A questo punto dobbiamo implementare la classe che gestirà la creazione dei file finali.

Gestire i template

La nostra classe dovrà leggere il template dei post, sostituire le variabili con i dati forniti e generare il file finale usando come output l'input modificato del template originale.

class Template {
    const DIR = '/templates/';
    public static function parse($data = []) {
        if(count($data) === 0) {
            return '';
        }
        $file = $_SERVER['DOCUMENT_ROOT'] . self::DIR . 'post.html';
        $html = file_get_contents($file);
        $variables = ['{{title}}', '{{description}}',
                    '{{date}}', '{{content}}'];
        $post_content = str_replace($variables, $data, $html);
        return $post_content;
    }
    public static function save($data = [], $filename = 'blog-post.html') {
        $html = self::parse($data);
        if(!empty($html)) {
            file_put_contents( $_SERVER['DOCUMENT_ROOT'] . '/' . $filename, $html);
        }
    }
}

Per sostituzioni multiple la funzione str_replace() accetta un array contenente i valori da sostituire ed un altro array contenente le sostituzioni da effettuare.

Le funzioni file_get_contents() e file_put_contents() leggono e scrivono rispettivamente i dati ricevuti su file. Per i percorsi, sia locali che remoti, occorre sempre ricordare che la variabile globale $_SERVER['DOCUMENT_ROOT'] contiene il path assoluto alla directory principale dello spazio Web ma senza il forward slash finale.

Creazione e upload dei file

Avrete notato che la nostra precedente classe acquisisce i dati da sostituire da una fonte esterna. Dobbiamo quindi creare una classe che gestirà tali dati acquisendoli da un semplice form HTML.

<?php
require_once 'My_FTP.php';
require_once 'Template.php';
class Post {
    public static function create() {
        $title = $_POST['title'];
        $desc = $_POST['description'];
        $date = $_POST['date'];
        $content = $_POST['content'];
        $filename = $_POST['short_name'];
        // Aggiungere validazione
        $vars = [$title, $desc, $date, $content];
        Template::save($vars, $filename);
        $ftp = new My_FTP('192.168.1.5', 'user', 'pass');
        $dest_file = 'public_html/' . $filename . '.html';
        $source_file = $_SERVER['DOCUMENT_ROOT'] . '/' . $filename . '.html';
        if($ftp->upload($dest_file, $source_file)) {
            return true;
        } else {
            return false;
        }
    }
}

Abbiamo aggiunto la variabile POST short_name che rappresenta il nome abbreviato del post (slug) che poi verrà usato come nome del file HTML finale. Se il titolo del post ad esempio è "Il mio post", la sua versione abbreviata potrebbe essere il-mio-post e quindi il nome finale del file sarà il-mio-post.html.

Ricordiamo che per poter funzionare entrambe le routine di cui sopra necessitano dei permessi di lettura e scrittura sia sullo spazio locale che sullo spazio remoto.

Per quanto riguarda la data del post, si potrebbe usare un comune date picker lato client per poter selezionare una data in un formato compatibile con PHP. PHP può gestire un formato come YYYY-mm-dd che è da preferire.

A tal proposito potreste ulteriormente modificare la visualizzazione finale della data del post utilizzando la gestione delle date di PHP. Ad esempio:

$date = strftime('%d/%m/%Y', strtotime($_POST['date']));

In questo caso una data come 2019-10-18 viene riscritta come 18/10/2019. Ovviamente potete scegliere il formato che preferite, ma si sconsiglia vivamente per motivi di usabilità e comprensione dei contenuti di usare un formato come n giorni fa perché ciò aggiungerebbe un ulteriore carico cognitivo al lettore finale.

Conclusione

Abbiamo visto come finalizzare la pubblicazione dei nostri contenuti statici utilizzando le funzionalità viste nei capitoli precedenti, introducendo come nuovo concetto la gestione dei file testuali da parte di PHP.

Ti consigliamo anche