Gestione delle date in PHP e MySQL

Gestione delle date in PHP

Come per altri linguaggi di programmazione, in PHP è necessario distinguere tra:

  • una stringa che rappresenta una data, come: “25/12/2019”;
  • un timestamp, che individua una data come numero di secondi trascorsi dalla mezzanotte del primo gennaio 1970 (UTC); questa data è conosciuta come l’Epoca.;
  • un oggetto DateTime, che rappresenta una data rispetto al Coordinated Universal Time (UTC).

Passando per il formato americano della data “yyyy-mm-dd”

Partendo da una stringa che rappresenta una data in formato italiano, quale ad esempio “15/12/2019”, per ottenere una delle tre rappresentazioni è necessario passare prima di tutto alla data in formato americano. Un modo, basato sulla trasformazione delle stringhe, è il seguente:

$inputDate = "15/12/2019";
$englishFormatDate = implode('-',array_reverse(explode('/',$inputDate)));

Sostanzialmente:

  • la funzione explode() separa ed inserisce in un array i tre valori di giorno, mese e anno,
  • la funzione array_reverse() rovescia l’ordine dell’array, portano l’anno al primo posto e il giorno all’ultimo,
  • la funzione implode() compatta l’array nella stringa “2019-12-25”, che ha un formato riconosciuto da PHP (per maggiori dettagli sui formati di data e ora in PHP, vedere: https://www.php.net/manual/en/datetime.formats.php.

La data in formato americano può essere trattata dalle funzioni strtotime(), per ottenere il timestamp, e date_create(), per ottenere l’oggetto DateTime. Affinché l’oggetto tenga in considerazione il fuso orario locale, è necessario dichiarare la propria TimeZone. Di seguito il codice:

$timestamp = strtotime($englishFormatDate);

date_default_timezone_set('Europe/Rome');
$dataObject = date_create($englishFormatDate);
/*la seguente scrittura è equivalente:*/
$dataObject  = new DateTime($englishFormatDate);

Senza transitare per il formato americano della data

Un metodo alternativo consiste nel creare l’oggetto DateTime direttamente dalla rappresentazione della data in formato italiano, tramite la funzione date_create_from_format(), per poi utilizzare uno dei metodi dell’oggetto DateTime per ottenere il timestamp:

$dataObject = date_create_from_format('d/m/Y H:i:s', 
                $inputDate . ' 00:00:00', 
                new DateTimeZone('Europe/Rome'));
$timestamp  = $dataObject->getTimestamp();

Avendo a disposizione il timestamp di una data, è possibile ottenere i timestamp di date correlate, sempre tramite la funzione strtotime(),  ad esempio:

$newTimestamp = strtotime('last day of', $timestamp);

Formati di data

Sempre partendo da un timestamp, è possibile ottenere un qualunque formato di data, tramite la funzione date(). Ad esempio, le seguenti funzioni restituiscono un numero intero equivalente al giorno, mese e anno della data fornita come parametro:

$giorno = (int)date('d', $timestamp);
$mese   = (int)date('m', $timestamp);
$anno   = (int)date('Y', $timestamp);

Per ottenere un particolare formato data, partendo dall’oggetto DateTime, va utilizzata la funzione date_format

Calcolo della Pasqua.

Se il server PHP utilizzato ha la funzione Calendar abilitata, è possibile ottenere il timestamp della mezzanotte del giorno di Pasqua di un certo anno con la seguente funzione easter_date()e :

$pasqua2019 = date('d/m/Y', easter_date(2019));

Riferimenti

Per ogni ulteriore informazione sulle date e ore in PHP, fare riferimento alla documentazione ufficiale:

Gestione delle date in MySQL

__work in progress__

WordPress: mostrare contenuti solo agli utenti registrati (e loggati)

Premessa

Staai realizzando un sito web con WordPress e vorresti mostrare l’avanzamento dei lavori al tuo cliente, il quale però vive in un’altra città e non può sedersi al tuo fianco per esaminare il lavoro svolto. Per aggirare il problema potresti adottare diverse soluzioni, ciascuna con qualche inconveniente:

  • potresti inviare al cliente degli screenshot delle pagine realizzate, ma così facendo non potrà apprezzare tutte le animazioni wow.js che hai inserito e neppure tutte le css transitions che ti sono costate tanta fatica.
  • potresti sviluppare il sito in locale (magari su una virtual machine a cui hai assegnato tramite file hosts lo stesso nome dominio che avrà il sito definitivo) e fare l’upload sul sito reale per il tempo necessario a che il tuo cliente lo esamini, per poi cancellare tutto; ma perderesti prezioso tempo in attività a zero valore aggiunto, quali export ed import del DB WordPress.
  • potresti sviluppare il sito direttamente online, ad esempio su un sottodominio del tuo sito web, ma sai già che al momento di passare al dominio definitivo potresti avere degli inconvenienti, come il dover modificare manualmente i link salvati all’interno del database WordPress.
  • potresti allora sviluppare il sito direttamente online, sul dominio definitivo, ma così facendo qualche visitatore potrebbe “imbattersi” sul sito ancora incompleto. A meno che tu non possa selezionare i visitatori che possono vedere il sito durante lo sviluppo, e mostrare invece a tutti gli altri una pagina di cortesia.
    Ma questa cosa si può fare con WordPress? Certo che sì.

Mostrare i contenuti del sito solo agli utenti registrati

Affinché WordPress presenti a tutti i visitatori del sito una pagina di cortesia, e ne presenti invece i reali contenuti solo ai visitatori registrati, si deve procedere in questo modo:

  1. Registrare gli utenti a cui si vogliono mostrare le pagine del sito, magari con un ruolo che non permetta modifiche alla sua struttura, come il ruolo di Autore. Per maggiori informazioni su come svolgere questa attività vedere il seguente tutorial online:
  2. Fornire al cliente le credenziali e le istruzioni per loggarsi al sito (quando sarà il momento).
  3. Predisporre e pubblicare la pagina di cortesia come una normale pagina di WordPress.
  4. Annotarsi l’ID della pagina di cortesia.
    Quando si è in modifica di un elemento (post o pagina) di WordPress, nella barra degli indirizzi ne è indicato l’ID, Ad esempio:

    nomesito/wp-admin/post.php?post=nnn&action=edit

    (dove nnn rappresenta l’ID dell’elemento)

  5. Creare un tema "figlio" (tradotto: "child").
    La guida ufficiale di WordPress per gli sviluppatori (il “Codex”) contiene una pagina in lingua italiana che descrive come creare un tema child . Al termine di questa procedura nella cartella principale del tema child saranno disponibili i file functions.php e style.css.
  6. Modificare il file functions.php del tema child, inserendo queste righe di codice (dove “nnn” rappresenta l’ID della pagina di cortesia annotato al punto 3):
    function myCourtesyPage() {
      $idCourtesyPage = nnn; 
      if (! is_user_logged_in() ) {
        if ( get_the_ID() <> $idCourtesyPage ) {
          wp_safe_redirect(get_permalink($idCourtesyPage)); 
          die();
        }
      }
    }        
    add_action( 'template_redirect', 'myCourtesyPage' );

A questo punto, un visitatore che ha effettuato il login potrà vedere le pagine del sito, mentre chi non è loggato potrà vedere solo la pagina di cortesia.

Quando il sito sarà definitivo, per renderlo visibile a tutti sarà sufficiente commentare l’ultima riga:

//    add_action( 'template_redirect', 'myCourtesyPage' );

Commento al codice inserito in functions.php

Ecco una breve descrizione (completa di link alla guida per gli sviluppatori di WordPress) per le diverse funzioni utilizzate nel codice inserito nel file functions.php:

  • La funzione is_user_logged_in() determina se il visitatore è loggato. E’ la funzione che permette di discriminare gli utenti che possono accedere al sito rispetto a quelli che possono vedere solo la pagina di cortesia.
  • La funzione get_the_ID() restituisce l’ID della pagina che si sta per visualizzare. Viene utilizzata per evitare che un utente che sta per accedere alla pagina di cortesia venga continuamente reindirizzato alla stessa pagina.
  • La funzione wp_safe_redirect() effettua il reindirizzamento all’URL passato come parametro.
  • La funzione get_permalink() restituisce l’URL della pagina web corrispondente all’ID passato come parametro.
  • La funzione die() termina la elaborazione della pagina corrente (la funzione wp_safe_redirect() non lo fa automaticamente).
  • La funzione add_action() permette di eseguire la funzione myCourtesyPage() nel momento in cui WordPress gestisce l’evento ‘template_redirect’ (ovvero quando viene determinato il template di pagina da utilizzare).

Metodo alternativo

Un metodo alternativo al precedente e che permette maggior libertà nella costruzione della pagina di cortesia, può essere il seguente:

    1. Creare una pagina senza contenuti (l’importante è ottenere l’ID).
    2. Creare nella cartella principale del tema child un file page-nnn.php (dove nnn corrisponde all’ID della pagina creata al punto precedente) ed inserire in questo file il contenuto da visualizzare.
      WordPress utilizzerà questo template per visualizzare la pagina di cortesia.

Notepad++: come installare il plugin NppFTP

Premessa

Durante l’attività di web development può rendersi necessario accedere in modifica ai file del sito di produzione, ad esempio per fixare velocemente un errore e consolidarepoi la modifica con il consueto iter di sviluppo.

In questi casi, se come text editor si utilizza Notepad++ (sia a 32 che a 64bit), può esser utile utilizzare il plugin NppFTP, che integra nell’editor un client FTP.

Al termine della installazione del plugin NppFTP, scaricareun file dal sito, modificarlo e salvarlo sul server di produzione, sarà questione di pochi click. Ecco come installare il plugin. Leggi tutto “Notepad++: come installare il plugin NppFTP”

Come installare Composer su Linux Ubuntu

Premessa

Composer è un gestore di pacchetti per il linguaggio PHP. Permette di reperire librerie PHP sul repository  “Packagist”, scaricarle e gestirne le dipendenze da altre librerie. Permette inoltro l’autoload delle classi presenti nelle librerie gestite.

Composer è contenuto in un archivio PHP (composer.phar), che non deve essere scompattato per poterne eseguire i comandi. La sua installazione consiste sostanzialmente nel download ed esecuzione del suo installer.
Al termine di queste operazioni il file composer.phar sarà disponibile nella directory dov’è stato scaricato l’installer.

Di seguito i passi da seguire per installare composer su un server Linux Ubuntu. Leggi tutto “Come installare Composer su Linux Ubuntu”

WordPress: inserire la search box nel menu principale

Premessa

La search box fornita come widget standard nel tema di default di WordPress è senza dubbio un utile strumento per ricercare un determinato argomento all’interno del sito.

La naturale collocazione della search box è all’interno di una “plugin area”, tipicamente nella barra laterale destra. Esigenze di design potrebbero però portare alla necessità di eliminare la barra laterale e di conseguenza anche la search box. In questo caso, una possibile soluzione può essere quella di collocare la search box all’interno del menu di navigazione di WordPress. In questo modo, la search box rimane sempre a disposizione, senza occupare lo spazio della pagina.

Ecco quindi cosa bisogna fare per inserire la search box nel menu principale di WordPress. Leggi tutto “WordPress: inserire la search box nel menu principale”

CSS in WordPress: come aggiungere il proprio codice

Questo articolo descrive come  inserire codice personalizzato CSS in  WordPress. Presuppone che il lettore sia già in possesso delle nozioni di base su WordPress (compresi i concetti di theme e plugin) ed i fogli di stile CSS.

Gestione di base dei fogli di stile CSS in WordPress

Quando si è in visualizzazione di un post di WordPress, il layout della pagina  è affidato al foglio di stile “style.css” presente nella cartella principale del tema in uso. Ad esempio, in una installazione di WordPress che utilizza il tema predefinito “Twenty Seventeen”, il file style.css sarà contenuto nel percorso: /wp-content/themes/twentyseventeen/

Quando si è in modifica di un post, invece, la sua formattazione è demandata al foglio di stile editor-style.css che nel tema predefinito è collocato nel percorso: wp-content/themes/twentyseventeen/assets/css/ Leggi tutto “CSS in WordPress: come aggiungere il proprio codice”

XAMPP nuovo concetto di sicurezza ed errore “403 accesso proibito”

La premessa

Hai appena installato l’ambiente XAMPP sul tuo server Linux Ubuntu e ti accingi ad accedere al database MySQL tramite l’applicazione web phpmyadmin.

Ci sono due scenari possibili:

  • hai installato l’Ubuntu Desktop e quindi hai a disposizione un ambiente grafico. In questo caso è sufficiente avviare Firefox, inserire http://localhost/phpmyadmin nella barra degli indirizzi e premere invio.
    Come risultato si otterrà la pagina principale di phpmyadmin, come atteso.
  • hai installato XAMPP su Ubuntu Server e non hai un ambiente grafico. “Poco male -pensi- accederò a phpmyadmin dal  mio computer client inserendo nella barra degli indirizzi l’IP del mio server Linux”. Apri un browser sul tuo computer e (ammettendo che nella rete locale il server abbia IP: 192.168.1.10) inserisci l’indirizzo: http://192.168.1.10/phpmyadmin
    E qui nasce il problema.

Leggi tutto “XAMPP nuovo concetto di sicurezza ed errore “403 accesso proibito””

Sintassi delle regole CSS

Una regola CSS è formata da un selettore e una o più dichiarazioni, separate dal carattere “;” e racchiuse tra parentesi graffe. Nel seguente esempio:

h1 { 
  text-align: center; 
  color: rgb(0, 0, 255);
}
  • h1 è il selettore
  • il carattere “{” apre il blocco delle dichiarazioni
  • text-align: center; e color: rgb(0, 0, 255); costituiscono due dichiarazioni
  • il carattere “}” chiude il blocco delle dichiarazioni

Leggi tutto “Sintassi delle regole CSS”