Pagine

Riflesso sulle immagini con jQuery

Per mettere un semplice riflesso sulle immagini, esistono molti script, alcuni validi e altri meno.
Uno pronto all'uso è Reflection.js for jQuery( basta caricare il file e collegare la pagina web a jquery e al file in questione, aggiungere all'immagine la classe reflect ed il gioco è fatto).
Questo è il link.

Arrotondare Box con jQuery

Altro strumento oramai quasi essenziale per ogni sito che si rispetti è jQuery.
Googolando, ho trovato questo sito che permette di arrotondare qualsiasi box (div, span e quant'altro) tramite jQuery.
http://www.malsup.com/jquery/corner/

Ombreggiature con CSS

Come fare ombre con CSS? Box, immagini e quant'altro?
C'è un ottimo sito che spiega il tutto, esempi compresi!
http://css.flepstudio.org/css3/box-shadow-ombreggiatura.html

Ritaglio e ridimensionamento di immagini al volo PHP

Molte volte si vuole inserire una galleria di immagini (o una singola immagine) nel proprio sito ma per mantenerle tutte in un singolo riquadro bisogna creare per ogni immagine una corrispettiva più piccola e ritagliarla delle giuste dimensioni.
Navigando per il web ho trovato, sul sito di Fabrizio Zellini, uno script creato da lui che rimpicciolisce e ritaglia le immagini "al volo", quindi senza bisogno di salvarle da nessuna parte, occupando oltre che spazio e memoria, anche tempo inutile.
Eccovi il link ufficiale:
http://fabrizio.zellini.org/resize-e-crop-immagini-in-php

Se guardate tutto il sito troverete altri tools molto interessanti!

Array PHP: mischiare i valori dentro un array

Se vogliamo avere un risultato sempre diverso dal nostro array (foto, news, frasi, nomi ...) basta usare una semplice funzione:
shuffle();
Tale funzione, a differenza di altre, non va settata come variabile, bensì va scritta così com'è.
Creiamo ad esempio un array con la sequenza di un pasto tipico. Li inseriamo in ordine corretto.
Se non usassimo la funzione shuffle() otterremo il pasto ordinato come dovrebbe essere, ma se invece la utilizziamo, avremo un pasto non consono:
  1. $array=array("Antipasto", "Pane","Primo","Secondo","Dessert");
  2. shuffle($array);
  3. print_r($array);
Come vedete, nella riga 2 ho inserito lo shuffle senza associarlo a nulla, poichè è ovvio che la variabile rimanga la stessa, vogliamo solo dargli una scrollatina.
Con print_r, per chi non lo sapesse, si stampa a video un array con struttura e tutto il resto. Se provaste a fare un echo $array, vi comparirebbe la scritta Array, ma non il suo contenuto.

Array PHP: creare un ciclo da una stringa per estrarre valori

Per estrarre tutti i valori da un array tramite un ciclo, c'è bisogno di creare un array con la funzione array() :
array("Lunedì","Martedì","Giovedì");
e del ciclo FOR.

Vediamo come fare:
  1. $array=array("Lunedì","Martedì","Giovedì"); 
  2. // questa la spiego dopo: $array=explode(",", kGiorni); 
  3. $ngiorni=count($array); 
  4. echo "Siamo Aperti ";
  5. for($i=0;$i<$ngiorni;$i++){
  6.       echo $array[$i]." ";
  7. }
Il discorso è semplice (sicuramente più che a vederlo):
Riga 1:
creo una variabile con l'array. Si può creare anche tramite una serie di valori separati da una virgola e utilizzare, oltre alle variabili, anche le costanti, e utilizzare la funzione explode come commentato nella Riga 2:
define("kGiorni","Lunedì,Martedì,Giovedì");
Riga 3:
Contiamo quanti elementi ci sono dentro l'array con la funzione count().

Riga 4:
Inseriamo del testo prima di estrarre i valori dall'array, in questo caso: "Siamo Aperti ", per poi aggiungerci i giorni dopo.

Riga 5:
Usiamo il ciclo For per estrarre i valori. Si possono estrarre i valori dall'array usando le relative posizioni dei valori. Nel nostro caso, Lunedì sarà al posto 0 (si parte sempre da 0) mentre Giovedì sarà il 2.
Quindi per estrarre Lunedì, basterà scrivere:
$array[0];
ed è infatti quello che facciamo nella riga 6.
Il ciclo è così formato:
$i=0 (come la posizione del primo valore del nostro array)
finché la variabile $i sarà minore(<) di $ngiorni, il ciclo continuerà
$i++, aumenta di 1 la variabile $i alla fine di ogni ciclo.

Riga 6:
scriviamo a video l'array, estraendo ogni valore grazie al valore della variabile $i:
$array[0] al primo ciclo (Lunedì)
$array[1] al secondo ciclo (Martedì)
$array[2] al terzo ciclo (Giovedì)
fine del ciclo perché se ci fosse un nuovo ciclo, la variabile $i varrebbe 3 e sarebbe uguale alla variabile $ngiorni e questo non è valido (ritorna falso ed il ciclo si ferma).

Pagina di provenienza dell'utente - PHP

Per modificare la lingua di un sito, utilizzo i cookie.
Una pagina a se stante verifica se una lingua è settata in modo corretto nei cookie o se per lo meno esiste.
Nel caso uno dei due controlli fosse falso, creo da zero (o nuovamente) il cookie lingua con il valore corretto.
Questo è  un assaggio di quello che sarà l'articolo per la creazione di un sito multilingua.
Prefazione fatta per un motivo: se un utente volesse cambiare la lingua, si indirizza il browser alla pagina "lingua.php" dove verrà modificato il cookie con il nuovo valore, ma come si fa a far tornare l'utente alla pagina alla quale stava?
Ci sono vari metodi: si reindirizza alla index, e tantovale, oppure si invia l'indirizzo della pagina tramite URL (assolutamente da non fare, ci vuole niente per reindirizzare la pagina ad un sito pericoloso e poi andate voi nei casini) o ancora, ed è il nostro caso, si recupera il nome della pagina dal quale l'utente è arrivato tramite:
$_SERVER["HTTP_REFERER"]
Per ottenere solo il nome del file, basterà aggiungere, come abbiamo visto in un precedente articolo, la funzione baseline():
basename($_SERVER["HTTP_REFERER"]);

Abbreviazione delle condizioni IF ELSE

La condizione IF ELSE è uno dei punti cardine della programmazione.
E' presente in molteplici linguaggi: PHP, javascript, C, C++, ASP e via dicendo.
Per esteso si compone come segue:
  1. $var='ciao';
  2. if($var=='ciao'){
  3.      echo $var;
  4. }else{
  5.      echo 'Buongiorno';
  6. }
Esiste però un metodo "contratto", una abbreviazione per velocizzare la scrittura:

  1. $var="ciao";
  2. echo ($var=='ciao' ? $var : 'Buongiorno');

Basta confrontarlo per capire subito qual'è la tecnica.
Prima si inserisce la condizione, dopo il punto di domanda (?) si inserisce l'azione da eseguire nel caso che la condizione sia vera, dopo i due punti (:) invece si inserisce l'azione nel caso la condizione sia falsa, il tutto tra parentesi tonde.

(condizione ? se è vera esegui questo : se è falsa esegui questo)



Estrarre il nome della pagina e del percorso

Soprattutto nei menu, c'è bisogno di un controllo del nome della pagina.
Se il nome corrisponde, ad esempio, alla home, cambia il nome della classe e il pulsante della home rimane selezionato (essendo nella home).


Il nome del file corrente è in $_SERVER['PHP_SELF']

Per estrarre solo il nome del file si usa:

$nome = basename($_SERVER['PHP_SELF']);

Per estrarre solo il percorso si usa:
$path = dirname($_SERVER['PHP_SELF']);

Problema HEADER ALREADY SENT

Molte volte capiterà ai programmatori, di trovarsi una bella gatta da pelare, un problema che si proporrà quando si proverà a fare un redirect in PHP.
La soluzione, però, è estremamente semplice: basterà aggiungere alla pagina incriminata (quella dove compare l'errore) due semplici stringhe con una sola condizione: la prima deve essere inserita prima di qualsiasi funzione scriva a video qualcosa.
Solitamente è meglio metterla alla riga 1 e la seconda stringa alla fine di tutto.
Alla riga uno andrà inserito:
ob_start();
 mentre alla fine:
ob_end_flush();

Problema risolto!

Switch PHP, la scelta

Dopo averlo scritto, mi sembra giusto spiegarlo.
Lo Switch() è una funzione di PHP che permette di ottenere un risultato preciso in base a valori predefiniti.
Per andare sul concreto: questo è l'esempio fatto per le funzioni.

$giorno=date("l",time());
switch($giorno){

     case 'Monday':
           $giornoit="Lunedì";
           break;
      case 'Tuesday':
            $giornoit="Martedì";
            break;
      case 'Wednesday':
            $giornoit="Mercoledì";
            break;
      case 'Thursday':
            $giornoit="Giovedì";
            break;
      case 'Friday':
            $giornoit="Venerdì";
            break;
      case 'Saturday':
            $giornoit="Sabato";
            break;
      case 'Sunday':
            $giornoit="Domenica";
            break;
   default:
            $giornoit="Non so che giorno sia!";

}

In questo caso abbiamo analizzato il giorno corrente e, tramite uno switch, abbiamo convertito il giorno corrente con il relativo nome in Italiano.
Il funzionamento è abbastanza intuitivo:

  1. switch() è la funzione
  2. ($giorno) è il valore da prendere in esame, nel nostro caso il giorno in Inglese estratto dalla funzione date() e dalla lettera L minuscola
  3. case è il caso appunto che analizza la variabile giorno e la confronta con ciò che c'è scritto dopo (es. Monday, Saturday ...)
  4. :  dopo il due punti si trova quello che succede se il caso dovesse risultare vero
  5. break si mette sempre alla fine del caso
  6. default invece è ciò che esegue se NESSUNO dei casi precedenti risulta vero. Non necessita di break
Ricordo sempre che le stringhe vanno inserite tra singoli o doppi apici. In questo caso li ho utilizzati tutti e due come esempio.
Se vedete bene ho specificato nel punto 5 che il break va sempre inserito alla fine del caso. Se noi lo volessimo usare per un differente uso, potremmo, mantenendo il primo esempio, specificare quando è un giorno lavorativo della settimana o il weekend.

switch($giorno){


     case 'Monday':
     case 'Tuesday':
     case 'Wednesday':
     case 'Thursday':
     case 'Friday':
            $giornoit="Si lavora!";
            break;
     case 'Saturday':
     case 'Sunday':
            $giornoit="Finalmente il fine settimana!";
            break;
   default:
            $giornoit="Non so che giorno sia!";

}


Come si può vedere i casi sono messi uno dietro l'altro tranne l'ultimo che conterrà ciò che succederà se uno dei casi precedenti dovesse risultare vero: se sarà martedì o venerdì l'azione sarà sempre la stessa. Se invece dovesse essere sabato o domenica, allora entra in gioco il secondo blocco che specificherà che finalmente è arrivato il weekend.
Molto semplice ma se fate un pò di pratica è meglio!


Funzioni PHP, crearle ed eseguirle

Una funzione può salvare la vita a molti programmatori alle prese con un sito complesso. Possono tornare utili però anche a chi fa tanti piccoli siti.
Le funzioni servono per eseguire quelle procedure che scritte una volta rimangono invariate. Un esempio?
Prendete i giorni della settimana: dalla funzione date() estraiamo il nome del giorno della settimana ma rimane in inglese. Per averlo in Italiano cosa possiamo fare? Ma una semplice funzione che analizza il giorno corrente e con uno switch si passano in esame tutti i giorni. La funzione restituirà il nome corretto del giorno della settimana in Italiano. Ecco come:


<? function giorno(){
//con la funzione date estraiamo il giorno corrente tramite la L minuscola
$giorno=date("l",time());
switch($giorno){
case 'Monday':
$giornoit='Lunedì';
break;
case 'Tuesday':
$giornoit='Martedì';
break;
case 'Wednesday':
$giornoit='Mercoledì';
break;
case 'Thursday':
$giornoit='Giovedì';
break;
case 'Friday':
$giornoit='Venerdì';
break;
case 'Saturday':
$giornoit='Sabato';
break;
case 'Sunday':
$giornoit='Domenica';
break;
}
return $giornoit;
}
?>


Per visualizzare il risultato della funzione basterà richiamarla con un semplice echo:

echo giorno();

Semplice, no?



setInterval e Internet Explorer

E' risaputo che Internet Explorer è il browser più problematico e, ahimè (per noi programmatori), il più diffuso. CSS, javascript e chi più ne ha più ne metta.
Oggi ho riscontrato un problema molto grave su una funzione in javascript importante: setInterval.
Questa funzione, utilizzata insieme ad AJAX, permette di inviare e ricevere in modo asincrono dei dati da un'altra pagina senza bisogno di ricaricare la pagina corrente.
Con IE però non funziona. Il problema è che non ricarica la pagina esterna, quindi i valori rimangono quelli del primo caricamento. Se, per esempio, si chiede l'ora attuale, al primo caricamento viene inviata la richiesta alla pagina esterna la quale risponde con l'ora corrente. Tramite la funzione setInterval si fa ripetere la richiesta alla pagina esterna la quale procurerà l'ora ogni tot secondi (a discrezione del programmatore, 1000 = 1 secondo) e così via. Con IE il secondo passaggio non viene effettuato.
Il problema risiede nel fatto che Internet Explorer non ritiene necessario inviare la richiesta perché il file non risulta differente dalla richiesta precedente. Ma a noi serve inviarli comunque e per questo basta un semplice codice:


<script type="text/javascript">
function sndReq() {
     http.open('get', 'paginaesterna.php?ck=' + (new Date()).getTime(), true);
     http.onreadystatechange = handleResponse;
     http.send(null);
}
</script>



La riga che ci interessa è la terza:

http.open('get', 'paginaesterna.php?ck=' + (new Date()).getTime(), true);

In questa riga diciamo al browser di inviare dei dati tramite get alla pagina 'paginaesterna.php'. La variabile 'ck' permette di avere una chiamata unica per ogni richiesta, in quanto la variabile avrà data e ora corrente, che sarà differente sempre (quindi chiamata unica).